Pull to refresh

Comments 23

Вот за что люблю хабр.
Порой бывают очень полезные статьи.
Вчера только задумывался над вопросом генерации документа из шаблона на сайте,
а сегодня уже ответ готовый… Даже подумать как следует не дали :D
можешь реализовать это для ms word'a
сомневаюсь что это так же легко реализуется для doc. Для docx — я думаю делается так же легко.
Сохраняй шаблон как rtf — это текстовый формат, в нём точно так же можно заменять плэйсхолдеры (я не знал про переменные в тексте, вставлял свои, типа %firstname%, %lastname%...)
сердитый вариант: сгенерировать простой HTML без стилей и отдать как application/msword. Работает в word на ура.

сердитый вариант при сложной структуре: открыть шаблон в word и сохранить как HTML. В полученный HTML скриптом вносить требуемые изменения и отдавать как application/msword. Вместо HTML можно попробовать MHT.
проблемы такого способа в том что конвертить из doc получается только либо руками, либо через VB на windows сервере. Для некоторого круга задач это приемлемо. Еще одна проблема в том что в текстовых процессорах отличных от word все обычно едет к чертям, а в случае с MHT вообще не работает.
UFO just landed and posted this here
Гениально!
Особенно радует простота предложенного решения.
В августовском выпуске LinuxFormat как раз эта же тема и почти такое же решение описывали.
Радует как все оказывается просто, ато открыл в текстовом редакторе и увидел кашу из букавок, ан нет это зип-архив.
Не читаю этот журнал. Мое решение работает у меня уже почти год=)
Статью подтолкнула написать другая статья с хабрахабра: habrahabr.ru/blogs/php/69417/

Вообще, я не претендую на изобретение — спецификация описана очень подробно и кто угодно, задавшись целью может легко сделать что-то и лучше и удобнее ;)
Мы сейчас разрабатываем систему документооборота на основе шаблонов ODT. Ваш пример очень упрощен но направление верное. Например, если нужно выводить список клиентов и их заказов (число не известно, как не известно и какие из их свойств выводить).
Близкий пример — генерация инвоиса по шаблону. И учтите еще вот какой момент — пользователь может вводить теги не только вашим способом, но и копируя из из одного документа в другой, или вбив текст, похожий на ваш (вбил дата, выделил цветом). И будет справедливо ждать что это сработает. А такой «тег» может быть «разорван» на 2 и более частей в XML — находится в разных нодах.
В общем, все гораздо сложнее.
вы читали пункт статьи «Пару комментариев»?
Я не критикую ваш подход. Просто указываю на то что вы даже в этой простой задаче работаете в идеальных условий, хотя наверное вы и правы. Кстати, где можно прочитать более подробно о «В ODT есть также возможность использоваться условные элементы (например часть текста показывается или не показывается в зависимости от условия — например значения пользовательского поля)»?
К сожалению, в гос.организации, которой программлю и аутсорсю, используют сплошные MS Word/Excel. :-( А тоже очень хотелось генерировать ODF на лету. Промучавшись с попытками адекватно выводить что-то в Ворд/Эксель пошел по пути наименьшего сопротивления — выдавать наружу html с расширением doc/xls и соответствующим mime-type. Получающиеся файлы отлично всасываются хоть MSOffice'ом, хоть OpenOffice'ом, чем все и довольны. Но не оставляю надежду таки доказать представителям гос.организации, что использовать пиратское — нехорошо и лучше перейти на тот же бесплатный OpenOffice. :-)
Можно работать с OO (шаблоны хранить в ODF), а потом из файла генерить MS-совместимые файлы (запуская oo в headless режиме).
Спасибо за совет — буду иметь в виду на будущее. :-) Но, откровенно говоря, городить такой огород на веб-сервере немного лениво… По крайней мере для моих задач…
хех… У нас у заказчика тоже самое, спрошлой ворд да эксель, но по большей части все-таки отчеты в экселе. Раньше тоже так же отдавал под нужным mime-type html, но потом нашли библиотечку одну php_writeexcel, слегка допилили ее и в общем используем.
Она генерит в старом формате biff5, но тем не менее — это «настоящий» excel.
Спасибо за ссылку — посмотрю. :-) Заказчика и в том виде устроило, так что без разницы. А вот когда нужно было не таблицы, а именно текстовые файлы для распечатки, причем с разным хитрым форматированием — тогда пришлось PhpRtf использовать. У нее, по-моему, и альтернатив-то нет по сути…
Да, если говорить про ворд, то однозначно Phprtf.
Минусуйте, если совсе не в тему, но интересен вопрос — как(чем?) сгенерить серию jpg/png/gif (да хоть многостраничный tiff или pdf) из этих чертовых doc/docx/xls/xlsx/odf…

сорри за оффтоп, сорри, но наболело
Спасибо, статья пригодится, только мы наверное пойдем дальше, попробуем присобачить OOo в headless режиме, для печати и конвертации в другие форматы (.doc, .pdf).
Sign up to leave a comment.

Articles