【发布时间】:2018-07-29 17:21:35
【问题描述】:
我正在使用 PDFBox 2.0.8 替换应用程序中的图像。我能够提取图像并将其替换为另一个相同尺寸的图像。但是,如果图像大小减小,则 PDF 的大小不会减小。例如,请参阅以下链接中的文档/图像。 PDF 的原始大小为 93 KB。提取的图像为 91 KB。替换后的图像为 54 KB。图片替换后的PDF大小仍然是92 KB....
- 原始文档 = http://35.200.192.44/download?fileName=/outbox/pdf/10_cert.pdf
- 提取图像 = http://35.200.192.44/download?fileName=/outbox/pdf/image0.jpg
- 替换图片 = http://35.200.192.44/download?fileName=/outbox/pdf/image1.jpg
- 替换后的 PDF = http://35.200.192.44/download?fileName=/outbox/pdf/10_cert1.pdf。
替换后PDF大小的变化比例不一样...图片替换用的代码sn-p是
BufferedImage buffered_replacement_image_file = ImageIO.read(new File(replacement_image_file));
PDImageXObject replacement_img = JPEGFactory.createFromImage(doc, buffered_replacement_image_file);
resources.put(xObjectName, replacement_img);
【问题讨论】:
-
由于您将jpg解压为
BufferedImage,然后使用JPEGFactory重新压缩,因此对原始大小影响不大。尝试以较低的质量调用JPEGFactory#createFromImage(0.7-0.9 是可接受质量的一个很好的范围)。我认为没有办法使用 PDFBox 直接插入 jpg,但我不确定。 -
你的文件已经不存在了。
-
@Itai “我认为没有办法使用 PDFBox 直接插入 jpg,但我不确定。” - 你可以使用
JPEGFactory方法createFromByteArray或createFromStream。 -
现在应该可以访问链接了。我想使用内部软件进行图像处理。代码是否 sn -p resources.put(xObjectName, replacement_img);不会覆盖现有图像。 Replacement_img 是文件系统上的 jpg 文件
-
@mkl - 很高兴知道!出于某种原因,我假设所有
JPEGFactory方法都需要一个位图(基本上),即使现在我查看文档很明显字节数组采用的是直接 JPEG。
标签: pdfbox