Комментарии 43
Кстати, MHT — отличное решение для сокращения количества запросов к высоконагруженному серверу. Увы, разработчики как хрома, так и файрфокса не удосужились за 11 лет реализовать RFC, опубликованный в 1999-ом году.
Я для аналогичной задачи использовал AbiWord:
Была тонкость. На девелоперской машинке AbiWord подтягивал картинки по http, а на продакшн почему-то нет. Пришлось в html вписать путь к картинкам не http:// ...., а полный путь к файлу file:///… и на выходе получался настоящий doc-файл с картинками, который везде открывался.
abiword -t doc document.html -o document.doc
Была тонкость. На девелоперской машинке AbiWord подтягивал картинки по http, а на продакшн почему-то нет. Пришлось в html вписать путь к картинкам не http:// ...., а полный путь к файлу file:///… и на выходе получался настоящий doc-файл с картинками, который везде открывался.
Кстати по поводу openoffice и преобразования. Eсть использующий openoffice преобразователь документов unoconv
Пример сконвертированного файла.
Скачал, попытался открыть в LibreOffice 3.4 — открывается как текстовый файл с кракозябрами вместо картинок и отсутствием форматирования.
Так что решение пойдёт, наверно, только для пользователей MS Office :-(
Второй вариант решения можно с помощью вот этого инструменат реализовать: code.google.com/p/wkhtmltopdf/
А в случае сохранения в обычный html нельзя ли картинки интегрировать с помощью конструкции data:image/gif;base64? :)
Вот здесь описывается неплохо: www.xiper.net/collect/html-and-css-tricks/overclock-site/data-url.html
Я для PDF когда-то использовал класс что-то типа HTML->PDF.
Думаю должен такой и для ворда быть :)
На будущее.
Думаю должен такой и для ворда быть :)
На будущее.
OpenXML, docx ваши друзья. Ну и так к слову. В java с этим лучше ;)
Как вовремя вы подоспели с этой статьёй! Неделю назад задавал такой же вопрос в Q&A на хабре, один из ответов был как раз использовать mht. Не успел ещё взяться за дело, как вы уже даёте всё разложили по полочкам, спасибо :)
НЛО прилетело и опубликовало эту надпись здесь
Тоже поделюсь phpword.codeplex.com/
Колонтитулы, нумерация страниц, объединение ячеек(строк) в таблицах ну и прочее…
Колонтитулы, нумерация страниц, объединение ячеек(строк) в таблицах ну и прочее…
PHPRtfLite хорошая библиотечка для создания правда RTF документа, а не DOC, но создает достаточно исправно *.rtf) sourceforge.net/projects/phprtf/ сам ей пользуюсь, доросла до релиза и многофункциональна, есть документация.
А еще можно в офисе подготовить шаблон документа в формате rtf и расставить по нему переменные какие-нибудь. Например, %var%. Потом просто открыть rtf как строку и заменить переменные на нужные данные.
Пока только не разобрался можно ли таким способом дополнительные строки в таблицах создавать. Но всякие платежки создаются на-ура!
Пока только не разобрался можно ли таким способом дополнительные строки в таблицах создавать. Но всякие платежки создаются на-ура!
У вас конечно всё портят картинки.
Но вообще, ещё есть «самый джедайский» путь — сделать правильный html без какого-либо мусора в DOM-структуре (вся верстка на CSS). Если мусора в верстке нет, то и Word, и Excel, и куча другого софта нормально открывают такие html файлы и без всякой конвертации в другие форматы.
Но вообще, ещё есть «самый джедайский» путь — сделать правильный html без какого-либо мусора в DOM-структуре (вся верстка на CSS). Если мусора в верстке нет, то и Word, и Excel, и куча другого софта нормально открывают такие html файлы и без всякой конвертации в другие форматы.
К сожалению, это не DOC. Если JPG переименовать в PNG, то картинка всё равно откроется, но прозрачность от этого не появится. И у вас то же.
А давайте все проблемы решать так? Windows переименуем в Linux, ie6 переименуем в chrome, icq в jabber, mp3 в ogg и т. д.
По делу — не кому не советую делать то, что описано в статье. Это конечно хорошо, что всё откроется, но представьте теперь что может делать пользователь с этим файлом дальше? Возьмёт попытается отправить в Google Docs — косяк, или захочет открыть в какой-нибудь специфичной программе. Естественно у него ничего не получится, пользователь будет ругать разработчиков. Из таких идей и получается у нас потом неразбериха и путаница, когда разработчику приходится проверять, а действительно ли пользователь загрузил JPG, или это переименованная BMP…
Если задача только открыть файл — ну и отправляйте html/mht, всё откроется прекрасно.
По делу — не кому не советую делать то, что описано в статье. Это конечно хорошо, что всё откроется, но представьте теперь что может делать пользователь с этим файлом дальше? Возьмёт попытается отправить в Google Docs — косяк, или захочет открыть в какой-нибудь специфичной программе. Естественно у него ничего не получится, пользователь будет ругать разработчиков. Из таких идей и получается у нас потом неразбериха и путаница, когда разработчику приходится проверять, а действительно ли пользователь загрузил JPG, или это переименованная BMP…
Если задача только открыть файл — ну и отправляйте html/mht, всё откроется прекрасно.
Согласен, решение не очень прямое, потому и метод назван «не очень честным». Уточню в статье, что получившийся файл открывается только в семействе продуктов «Microsoft Word».
Не всегда есть возможность решить задачу правильно. Требовалось получить именно «файл с раширением doc, открывающийся в Microsoft Word'е». В будущем, без сомнения, задача будет решена прямее, но при отсутствии достаточного количества времени на решение это было лучшее, что пришло мне в голову.
Если задача только открыть файл — ну и отправляйте html/mht, всё откроется прекрасно.
Не всегда есть возможность решить задачу правильно. Требовалось получить именно «файл с раширением doc, открывающийся в Microsoft Word'е». В будущем, без сомнения, задача будет решена прямее, но при отсутствии достаточного количества времени на решение это было лучшее, что пришло мне в голову.
Программа Просмотр на маке отказалась открывать этот файл, а LibreOffice открыл кракозябры исходного текста.
регулярка:
preg_match_all('@
preg_match_all('@
Dirty hack
Если уж обманывать то я бы из PDF'ка генерировал бы картинку и вставлял бы ее в любой формат XLS, DOC или еще куда :) или просто отдавал бы в виде картинки
плюсы:
1. кросс платформенность.
2. при таком решении не нужны вообще никакие форматы, картинка она и в африке картинка, откроется везде хоть на мобильнике!
3. правильная печать.
минусы:
1 не возможность редактирования.
2. в зависимости от содержимого страницы, размер итогового файла может быть не приемлимо большим
Все зависит от целей и задач.
плюсы:
1. кросс платформенность.
2. при таком решении не нужны вообще никакие форматы, картинка она и в африке картинка, откроется везде хоть на мобильнике!
3. правильная печать.
минусы:
1 не возможность редактирования.
2. в зависимости от содержимого страницы, размер итогового файла может быть не приемлимо большим
Все зависит от целей и задач.
А почему нельзя взять конвертор написаный на другом языке и просто с его помощью уже получить нармальный файл необходимого формата. Есть например очень хороший JODConverter, написаный на джаве.
Кстате там же есть реализация на питоне.
Кстате там же есть реализация на питоне.
/<img\b[^>]+src=([\'\"])(.*)\\1/iU
Унылое говно.
Народ, да забудьте наконец вы этот проприетарный DOC как страшный сон! Иначе мы так ещё десяток лет будем писать всевозможные генераторы (генерирующие при том в большинстве случаев далеко не настоящий DOC, а RTF или чего похуже) и парсеры для него.
Сейчас стандартами являются OpenDocument, Office Open XML, PDF. Вот и ориентируйтесь.
Народ, да забудьте наконец вы этот проприетарный DOC как страшный сон! Иначе мы так ещё десяток лет будем писать всевозможные генераторы (генерирующие при том в большинстве случаев далеко не настоящий DOC, а RTF или чего похуже) и парсеры для него.
Сейчас стандартами являются OpenDocument, Office Open XML, PDF. Вот и ориентируйтесь.
OO документ не откроется с помощью Microsoft Word'а 2003 например. Если уж требуется кроссплатформенность и универсальность, идеальным вариантом будет RTF или MHT (или HTML с base64 интегрированными картинками).
Но повторюсь, мне требовалось решить конкретную, жестко заданную в ТЗ задачу: файлы DOC, открываемые Word 2003 и выше.
Но повторюсь, мне требовалось решить конкретную, жестко заданную в ТЗ задачу: файлы DOC, открываемые Word 2003 и выше.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Не очень честная генерация DOC файлов на PHP