11

我在我的应用程序中使用了 laravel,dompdf 位于:

../供应商/dompdf/dompdf

我想要实现的是将我的 .docx 文件(Microsoft Word)转换为 .pdf 文件。docx 文件由 phpWord 通过加载模板文件并替换值生成。

这是片段:

 // Get the absolute path of the template file
 $wordTemplatePath = $this->getDocumentTemplatePath('resignation.docx');

 // Load the template file
  $document = $this->phpWord->loadTemplate($wordTemplatePath);

// This will be filled with data
 $wordData = []

.... Process to fill the data .....

// Replace value to actual word document
  $this->setTemplateValues($wordData, $document);


// Generate its filename
  $file = $this->generateFileName('Retirement-Certificate.docx', $id);

        // Fetch the absolute path to save the document
        $filepath = $this->getSavePath($file);

        // Save the word document
        $document->saveAs( $filepath );

之后,将生成一个 .docx 文件。我也想制作一个PDF版本。所以我搜索并找到了这个代码片段并添加到我的代码中:

             \PhpOffice\PhpWord\Settings::setPdfRendererPath('../vendor/dompdf/dompdf');
\PhpOffice\PhpWord\Settings::setPdfRendererName('DOMPDF');

//Load temp file
$phpWord = \PhpOffice\PhpWord\IOFactory::load($filepath); 

//Save it
$xmlWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord , 'PDF');
$xmlWriter->save('result.pdf');  

但我得到了这个错误:

    {"error":
{"type":"PhpOffice\\PhpWord\\Exception\\Exception","message":"PDF rendering library or library path has not been defined.",
"file":"C:\\xampp\\htdocs\\vagrant\\vendor\\phpoffice\\phpword\\src\\PhpWord\\Writer\\PDF.php",
"line":49}}

我如何将 DomPDF 作为 PHPWord 的 pdf 编写器?我找不到任何其他选择,所以我在这里问。我希望你能帮助我。谢谢!

4

2 回答 2

9

您必须将其设置为绝对路径。把它放到你的 bootstrap.php 文件中。

define('PHPWORD_BASE_DIR', realpath(__DIR__));

这是你的电话:

$domPdfPath = realpath(PHPWORD_BASE_DIR . '/../vendor/dompdf/dompdf');
\PhpOffice\PhpWord\Settings::setPdfRendererPath($domPdfPath);
\PhpOffice\PhpWord\Settings::setPdfRendererName('DomPDF');

//Load temp file
$phpWord = \PhpOffice\PhpWord\IOFactory::load($filepath); 

//Save it
$xmlWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord , 'PDF');
$xmlWriter->save('result.pdf');  
于 2014-09-16T10:33:14.100 回答
4

我认为@Franz Holzingers 的回答是正确的,只是我今天安装的 PHP 单词版本要求渲染器名称为 DomPDF。如果如图所示全部大写,则该方法失败。此外,我今天安装的版本使用配置文件,因此当显式调用工作时,如果您在配置文件加载之后放置它们,如果您在配置加载之前放置它们,它们将被覆盖。我建议一个更简单的答案是找到位于phpword安装目录中“src”上方目录中的文件“phpword.ini.dist”;编辑 DomPDF 目录的行以显示您安装 DomPDF 的位置,然后将文件保存在同一目录中,但名称为 phpword.ini。现在配置加载器将执行 Frank 为您记录的调用。如果您错误地输入了 DomPDF 的路径,您不会收到任何警告,但您可以使用方法 \PhpOffice\PhpWord\Settings::getPdfRendererPath(domPdfPath); 测试它是否安装正确。如果该方法的返回为空,则表示您在配置文件中指定的路径名​​不存在。请注意,加载程序不检查路径是否包含 DomPDF,只检查路径是否存在。

值得注意的是,此时phpword支持三种PDF渲染引擎。通过提供安装路径并将 PDF 渲染器的名称设置为以下值之一(区分大小写),可以在上述 ini 文件中配置这三个中的任何一个:DomPDF、TCPDF 或 MPDF。推荐使用 DomPDF 并且是默认设置,但它出现在代码中,如果您有投资或偏好其中一个,则可以将其与 phpword 一起使用。

于 2015-01-22T12:49:01.610 回答