Word Template Engine:
PHP-шаблонизатор и конвертер документов
Word Template Engine — это шаблонизатор и конвертер документов на PHP, позволяющий создавать документы из шаблонов DOCX (скачать пример.docx), а также конвертировать их через LibreOffice в следующие форматы: PDF, HTML, xHTML, HTML, адаптированный для Email. Эта легковесная библиотека поможет вам в создании счетов, договоров, накладных и прочих документов. Используйте переменные внутри вашего документа и подстановку значений на стороне сервера, заменяйте и удаляйте изображения, работайте с разделами документов (страницами), делайте копии документа или разделов внутри документа, добавляйте ряды к таблицам. Выводите документ в браузер пользователя, прикрепляйте файлы WORD и PDF к электронным письмам или создавайте HTML контент для Email из ваших шаблонов.
Журнал изменений
- 1.0.1 : 19-07-2021 : Улучшена производительность при обработке больших документов. Подстановка более чем 1000 переменных занимает несколько секунд. Снижено потребление памяти и CPU. Скорость увеличена в 6-8 раз.
- 1.0.2 : 21-07-2021 : 1) Устранение бага разделителей путей файлов на Windows платформах. 2) Формирование уникальной временной субдиректории для разрешения многопользовательских конфликтов.
- 1.0.3 : 2023-04-28 : Устранение бага с кодировкой заголовков в браузере Safari при выводе файлов.
Загрузить с GitHub
Установка и использование
Public методы
- __construct ( string $template [, string|null $tmp_path, callable $errorHandler ] )
-
- @param $template Полный путь к шаблону .docx
- @param $tmp_path Опционально. Полный путь к директории временных файлов, в которой создаются рабочие файлы. По умолчанию используется корневая директория сайта или текущая директория.
- @param $errorHandler Опционально. Функция, переопределяющая стандартный обработчик ошибок. Функция принимает 2 строковых параметра: описание ошибки и уникальный статус ошибки.
Конструктор.
- setValue ( string $varName, string|null $replacement ): void
-
- @param $varName Имя переменной.
- @param $replacement Строка замены.
Замена переменной шаблона на строку значения. Переменная шаблона должна иметь следующий вид ${name}, где 'name' передаётся в качестве аргумента $varName.
- cloneRow ( string $varName, int $cnt ): void
-
- @param $varName Якорная переменная.
- @param $cnt Сколько всего рядов вам необходимо.
Клонирование табличного ряда с якорной переменной. К именам всех переменных внутри ряда, включая якорь, добавляется знак '#' и численное значение нумератора.
Например, вы клонируете ряд с якорной переменной ${key}, содержащий также другие переменные: ${customer}, ${order_id}. В результате, эти переменные заменяются на: ${key#1}, ${customer#1}, ${order_id#1}; ${key#2}, ${customer#2}, ${order_id#2} и т. д.
- alternativeSyntax ( bool $bool ): void
-
- @param $bool Использовать или нет альтернативный синтакс.
Вызовите этот метод перед подстановкой для использования альтернативного синтаксиса переменных шаблона: ~(name) вместо ${name}. Вы также можете при необходимости переключиться обратно на базовый синтаксис. Используйте альтернативный синтаксис для подстановки переменных в ссылках.
- replaceImage ( int $imageID, string $replacement ): void
-
- @param $imageID ID изображения согласно нумератору Word.
- @param $replacement Путь к новому изображению.
Замена изображения в документе на другое изображение.
- deleteImage ( int $imageID ): void
-
- @param $imageID ID изображения согласно нумератору Word.
Удаление элемента изображения в документе вместе с файлом изображения.
- save ( string $destination [, string $format = 'docx' ] ): string
-
- @param $destination Путь назначения. Может быть полным и относительным, например '/var/www/newdoc.docx', 'newdoc.pdf'. Корнем относительного пути является временная директория.
- @param $format Опционально. Формат документа: 'docx' (по умолчанию), 'pdf', 'html', 'xhtml', 'mail' (HTML, адаптированный для Email).
- @return string Полный путь нового документа.
Создание документа из обработанного шаблона.
- output ( [ string $format = 'docx', string|null $fileName, bool $isAttachment ] ): void
-
- @param $format Опционально. Формат документа: 'docx' (по умолчанию), 'pdf', 'html', 'xhtml', 'mail' (HTML, адаптированный для Email).
- @param $fileName Опционально. Определяет имя файла для загрузки.
- @param $isAttachment Опционально. Форсирует скачивание документов docx и pdf. По умолчанию docx скачивается, а pdf выводится в браузер.
Создание документа из обработанного шаблона и вывод его в браузер клиента.
- useSection ( int $idx ): void
-
- @param $idx Номер раздела.
Удаляет все разделы в документе за исключением раздела, номер которого передан в качестве аргумента. Этот метод сокращает документ до определённого раздела.
Внимание! Метод необходимо вызывать до подстановки значений, т.к. параграфы и табличные ряды кэшируются для лучшей производительности.
Внимание! Если в документе имеются разрывы страниц, следующие за ними страницы должны начинаться с параграфов. Иначе документ может неверно отображаться. - repeat ( [ int $cnt = 1, int $idx ] ): void
-
- @param $cnt Опционально. Сколько всего копий необходимо создать. По умолчанию: 1.
- @param $idx Опционально. Повтор только одного раздела.
Копирование документа один или несколько раз. Если передаётся второй аргумент, копируется только определённая секция и добавляется в конец документа. Внимание! Метод должен вызываться до или после подстановки значений, т.к. параграфы и табличные ряды кэшируются для лучшей производительности. Выбор порядка вызовов зависит от документа.
- dropMetaData ( ): void
-
Удаление всех базовых метаданных документа и двух расширенных сойств: "Компания", "Руководитель". После вызова этого метода вы должны переопределить время создания документа, название и автора документа, иначе документ будет повреждён.
- setTitle ( string $title ): void
-
- @param $title
Определение базового свойства документа - "Название". Также выводится в качестве заголовка документов, открытых в браузере: PDF, HTML, XHTML.
- setAuthor ( string $author ): void
-
- @param $author
Определение базового свойства документа - "Автор". Устанавливает автора, очищает свойства "Кем изменено".
- setTime ( [ string|null $time ] ): void
-
- @param $time Опционально. Дата и время в формате ISO 8601. Если неопределено или null, устанавливается текущее время.
Определение времени создания документа. Очищает свойства "Изменено", "Напечатано".
- setCompany ( string $companyName ): void
-
- @param $companyName
Определение расширенных метаданных - "Компания".
- setManager ( string $manager ): void
-
- @param $manager
Определение расширенных метаданных - "Руководитель".
- setSubject ( string $subject ): void
-
- @param $subject
Определение базовых метаданных - "Тема".
- setKeywords ( string $keywords ): void
-
- @param $keywords
Определение базовых метаданных - "Теги".
- setDescription ( string $description ): void
-
- @param $description
Определение базовых метаданных - "Примечания".
- setCategory ( string $category ): void
-
- @param $category
Определение базовых метаданных - "Категории".
- setStatus ( string $contentStatus ): void
-
- @param $contentStatus
Определение базовых метаданных - "Состояние контента".
- embedStyleSheet ( string $stylesheet ): void
-
- @param $stylesheet
Добавление встроенных стилей CSS в секцию HEAD документа, который будет конвертирован в формат HTML или XHTML.
- embedScript ( string $script ): void
-
- @param $script
Добавление встроенных скриптов JavaScript в секцию HEAD документа, который будет конвертирован в формат HTML или XHTML.
- addStyleSheet ( string $url ): void
-
- @param $url
Добавление внешних стилей CSS в секцию HEAD документа, который будет конвертирован в формат HTML или XHTML
- addScript ( string $url ): void
-
- @param $url
Добавление внешних скриптов JavaScript в секцию HEAD документа, который будет конвертирован в формат HTML или XHTML
- sendOutputHeaders ( bool $bool ): void
-
- @param $bool
Вызовите этот метод с параметром FALSE в качестве аргумента перед выводом документа, если вы хотите установить свои заголовки.
- setOutputFilter ( string $filter ): void
-
- @param $filter Параметр фильтра LibreOffice, например 'HTML:EmbedImages'.
Если вам необходимо переопределить фильтр конвертации, установите его перед сохранением / выводом документа.
- setLocale ( string $locale ): void
-
- @param $locale UNIX локаль.
Локаль, устанавливаемая перед конвертацией шаблона .docx в другие форматы. По умолчанию: 'C.UTF-8'.
Дополнительная информация
- Смотрите больше примеров в каталоге дистрибутива examples.
- Ставьте лайк проекту на GitHub: https://github.com/philip-sorokin/word-template-engine.
- Поддержите проект репостом в соцсетях или публикацией в вашем блоге.
- Пожертвовать на развитие проекта: https://разработчик.москва/donate.