【发布时间】:2016-01-10 02:39:23
【问题描述】:
我正在使用PHPWord 从模板创建.docx 文件。它工作正常,但现在我想将生成的文件转换为PDF。
首先我尝试将tcpdf 与PHPWord 结合使用
$wordPdf = \PhpOffice\PhpWord\IOFactory::load($filename.".docx");
\PhpOffice\PhpWord\Settings::setPdfRendererPath(dirname(__FILE__)."/../../Office/tcpdf");
\PhpOffice\PhpWord\Settings::setPdfRendererName('TCPDF');
$pdfWriter = \PhpOffice\PhpWord\IOFactory::createWriter($wordPdf , 'PDF');
if (file_exists($filename.".pdf")) unlink($filename.".pdf");
$pdfWriter->save($filename.".pdf");
但是当我尝试加载文件以将其转换为 PDF 时,加载文件时出现以下异常
致命错误:未捕获的异常“BadMethodCallException”带有消息“无法在部分中添加 PreserveText。”
经过一番研究,我发现其他一些人也有这个错误(phpWord - Cannot add PreserveText in Section)
编辑
在尝试了更多之后,我发现
Exception仅在我的文档中有一些mail merge fields时出现。一旦我删除了它们,Exception就不再出现,但转换后的
我想过用另一种方式来生成 PDF,但我只能找到 4 种方式:
- 使用OpenOffice - 不可能,因为我无法在服务器上安装任何软件。同样采用here 提到的方式也不起作用,因为我的主机 (Strato) 使用 SunOS 作为操作系统,这需要 Linux
- 使用phpdocx - 我没有任何预算支付它,演示无法创建 PDF
- 使用PHPLiveDocx - 这可行,但有每天 250 个文档和每小时 20 个文档的限制,我必须一次转换大约 300 个文档,甚至一天可以转换多次
-
使用PHP-Digital-Format-Convert - 输出看起来比使用
PHPWord和tcpdf更好,但仍然无法使用,因为缺少图像,并且大多数(不是全部!)样式
是否有第 5 种生成 PDF 的方法?或者有什么办法可以让生成的 PDF 文档好看吗?
【问题讨论】:
-
体面的 PDF 输出可能需要您创建第二个模板(您已经有了一个 MSWord 模板,接下来您需要一个 PDF 模板将您的源文档带到 tcpdf 想要的输入)。
-
@Rob_M 是的,我已经考虑过创建一个 HTML 模板,因为有一些库可以将 HTML 转换为 PDF,但是我有很多不同的模板,所以要创建一个相当多的工作他们并重写我用内容填充它们的方式,所以我希望有另一种更简单的方法......
-
PHPWord 应该可以完成这项工作,就像提到的@hasan.hameed 一样。由于您无法安装其他软件,因此不应该有任何其他选项可以将其转换为美观的 PDF。我的另一个想法是使用 Imagick,但这需要
soffice二进制文件,它不应该安装在 Strato...