基于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库中存在一些问题。
与环境有关的信息:
编辑:
我也尝试从另一个角度来解决这个问题,但没有成功。我尝试使用PHP的ZipArchive解压缩docx文件,从文档(ZipArchive::deleteName()
中删除emf图像,在[Content_Types].xml
中删除对emf图像的引用(ZipArchive::getFromName()
),然后将docx文件压缩后备份,但这没有用。我可以打开新的docx文件,然后看到图像消失了,但是应用程序中仍然存在PHPWord错误。
答案 0 :(得分:1)
PHPWord似乎已打开功能请求来解决此问题。
https://github.com/PHPOffice/PHPWord/issues/1480
我认为您在文件更改的正确路径上,可能引用了您在PHPWord仍试图访问的位置丢失的图像。
我会将文件解压缩到本地驱动器上,然后在要查找的文件的目录中grep(搜索分解文件的内容)。这将显示您可能还需要从文件中引用它的其他地方。