PHPWord + dompdf"无法加载PDF渲染库"和" dompdf_config.inc.php"问题

时间:2016-11-11 01:24:02

标签: pdf-generation dompdf phpword

我正在使用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(我正在使用)。我根本就不知道。

我的问题:

  1. 有人可以确认PHPWord的当前版本是否与dompdf的当前版本不相符?
  2. 如果两者的当前版本应该一起工作,那么我做错了什么以及如何修复它?
  3. 提前感谢您的所有帮助!

    注意:我应该注意到我已经通过composer在我的项目中包含了PHPWord和dompdf;所以所有相关文件都位于" / var / www / html / vendor"正如人们所料。此外,我不能依赖TCPDF或MPDF(它们是备用PDF渲染引擎),因为它们生成的文件不能满足我的项目所需的格式化需求。

0 个答案:

没有答案