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

cfn*_*erd 9 php pdf-generation phpword laravel-5

基于Laravel的应用程序将文档(.doc,.docx,.pdf,.png,.otd,html等)转换为PDF,以便它们可以合并到一个主PDF文档中.它使用PHPWordDOMPDF 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');
Run Code Online (Sandbox Code Playgroud)

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

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

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

环境相关信息:

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

编辑: 我也试图从不同的角度来看这个,但没有用.我试图使用PHP的ZipArchive解压的docx文件,从文件(删除EMF图像ZipArchive::deleteName()),除去在该参考EMF图像[Content_Types].xml(ZipArchive::getFromName()),然后将压缩文件的docx备份,但没有奏效.我可以打开新的docx文件并看到图像消失,但PHPWord错误仍然存​​在于应用程序中.

小智 1

看起来 PHPWord 有一个开放的功能请求来解决这个问题。

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

我认为您的文件更改路径正确,PHPWord 仍在尝试访问的某处可能存在对您丢失的图像的引用。

我会将文件解压缩到本地驱动器上,然后 grep(搜索分解文件的内容)您要查找的文件的目录。这将向您显示您可能需要在文件中的其他位置将其删除以使其不被引用。