我正在使用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(对象(PhpOffice \ PhpWord \ PhpWord),' PDF')#3 /var/www/html/export/index.php(94):exportOutline(Array)#4 {在 /var/www/html/vendor/phpoffice/phpword/src/PhpWord/Writer/PDF/AbstractRenderer.php 上投放 94
我开始在Google上搜索与此类似的错误,并发现了这个Stack Overflow帖子:PHPWord to PDF not able to load library。他们建议在" /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帖子上:I Can't Find dompdf_config.inc.php or dompdf_config.custom.inc.php for setting "DOMPDF_UNICODE_ENABLED" true。该帖子表明dompdf 0.7.0不再依赖于该配置文件。此时我开始认为PHPWord的当前版本(我使用的)依赖于dompdf尚未更新以支持当前版本的dompdf(我正在使用)。我根本就不知道。
我的问题:
提前感谢您的所有帮助!
注意:我应该注意到我已经通过composer在我的项目中包含了PHPWord和dompdf;所以所有相关文件都位于" / var / www / html / vendor"正如人们所料。此外,我不能依赖TCPDF或MPDF(它们是备用PDF渲染引擎),因为它们生成的文件不能满足我的项目所需的格式化需求。