@peacock
HTML/CSS, JS, PHP, JAVA, C#, Ubuntu

Как конвертировать HTML с картинками в DOCX в PHPWord?

Добрый день!
Необходимо сгенерировать единый документ 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). Из-за этого возникает ошибка содержимого файла. В итоге файл открывается, но в нём нет изображения. Возможно необходимо вызвать ещё какой-либо метод?

Прошу помочь.
  • Вопрос задан
  • 693 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы