【问题标题】:Error converting .docx file (with .emf image background) to PDF将 .docx 文件(带有 .emf 图像背景)转换为 PDF 时出错
【发布时间】:2019-05-07 11:26:43
【问题描述】:

基于 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文件,从文档中删除emf图像(ZipArchive::deleteName()),删除[Content_Types].xmlZipArchive::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


【解决方案1】:

看起来 PHPWord 已打开功能请求来解决此问题。

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

我认为您在文件更改方面走在正确的道路上,可能在 PHPWord 仍在尝试访问的某个地方对您丢失的图像的引用。

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

【讨论】:

  • 谢谢@Morris Buel。我会看看是否可以更深入地了解 upzip 和扫描过程。
  • @cfnerd 你有机会深入研究这个吗?
  • 对不起莫里斯...我实际上换了工作,因此没有进一步处理这个错误。在此之前,我们写了一个解决方法。在你提到它之后,我确实进一步尝试了解压缩方法,然后在解决问题之前迷失了探索所有选项。以一种好的方式迷失了......那个Zip库不是开玩笑!
猜你喜欢
  • 2016-03-27
  • 1970-01-01
  • 2020-03-15
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多