iText 7 pdfSweep 和 JPX 编码合成图像(MRC 压缩 PDF)

iText 7 pdfSweep and JPX encoded composite image (MRC compressed PDF)

我有一个 MRC 压缩的 PDF(图像是 JPX 编码的),由于抛出 ImageReadException,我无法用 iText 7 pdfSweep 编辑它。

Caused by: org.apache.commons.imaging.ImageReadException: Can't parse this format.
at org.apache.commons.imaging.Imaging.getImageParser(Imaging.java:731)
at org.apache.commons.imaging.Imaging.getImageInfo(Imaging.java:703)
at org.apache.commons.imaging.Imaging.getImageInfo(Imaging.java:637)
at com.itextpdf.pdfcleanup.PdfCleanUpFilter.processImage(PdfCleanUpFilter.java:343)
... 13 more

您知道此问题的任何解决方法或解决方案吗?一个明显的解决方法是将 PDF 中的 jp2 (jpx) 替换为其他图像格式,并对修改后的 PDF 执行编辑,但是,在这种情况下,MRC 压缩的好处就丢失了,更不用说这种压缩的整体速度了转换然后编辑。

(此处为 iText 开发人员)

如您所见,iText 使用 org.apache.commons 来处理图像。 过去,我们在这个外部库中遇到过一些已知错误的问题。 一个可能的解决方案是分叉 org.apache.commons 项目,实施修复,然后提交您的拉取请求。

这样,每个人都会受益,并且更改也会自动包含在 iText 中。

当然,如果您是付费客户,那么通过 iText 支持板报告此问题可能会触发我们执行拉取请求。

至于解决方法,我认为您已经提出了合适的想法。

  • 处理所有图像
  • 将它们转换为不同的格式(如果需要)
  • 将修改后的文档输入 pdfSweep

更详细(步骤 1 和 2)

使用 IEventListener 你可以获得给定资源的底层 BufferedImage,然后你可以使用 ByteArrayOutputStreamImageIO 将你的图像重新编码为标准的 jpg 或 png .然后,您可以使用 iText 更改此特定资源的字典条目。