Добрый день!
Необходимо сгенерировать единый документ Word DOCX. Применяемая библиотека
PHPOffice/PHPWord. Версия 0.18
В начальном шаблоне присутствует блок:
${additional_block}
${block}
${/additional_block}
для размещения динамических страниц.
Для реализации данного функционала я сначала открываю шаблон, заполняю его необходимыми данными (через setValue), далее я через цикл добавляю необходимые мне блоки. Содержимое блоков - HTML текст из плагина TinyMCE.
Фрагмент кода:
/* additional_block */
$m = new \Mustache_Engine(array('entity_flags' => ENT_QUOTES));
$templateProcessor->cloneBlock('additional_block', count($db_contract_docs), true, true);
$i = 1;
foreach ($db_contract_docs as $docs){
/* Подставим значения через шаблонизатор */
$template = $m->render($docs->template, $params);
$phpWord = new PhpWord('Word2007');
/* Создадим новую страницу */
$section = $phpWord->addSection();
/* Конвертируем HTML в Word */
\PhpOffice\PhpWord\Shared\Html::addHtml($section, $template, false);
$xmlWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY, './', WordSettings::hasCompatibility());
$containerWriter = new Container($xmlWriter, $section);
$containerWriter->write();
$htmlAsXml = $xmlWriter->getData();
WordSettings::setOutputEscapingEnabled(false);
$templateProcessor->setValue('block#' . ($i), $htmlAsXml);
$templateProcessor->addImageToRelations();
WordSettings::setOutputEscapingEnabled(true);
$i++;
}
header("Content-Disposition: attachment; filename=contract_$contract.docx");
$templateProcessor->saveAs('php://output');
После выполнения данного кода генерируется для скачивания файл Word, который успешно открывается.
Но если через редактор добавить картинку (), то картинка вставляется, но ресурс в файл Word (архив) не записывается (в папку Media и не прописывается в document.xml.rels). Из-за этого возникает ошибка содержимого файла. В итоге файл открывается, но в нём нет изображения. Возможно необходимо вызвать ещё какой-либо метод?
Прошу помочь.