Создать, редактировать Word файл через PHP

Время от времени многим программистам приходится сталкиваться с такими задачами, как создание word или pdf файлов средствами PHP. Если со вторым ощутимых проблем нет, так как есть хорошая библиотека, то с Word-ом дела обстоят сложнее.

Чтобы создать word файл можно использовать специальную библиотеку или пойти более хитрым путем. О нем и пойдет речь.

Подключать библиотеку и разбираться в принципах ее работы у меня не было желания, поэтому я нашел способ генерации Word документов на лету с помощью PHP.

Для этого нужно подготовить word шаблон и сохранить как xml файл. Затем средствами php мы будем открывать xml файл и делать замену нужных строк на необходимые и сохранять файл в виде .doc расширения. Таким образом, любой пользователь сможет без ошибок открыть сгенерированный word и работать с ним.

Единственной сложностью такого подхода остается разобраться с кодом самого word-а в xml виде, так как в нем будет много мусора. Для этого вам нужно будет постоянно создавать word файлы и прописывать слова, теги, свойства, таблицы. А в xml версии смотреть, как выглядит тот или иной код, чтобы затем его использовать для генерации шаблонов. Советую прописывать в ворде слова очень аккуратно, например, если нажмете backspace на букве или enter, то слово может разбиться на несколько групп в разных тегах. Поэтому для xml версии - чем проще пишите в word, тем лучше его xml версия.

По моим наблюдениям тело word-а всегда в тегах <w:body></w:body>. Поэтому внутри них и находится содержимое.

Пара примеров:

Текст: <w:p w:rsidR="00822E93" w:rsidRDefault="003428FA"><w:r><w:t>Первый текст</w:t></w:r></w:p>

Перевод строк: <w:p w:rsidR="00655BB2" w:rsidRDefault="00655BB2"><w:pPr><w:rPr><w:lang w:val="en-US"/></w:rPr></w:pPr></w:p>

Таблица похожа на обычный table в html:

<w:tbl> = <table>
<w:tr> = <tr>
<w:tc> = <td>

Напоследок оставлю бонус собственного производства.

Разместите папку word, например, в корень вашего сайта и запустите index.php. Скрипт не только создаст на основе word.xml файл zakaz.doc, но и автоматически скачает его. Вам останется только открыть через word сгенерированный документ. Сама генерация идет в index.php. Для примера добавил помимо обычных строк таблицу, в которой вы сможете добавлять свои значения. Табличка динамическая. Это означает, что вы сможете добавлять в нее бесконечное количество товаров. Кстати, никто не мешает вам использовать генерацию прямо из БД вашего сайта. Это может быть очень удобным.

Создать, редактировать Word файл через PHP: 3 комментария

  1. А как сделать, чтобы файл создавался не в корне, а в подпапке? Добавляю путь, но не работает

    file_put_contents("files\zakaz.doc", $template);
    file_put_contents("\files\zakaz.doc", $template);

    через переменную содержащую путь тоже не создается.

    1. Можно чуть по другому. docx это обыкновенный архив, внутри xml, надо распаковать архив, в нужном xml заменить переменные заключённые в фигурные скобки {} на значения, и запаковать обратно. Предварительно можно руками поправить xml в скобках {} убрать лишние символы или программно с помощью например регулярных выражений.

Добавить комментарий для andrei Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *


Введите капчу: