Как стать автором
Обновить

Комментарии 43

Кстати, MHT — отличное решение для сокращения количества запросов к высоконагруженному серверу. Увы, разработчики как хрома, так и файрфокса не удосужились за 11 лет реализовать RFC, опубликованный в 1999-ом году.
Надо mod_mht к Апачу сделать чтобы он на ходу страницы в .mht собирал и отдавал.
Я для аналогичной задачи использовал AbiWord:

abiword -t doc document.html -o document.doc

Была тонкость. На девелоперской машинке AbiWord подтягивал картинки по http, а на продакшн почему-то нет. Пришлось в html вписать путь к картинкам не http:// ...., а полный путь к файлу file:///… и на выходе получался настоящий doc-файл с картинками, который везде открывался.
Спасибо! Будет время, попробую и этот вариант.
Кстати по поводу openoffice и преобразования. Eсть использующий openoffice преобразователь документов unoconv
Благодарю, возьму на заметку!

У описанного мною метода по сравнению с внешними утилитами всё-таки есть ещё один плюс — вышеописанный скрипт можно выполнить и на shared хостинге, без каких-либо дополнительных утилит.
Да, безусловно, это большой плюс.
Пример сконвертированного файла.

Скачал, попытался открыть в LibreOffice 3.4 — открывается как текстовый файл с кракозябрами вместо картинок и отсутствием форматирования.
Так что решение пойдёт, наверно, только для пользователей MS Office :-(
Честно, не догадался проверить результат в LibreOffice/OpenOffice, только в Word XP/2003 и старше. Значит не такой уж и красивый способ вышел. Воистину, не очень честный.
Pages из пакета iWork и вовсе файл не открывает.
MS Word for Mac — плохо всё
Пардон, там html в rtf надо, не доглядел.
Зато для меня в самый раз — спасибо
А в случае сохранения в обычный html нельзя ли картинки интегрировать с помощью конструкции data:image/gif;base64? :)
Такой метод пробовал, увы Word 2003 вставленные таким образом картинки нне отображал.
Я для PDF когда-то использовал класс что-то типа HTML->PDF.

Думаю должен такой и для ворда быть :)
На будущее.
OpenXML, docx ваши друзья. Ну и так к слову. В java с этим лучше ;)
Как вовремя вы подоспели с этой статьёй! Неделю назад задавал такой же вопрос в Q&A на хабре, один из ответов был как раз использовать mht. Не успел ещё взяться за дело, как вы уже даёте всё разложили по полочкам, спасибо :)
НЛО прилетело и опубликовало эту надпись здесь
для простых таблиц вроде же можна юзать обычный csv с расширением xls
CSV — далеко не таблица, а скорее список значений, крайне ограниченный по возможностям
Для openoffic-а такие костыли просто не нужны. Сгенерил XML, припаковал zip-ом, и готов OO-файл :)
Тоже поделюсь phpword.codeplex.com/
Колонтитулы, нумерация страниц, объединение ячеек(строк) в таблицах ну и прочее…
Ой, извиняюсь. Не подходит это под вашу задачу, тут «страаашное» форматирование текста, просто html скормить не получится
PHPRtfLite хорошая библиотечка для создания правда RTF документа, а не DOC, но создает достаточно исправно *.rtf) sourceforge.net/projects/phprtf/ сам ей пользуюсь, доросла до релиза и многофункциональна, есть документация.
А еще можно в офисе подготовить шаблон документа в формате rtf и расставить по нему переменные какие-нибудь. Например, %var%. Потом просто открыть rtf как строку и заменить переменные на нужные данные.

Пока только не разобрался можно ли таким способом дополнительные строки в таблицах создавать. Но всякие платежки создаются на-ура!
В моём случае внутрь %var% должны автоматически попасть таблицы, рисунки, и т.д. Т.е., преобразование не такое тривиальное, увы.
У вас конечно всё портят картинки.
Но вообще, ещё есть «самый джедайский» путь — сделать правильный html без какого-либо мусора в DOM-структуре (вся верстка на CSS). Если мусора в верстке нет, то и Word, и Excel, и куча другого софта нормально открывают такие html файлы и без всякой конвертации в другие форматы.
К сожалению, это не DOC. Если JPG переименовать в PNG, то картинка всё равно откроется, но прозрачность от этого не появится. И у вас то же.
А давайте все проблемы решать так? Windows переименуем в Linux, ie6 переименуем в chrome, icq в jabber, mp3 в ogg и т. д.
По делу — не кому не советую делать то, что описано в статье. Это конечно хорошо, что всё откроется, но представьте теперь что может делать пользователь с этим файлом дальше? Возьмёт попытается отправить в Google Docs — косяк, или захочет открыть в какой-нибудь специфичной программе. Естественно у него ничего не получится, пользователь будет ругать разработчиков. Из таких идей и получается у нас потом неразбериха и путаница, когда разработчику приходится проверять, а действительно ли пользователь загрузил JPG, или это переименованная BMP…
Если задача только открыть файл — ну и отправляйте html/mht, всё откроется прекрасно.
Согласен, решение не очень прямое, потому и метод назван «не очень честным». Уточню в статье, что получившийся файл открывается только в семействе продуктов «Microsoft Word».

Если задача только открыть файл — ну и отправляйте html/mht, всё откроется прекрасно.


Не всегда есть возможность решить задачу правильно. Требовалось получить именно «файл с раширением doc, открывающийся в Microsoft Word'е». В будущем, без сомнения, задача будет решена прямее, но при отсутствии достаточного количества времени на решение это было лучшее, что пришло мне в голову.
Программа Просмотр на маке отказалась открывать этот файл, а LibreOffice открыл кракозябры исходного текста.
Если уж обманывать то я бы из PDF'ка генерировал бы картинку и вставлял бы ее в любой формат XLS, DOC или еще куда :) или просто отдавал бы в виде картинки

плюсы:
1. кросс платформенность.
2. при таком решении не нужны вообще никакие форматы, картинка она и в африке картинка, откроется везде хоть на мобильнике!
3. правильная печать.

минусы:
1 не возможность редактирования.
2. в зависимости от содержимого страницы, размер итогового файла может быть не приемлимо большим

Все зависит от целей и задач.
Да, с картинкой неплохая идея, если редактирование не требуется.
Насколько я понимаю, автор создает некие офлайн-версии сайтов. Но там ведь нужна кликабельность ссылок!
А почему нельзя взять конвертор написаный на другом языке и просто с его помощью уже получить нармальный файл необходимого формата. Есть например очень хороший JODConverter, написаный на джаве.
Кстате там же есть реализация на питоне.
Унылое говно.

Народ, да забудьте наконец вы этот проприетарный DOC как страшный сон! Иначе мы так ещё десяток лет будем писать всевозможные генераторы (генерирующие при том в большинстве случаев далеко не настоящий DOC, а RTF или чего похуже) и парсеры для него.
Сейчас стандартами являются OpenDocument, Office Open XML, PDF. Вот и ориентируйтесь.
OO документ не откроется с помощью Microsoft Word'а 2003 например. Если уж требуется кроссплатформенность и универсальность, идеальным вариантом будет RTF или MHT (или HTML с base64 интегрированными картинками).

Но повторюсь, мне требовалось решить конкретную, жестко заданную в ТЗ задачу: файлы DOC, открываемые Word 2003 и выше.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории