【发布时间】:2019-05-07 11:26:43
【问题描述】:
基于 Laravel 的应用程序正在将文档(.doc、.docx、.pdf、.png、.otd、html 等)转换为 PDF,以便将它们全部合并为一个主 PDF 文档。它使用PHPWord 和DOMPDF Wrapper 等插件的组合来进行文件加载和创建。每隔一段时间,该过程都会由于 Word 文件而遇到错误。
错误:PhpOffice\PhpWord\Exception\InvalidImageException:无效 图片:zip:// ... #word/media/image2.emf
该错误是由文档中的图像背景引起的,其作用类似于水印。出错的 PHPWord 部分是 PhpOffice\PhpWord\Element\Image->checkImage() 方法,但在尝试加载文件时发生。
Settings::setPdfRendererName(Settings::PDF_RENDERER_DOMPDF);
$pdfWord = IOFactory::load(storage_path() . '/app/uploads/randomfile.docx', 'Word2007');
应用程序如何将嵌入了 EMF 图像的 Word 文档转换为 PDF?
有关如何重新创建错误的更多代码/信息,Github PHPWord 库中存在一些问题。
环境相关信息:
- 服务器: Windows / IIS
- PHP: 7.2.11
- Laravel: 5.7.15
- PHPWord: 0.15.0
编辑:
我也试图从不同的角度来解决这个问题,但无济于事。我尝试使用PHP的ZipArchive解压缩docx文件,从文档中删除emf图像(ZipArchive::deleteName()),删除[Content_Types].xml(ZipArchive::getFromName())中对emf图像的引用,然后将docx文件压缩回去起来,但没有奏效。我可以打开新的 docx 文件并看到图像消失了,但 PHPWord 错误仍然存在于应用程序中。
【问题讨论】:
-
imagemagick.org/script/command-line-processing.php 可能能够将其转换为
.eps或将其呈现为.png(甚至使用PHP库)。我的意思是,提取,转换,替换。错误可能来自 xml 中的引用,而不是二进制数据;这个问题与laravel-5几乎没有任何关系。 -
这可能不是你的答案。但是,请考虑使用 microsoft graph API 进行文档转换。因为,它由微软提供,我没有看到任何转换问题,它将处理所有微软支持的文档。这是一个链接,developer.microsoft.com/en-us/graph/graph-explorer。注意:您需要有 Outlook 帐户。
-
截至 2020 年 12 月 4 日,此错误仍然存在:github.com/PHPOffice/PHPWord/issues/1480
标签: php laravel-5 pdf-generation phpword