使用PDFBox替换PDF中的图像

时间:2015-05-20 01:43:02

标签: pdfbox

我有一个PDF文档,其中包含一个空白图像(灰色背景)。我需要将这个空白图像替换为另一个我作为字节数组的图像。

我使用PDFBox替换图像如下:

// Convert byte array to BufferedImage
BufferedImage imgFromBytes = ImageIO.read(new ByteArrayInputStream(imgBytes));

ByteArrayOutputStream baos = new ByteArrayOutputStream();                       
ImageIO.write(imgFromBytes, "jpg", baos);                       

// Replace empty image in pdf with the image generated from byte array
PDXObjectImage newImage = new PDJpeg(doc, new ByteArrayInputStream(baos.toByteArray()));
blankImg.getCOSStream().replaceWithStream(newImage.getCOSStream());

这将替换pdf中的空白图像。但问题是,从字节数组生成的图像与空白图像相比尺寸不同。我猜它会做一些自动缩放,因为底部有一些灰色的空白区域(由于空白图像的背景)。

所以我尝试重新缩放图像如下:

// Convert byte array to BufferedImage
BufferedImage imgFromBytes = ImageIO.read(new ByteArrayInputStream(imgBytes));

//Re-size the image
BufferedImage resizedImage = new BufferedImage(blankImg.getWidth(), blankImg.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = resizedImage.createGraphics();
g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2d.drawImage(imgFromBytes, 0, 0, blankImg.getWidth(), blankImg.getHeight(), Color.WHITE, null);
g2d.dispose();

ByteArrayOutputStream baos = new ByteArrayOutputStream();                       
ImageIO.write(resizedImage, "jpg", baos);                       

// Replace empty image in pdf with the image generated from byte array
PDXObjectImage newImage = new PDJpeg(doc, new ByteArrayInputStream(baos.toByteArray()));
blankImg.getCOSStream().replaceWithStream(newImage.getCOSStream());

但这对我也没有帮助。我仍然看到底部的灰色背景。此外,这会降低图像的质量,并且还会从字节生成的图像的顶部和底部略微缩小。

用从字节数组中获取的图像替换空白图像的最佳方法是什么,以便它完全符合空白图像的大小?

感谢。

0 个答案:

没有答案