Работа с phpWord. Заполнение шаблона договора docx (генерация word из php)

Работа с phpWord. Заполнение шаблона договора docx (генерация word из php)
Начну с постановки задачи. А она довольно простая — работая над сайтом клиента по прокату автомобилей возникла необходимость несколько автоматизировать рутинные операции. В частности требовалось при оформлении аренды на сайте автоматически заполнять в договоре некоторые поля. Вот этим и займемся.

Для работы нам потребуется замечательная библиотека phpWord. Она имеет огромное количество возможностей, мы же рассмотрим ее способность заполнять готовые шаблоны документов.

Итак, мы скачали phpWord, распаковали архив и залили на веб-сервер. В моем случае речь идет о версии 0.6.2 Beta.

Теперь нам необходимо подготовить сам шаблон. Для этого запускаем MS Word или даже Wordpad и набираем текст договора. Для примера я набросал тестовый договор, который выглядит вот так (кликабельно):

Давайте определимся, что в этом шаблоне мы поручим заполнять php скрипту. К примеру, пусть это будет номер договора с датой, а также ФИО продавца и номер паспорта. Теперь давайте превратим наш договор в шаблон, с которым будем работать дальше.

Итак, для заполнения мы определили данные, давайте подберем для них имена. Это может быть транслитерация или английское написание, вы можете выбрать по вкусу.

Данные Переменная
Номер договора d_num
Дата договора d_date
Фамилия last_name
Имя name
Отчество surname
Замечательно. Теперь делаем следующее — на тех местах, где у нас данные, мы их удаляем и вставляем имена переменных в виде

${variable}

Т. е. там, где у нас номер договора 123 мы пишем ${d_num} и т. д. для всех переменных. В итоге получится вот такой шаблон договора:

Отнеситесь к этому внимательно — ошибок допускать нельзя. Сохраняем полученный шаблон под именем Template.docx (можно назвать по своему).

Внимание! При сохранении документа в Word 2010 поставьте чекбокс «Поддерживать совместимость с предыдущими версиями Word» иначе работать не будет.

Вот теперь наш шаблон готов, теперь давайте научим php заполнять его.

Создаем php файл (к примеру, index.php) со следующим содержимым:

view sourceprint?
01.
require_once ‘PHPWord.php’;
02.
$PHPWord = new PHPWord();
03.
$document = $PHPWord->loadTemplate(‘Template.docx’); //шаблон
04.
$document->setValue(‘d_num’, ‘777’); //номер договора
05.
$document->setValue(‘d_date’, ‘04.10.2014’); //дата договора
06.
$document->setValue(‘last_name’, ‘Никоненко’); //фамилия
07.
$document->setValue(‘name’, ‘Сергей’);// имя
08.
$document->setValue(‘surname’, ‘Васильевич’);// отчество
09.
$document->save(‘Template_full.docx’); //имя заполненного шаблона для сохранения
Вот и все. Если теперь мы запустим выполним наш скрипт, то в итоге получим заполненный данными шаблон договора:

Как видно, скрипт успешно заполнил шаблон, вот только с русскими символами беда — они выглядят не так, как задумывалось. Как решить эту проблему читайте в статье.

На этом все. Надеюсь, что хоть немного помог читателю разобраться с заполнением docx файлов на php. Для изучения все материалы можно скачать в виде архива.