将.docx文件(带有.emf图像背景)转换为PDF时出错



一个基于Laravel的应用程序正在将文档(.doc、.docx、.pdf、.png、.otd、html等(转换为pdf,以便将它们合并到一个主pdf文档中。它使用PHPWord和DOMPDF-Wrapper等插件的组合来加载和创建文件。每隔一段时间,该过程就会遇到由于Word文件而导致的错误。

错误:PhpOffice\PhpWord\Exception\InvalidImageException:无效图片:zip://#word/media/image2.emf

错误是由文档中的图像背景像水印一样引起的。出错的PHPWord部分是PhpOfficePhpWordElementImage->checkImage()方法,但会在尝试加载文件时发生。

Settings::setPdfRendererName(Settings::PDF_RENDERER_DOMPDF);
$pdfWord = IOFactory::load(storage_path() . '/app/uploads/randomfile.docx', 'Word2007');

应用程序如何将嵌入EMF图像的Word文档转换为PDF

有关如何重新创建错误的更多代码/信息,Github PHPWord库中存在一些问题。

  1. 支持EMF镜像#1480
  2. 当包含来自远程url#1173的图像时,读取docx错误

环境相关信息:

  • 服务器:Windows/IIS
  • PHP:7.2.11
  • Laravel:5.7.15
  • PHP字:0.15.0

编辑:我也试着从另一个角度来看待这个问题,但没有成功。我尝试使用PHP的ZipArchive来解压缩docx文件,从文档中删除emf图像(ZipArchive::deleteName()(,删除[Content_Types].xml中对emf图像的引用(ZipArchive::getFromName()(,然后将docx文件压缩备份,但没有成功。我可以打开新的docx文件,看到图像已经不见了,但PHPWord错误仍然存在于应用程序中。

PHPWord似乎打开了一个功能请求来解决这个问题。

https://github.com/PHPOffice/PHPWord/issues/1480

我认为你对文件的修改是正确的,PHPWord仍在试图访问的某个地方可能引用了你丢失的图像。

我会解压缩你本地驱动器上的文件,并grep(搜索分解文件的内容(你要查找的文件的目录。这将显示您可能需要将其从文件中引用的其他位置删除。

最新更新