我正在尝试使用PHPWord将DOCX文件转换为PDF。当我执行脚本时,似乎某些样式元素未转换。在DOCX文件中,我有一张图像,两个带有边框1px和隐藏边框的表,并且我正在使用制表符。
执行脚本时,我得到一个没有图像的PDF文件,所有选项卡都替换为空格,所有表的边框都为3px。
有人知道我为什么错过这些样式吗?
这是我的剧本:
while ($data2 = mysql_fetch_array($rsSql)){
$countLines=$countLines+1;
$templateProcessor->setValue('quantity#'.$countLines, $data2['quantity']);
$templateProcessor->setValue('name#'.$countLines, $data2['name']);
$templateProcessor->setValue('price#'.$countLines, "€ " .$data2['price'] ."");
}
\PhpOffice\PhpWord\Settings::setPdfRenderer('./dompdf');
\PhpOffice\PhpWord\Settings::setPdfRendererPath('./dompdf');
\PhpOffice\PhpWord\Settings::setPdfRendererName('DOMPDF');
$temp_file = tempnam(sys_get_temp_dir(), 'Word');
\$templateProcessor->saveAS($temp_file);
$phpWord = \PhpOffice\PhpWord\IOFactory::load($temp_file);
$xmlWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord , 'PDF');
$xmlWriter->save('result.pdf');
header("Content-type:application/pdf");
header("Content-Disposition:attachment;filename='result.pdf'");
readfile("result.pdf");
查看源代码后,似乎[[PHPWord先前已将文档转换为HTML表示之前转换为dompdf],并将其保存到PDF ,另一个转换器。
这是打开的issue #1139确认的内容,此外,它还处理缺少的样式:正在使用的PDF编写器,它也缺乏样式。这些类在正在接收HTML输出
<style>
标记中定义,但并未使用。也last message添加:这似乎仍然是一个问题。 html和pdf输出不会在docx中复制某些样式(页眉/页脚)。
关于边框问题,另一个SO question在转换HTML中显示类似的问题-> PDF。 solution用于编辑CSS样式,除非您继续进行预转换为HTML,否则您显然无法在示例代码中执行该样式。
总而言之,您短期内可能无法解决问题。如果您不属于开发团队,则可以向他们
提交错误报告
(而不是dompdf,因为它是HTML到PDF的转换器,并且不在范围内)。 Github允许您将DOCX文件添加到问题报告。服务器端
PDF编辑库的SO问题204860。下面有两种选择,一种是免费软件,另一种是封闭源代码并定价。LibreOfficeheadless模式
中使用LibreOffice(无界面的命令行执行):libreoffice --headless --convert-to pdf <filename_to_convert>
用于LibreOffice的[[PHP包装器,如果您不想通过Office Converter使用libreoffice,也可以在这里使用
exec()
。
我在工作中使用过的最好的转换器是
[有一种方法可以通过Java(Aspose。Words和Aspose。Cells)或.NET(Aspose。Words在PHP中使用它,Aspose。Cells也是如此。