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

时间:2018-12-05 20:11:21

标签: php laravel-5 pdf-generation phpword

基于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');

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

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

  1. Support EMF image #1480
  2. Read docx error when contains image from remote url #1173

与环境有关的信息:

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

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

1 个答案:

答案 0 :(得分:1)

PHPWord似乎已打开功能请求来解决此问题。

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

我认为您在文件更改的正确路径上,可能引用了您在PHPWord仍试图访问的位置丢失的图像。

我会将文件解压缩到本地驱动器上,然后在要查找的文件的目录中grep(搜索分解文件的内容)。这将显示您可能还需要从文件中引用它的其他地方。