【问题标题】:Converting DOCX to PDF with PHPWord and DomPDF使用 PHPWord 和 DomPDF 将 DOCX 转换为 PDF
【发布时间】:2023-10-09 09:48:01
【问题描述】:

我正在运行一个仅限 Web 的服务器(因此没有服务器访问权限,也没有 Composer 或 LibreOffice 之类的东西),我想将 DOCX 模板转换为 PDF。我已经使用 PHPWord 成功处理了我的模板(使用 php-download.com 下载,因为我不能使用 composer),那里一切正常,但是当我尝试使用 DomPDF(也通过 phpdownload 下载)将我的 docx 文件转换为 PDF文件,PHP 抛出“找不到类 'Dompdf\Dompdf'”...

我创建了一个单独的文件来转换一个已知的 docx 文件,只是为了排除任何环境问题

这是我的代码:

require_once("includes/PHPWord/vendor/autoload.php");

$inputfile = "files/temp/offerte_Hankie-Pankie.docx";

$path = realpath(realpath(__DIR__) . '/includes/dompdf');

echo "realpath: " . $path;

\PhpOffice\PhpWord\Settings::setPdfRendererPath($path);
\PhpOffice\PhpWord\Settings::setPdfRendererName(\PhpOffice\PhpWord\Settings::PDF_RENDERER_DOMPDF);

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

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

使用 echo 我确认文件夹设置正确:“/home/myusername/domains/mydomain.nl/public_html/projects/pdftemplate/includes/dompdf”

所以我尝试解析子文件夹“src”或“lib”但没有成功,我尝试解析实际的自动加载器文件“autoload.inc.php”也没有成功。我尝试了上述所有路径,无论是否以“/”结尾(只是为了确定),但仍然找不到类......即使我使用的是发现(可能)在互联网上工作的代码的精确副本。

我尝试在 PHPWord 文档中找到它,但没有给我任何解决方案。我也尝试排除 PHPWord 并仅使用 DomPDF,但由于 DomPDF 仅接受 html 作为输入,而且我不知道如何(并且不想再花一个小时尝试)将 docx 转换为 HTML,这也是一个死胡同.

仅供参考,这是我的文件结构:

  • 工作目录
    • CodeIsInThisFile.php
    • 包括
      • dompdf
        • Autoloader.php
      • autoloader.inc.php
      • PHPWord
      • 供应商
        • 自动加载.php

所以要么我因为手动下载而弄乱了我的文件结构(这对我来说似乎最有可能),或者我的代码是错误的(也有可能)......

【问题讨论】:

  • 包含完整的错误消息可能会有所帮助。

标签: php pdf docx dompdf phpword


【解决方案1】:

首先使用composer或git下载dompdf库。 使用realpath()或者尝试使用PDF渲染库的绝对路径。

【讨论】: