我有一个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());
但这对我也没有帮助。我仍然看到底部的灰色背景。此外,这会降低图像的质量,并且还会从字节生成的图像的顶部和底部略微缩小。
用从字节数组中获取的图像替换空白图像的最佳方法是什么,以便它完全符合空白图像的大小?
感谢。