Я использую PHPWord (https://github.com/PHPOffice/PHPWord) для создания Microsoft Файл Word (.docx), который я сохраняю в своей системе. Это работает отлично и, как и ожидалось. Я также хочу сохранить версию этого файла для Adobe Acrobat (.pdf) в своей системе. Для этого я полагаюсь на PHPWord в сочетании с dompdf (https://github.com/dompdf/dompdf а>). Вот тут и начинаются проблемы.
Мой PHP-код выглядит следующим образом:
// first, save the completed .docx file that I've generated
$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, "Word2007");
$objWriter->save($path_docx);
// second, set PHPWord PDF rendering variables
\PhpOffice\PhpWord\Settings::setPdfRendererPath("/var/www/html/vendor/dompdf/dompdf");
\PhpOffice\PhpWord\Settings::setPdfRendererName("DomPDF");
// third, load the .docx file which we just saved above
$phpWord = \PhpOffice\PhpWord\IOFactory::load($path_docx);
// fourth, save the new PDF file to the location of choice
$xmlWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, "PDF");
$xmlWriter->save("/var/www/html/export/my-pdf-version-of-the-file.pdf");
Когда я запускаю код выше, я получаю следующую ошибку:
Неустранимая ошибка: необработанное исключение «PhpOffice\PhpWord\Exception\Exception» с сообщением «Невозможно загрузить библиотеку визуализации PDF» в /var/www/html/vendor/phpoffice/phpword/src/PhpWord/Writer /PDF/AbstractRenderer.php:94 Трассировка стека: #0 /var/www/html/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF.php(65): PhpOffice\PhpWord\Writer\PDF\AbstractRenderer-> __construct(Object(PhpOffice\PhpWord\PhpWord)) #1 /var/www/html/vendor/phpoffice/phpword/src/PhpWord/IOFactory.php(44): PhpOffice\PhpWord\Writer\PDF->__construct(Object( PhpOffice\PhpWord\PhpWord)) #2 /var/www/html/assets/core/phpword.php(593): PhpOffice\PhpWord\IOFactory::createWriter(Object(PhpOffice\PhpWord\PhpWord), 'PDF') # 3 /var/www/html/export/index.php(94): exportOutline(Array) #4 {main} добавлено в /var/www/html/vendor/phpoffice/phpword/src/PhpWord/Writer/ PDF/AbstractRenderer.php в строке 94
Я начал искать в Google подобные ошибки и наткнулся на этот пост о переполнении стека: PHPWord в PDF не может загрузить библиотеку. Они предложили отредактировать некоторый код в файле "/var/www/html/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/AbstractRenderer.php". Фрагмент кода, на который ссылается этот пост, выглядит следующим образом:
public function __construct(PhpWord $phpWord)
{
parent::__construct($phpWord);
$includeFile = Settings::getPdfRendererPath() . '/' . $this->includeFile;
if (file_exists($includeFile)) {
/** @noinspection PhpIncludeInspection Dynamic includes */
require_once $includeFile;
} else {
debug($includeFile);
// @codeCoverageIgnoreStart
// Can't find any test case. Uncomment when found.
throw new Exception('Unable to load PDF Rendering library');
// @codeCoverageIgnoreEnd
}
}
Они предложили мне избавиться от этой части кода, которая появляется на 4-й строке выше:
. '/' . $this->includeFile
Однако когда я реализовал это решение, оно не решило мою проблему. Разочарованный, я посмотрел на значение, сгенерированное для $includeFile в этом фрагменте кода. Для меня значение было "/var/www/html/vendor/dompdf/dompdf/dompdf_config.inc.php". Как только я увидел, что он пытается включить файл с именем «dompdf_config.inc.php», я искал этот файл в своем каталоге. Его не было ни в указанном месте, ни где-либо в моей системе!
В этот момент я снова начал искать в Google это имя файла и остановился на этом сообщении Stack Overflow: Я не могу найти dompdf_config.inc.php или dompdf_config.custom.inc.php для установки DOMPDF_UNICODE_ENABLED true. Этот пост предполагает, что dompdf 0.7.0 больше не полагается на этот файл конфигурации. В этот момент я начинаю думать, что текущая версия PHPWord (которую я использую), основанная на dompdf, не была обновлена для поддержки текущей версии dompdf (которую я использую). Я просто не знаю.
Мои вопросы:
- Может ли кто-нибудь подтвердить, правда ли, что текущая версия PHPWord плохо работает с текущей версией dompdf?
- Если текущая версия обоих должна работать вместе, то что я делаю неправильно и как это исправить?
Заранее благодарим вас за всю вашу помощь!
Примечание: я должен отметить, что я включил PHPWord и dompdf в свой проект через композитор; поэтому все соответствующие файлы находятся в "/var/www/html/vendor", как и следовало ожидать. Кроме того, я не могу полагаться ни на TCPDF, ни на MPDF (которые являются альтернативными механизмами рендеринга PDF), потому что они генерируют файлы, которые не соответствуют требованиям форматирования, которые мне нужны для моего проекта.
require-dev
, это разрешается только для корневого файла composer.json. Если никакие другие пакеты не требуют dompdf, и вы указываете библиотеку в своем собственном composer.json, вам определенно следует использовать 0.6.2. - person BrianS   schedule 13.11.2016