У каждой задачи есть несколько вариантов решения. И иногда в угоду скорости приходится выбирать не самый красивый, зато работающий и выполняющий поставленные перед ним цели. Итак, в один не очень прекрасный день возникла необходимость реализовать следующую функцию: у каждой (почти) страницы сайта должны быть автоматически сгенерированные копии в форматах DOC и PDF. С сохранением всех таблиц и картинок внутри контента. И если с PDF всё относительно просто (tcpdf наш друг и брат), то с DOC'ом возникла морока. Под катом — пример решения данной задачи.В голову приходили последовательно такие варианты решения:
- Установить на сервер OpenOffice (сервер на FreeBSD) и разобраться с преобразованием. Красивое решение, но время поджимало.
- Сгенерировать вместо DOC'а файлик в формате RTF, благо формат открытый и библиотек для работы с ним много. Минус – готового преобразователя HTML->RTF (с, напомню, сохранением картинок и таблиц) я не нашел, а писать свою – для этого нужен определённый запас времени
- Не очень честный — просто “в лоб” сохранить HTML страницу с расширением DOC – Word 2003 и выше откроет без проблем, проверено. Плюс – отличнейшая скорость преобразования и сохранение всей верстки. Минус – картинки таким образом не сохранить (да и честность метода несколько хромает).
Вот собственно из третьего варианта и родилось окончательное решение: создавать документ формата MHT, интегрировать в него картинки и сохранить с расширением DOC. Для генерации использовалась простенькая библиотека, взятая отсюда .Код не претендует на красоту и универсальность, более того, в нем есть проблемы, не актуальные для того сайта, но главное – он работает, и его достаточно, чтобы разобраться в теме.
Не очень честная генерация DOC файлов на PHP
Появилась бы эта статья прошлым летом, когда мне надо было автоматически генерировать файлы doc по шаблону, цены бы ей для меня не было!