Генерация документов в PHP, ASP.NET используя шаблоны из MS Word
Задача: на веб-сайте, написанном на php или asp.net необходиомо сделать возможность генерации документов или отчётов в форматах pdf, doc, docx, rtf с настраиваемым внешним видом.
Решение: сервис livedocx.
Сервис позволяет используя word документ со специальной разметкой (которая легко создаётся используя MS Word 2003 и выше), используя php или asp.net, сгенерировать документ с необходимой разметкой и данными, например, из базы данных. Для обоих языков существуют библиотеки, при помощи которых для генерации необходимо написать несколько строк кода.
Zend Framework начиная с версии 1.10 включает библиотеку для работы с этим сервисом. Рассмотрим пример кода:
$mailMerge = new Zend_Service_LiveDocx_MailMerge(array(
'username' => 'логин',
'password' => 'пароль'
));
//set template
$mailMerge->setLocalTemplate('path/to/template');
//add data to document
$mailMerge->assign('report_name','Address report');
$data = array(
array('first_name'=>'Petr','last_name'=>'Vasiliev'),
array('first_name'=>'John','last_name'=>'Smith')
);
$mailMerge->assign('names', $data);
//get document
$mailMerge->createDocument();
$doc = $mailMerge->retrieveDocument('pdf');
Как видно из примера мы можем выводить как отделыные значения переменных, так и целые массивы. Далее рассмотрим как сделать правильный шаблон для вывода данных. Для написания шаблона в примере используется русская версия MS Word 2007.
Если мы хотим чтобы на каждой странице был заголовок или логотип, необходимо добавить его в колонтитулы (подробности работы с MS Word рассматриваться не будут).
Для того, чтобы создать переменную, в которую будут выводиться данные, перейдём в «Вставка -> Экспресс блоки -> Поле», в листбоксе «Поле» выбираем ‘MergeField» и указываем имя, соответствующее первому параметру из метода «assign».
Для вывода массива, необходимо добавить MergeField поля с именами, соответствующими ключам в массиве, и потом их, вместе с необходимой разметкой, объединить используя закладки «blockStart_NAME» и «blockEnd_NAME», где NAME соответствует первому параметру из метода «assign». То есть для нашего примера необходимо создать два MergeField с именами «first_name» и «last_name» и объединить их в закладки «blockStart_names» и «blockEnd_names». Для добавления закладок воспользуйтесь командой «Вставка -> Закладка -> Добавить»
Виталий 20:23 on 20.07.2010 Прямая ссылка
А его только на Zend Framework-е можно использовать.. или можно еще куда прикрутить?
hws 12:56 on 16.08.2010 Прямая ссылка
В Zend Framework-e начиная с версии 1.10 есть готовая библиотека для работы с livedocx. Также в документации на сайте есть руководство по работе с сервисом используя ASP.NET. Если вам это не подходит, необходимо использовать LiveDocx MailMerge API http://www.livedocx.com/pub/documentation/api.aspx
Владимир Цуканов 17:22 on 26.03.2011 Прямая ссылка
Спасибо, Владимир!
Очень полезная статья.