使用PDFBox替换图像不会根据图像更改pdf的大小

时间:2018-07-29 17:21:36

标签: pdfbox

我正在使用PDFBox 2.0.8替换应用程序中的图像。我能够提取图像并将其替换为另一个具有相同尺寸的图像。但是,如果图像尺寸减小,则PDF尺寸不会减小。例如,请参考以下链接中的文档/图像。 PDF的原始大小为93 KB。提取的图像为91 KB。替换的图像是54 KB。替换图片后的PDF大小仍为92 KB。...

  1. 原始文档= http://35.200.192.44/download?fileName=/outbox/pdf/10_cert.pdf
  2. 提取的图像= http://35.200.192.44/download?fileName=/outbox/pdf/image0.jpg
  3. 替换图片= http://35.200.192.44/download?fileName=/outbox/pdf/image1.jpg
  4. 替换后的PDF = http://35.200.192.44/download?fileName=/outbox/pdf/10_cert1.pdf

替换后PDF的大小变化比例不同...用于图像替换的代码段为

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);

1 个答案:

答案 0 :(得分:0)

两个示例PDF中的图像相同。这很可能是由于您加载图像数据的方式所致,首先是从文件中创建一个BufferedImage,然后是从该PDImageXObject中创建一个BufferedImage。这会导致输入图像数据被扩展为纯位图,然后由JPEGFactory.createFromImage相同地重新压缩为JPEG。

要按原样使用JPEG数据,请尝试以下方法:

PDImageXObject replacement_img = JPEGFactory.createFromStream(doc, new FileInputStream(replacement_image_file));
resources.put(xObjectName, replacement_img);

或者,如果replacement_image_file不一定是JPEG文件,则像这样

PDImageXObject replacement_img = PDImageXObject.createFromFileByExtension(new File(replacement_image_file), doc);
resources.put(xObjectName, replacement_img);

如果这没有帮助,则您的代码中也很可能还有其他问题,需要显示更多问题。