itext - 添加没有边框的png图像

时间:2015-12-28 14:05:51

标签: java itext

我想将以下png图片添加到我的pdf:

我使用以下代码来执行此操作:

Image img = PngImage.getImage(filename);
img.setBorder(Image.NO_BORDER);
img.setAlignment(Element.ALIGN_CENTER);
img.scaleAbsolute(width,height);
document.add(img);

图像包含没有外边框的条形图。当我将图像添加到我的pdf时,它会显示一个外边框,但仅适用于底边,左边和顶边:

我想删除pdf中的边框,但上面的代码并没有实现。

我使用的是iText-2.1.5。

1 个答案:

答案 0 :(得分:2)

在评论中,我声称原始图片确实有边框。你声称它没有边界。现在您已经分享了图像,我们可以查看事实,看看谁是对的。

事实证明,我是对的。当我在GIMP中打开图像时,我清楚地看到了一个透明的边框:

enter image description here

也许你没有看到它,因为你正在看Paint中的图像,或者你认为"透明"和"白色"是相同的颜色。显然这种假设是错误的。

我创建了一个包含您分享的图片的PDF,当我使用iText RUPS打开此PDF时,我看到这样的内容:

enter image description here

ISO-32000-1(又称PDF规范)不支持PNG,因此想要将PNG引入PDF文件的软件需要将该PNG转换为另一种格式。在iText的情况下,"正常" PNG将转换为带有过滤器/FlateDecode的位图。

在您的情况下,您有一个带透明度的PNG。在ISO-32000-1中,透明图像始终存储为两个图像:您有不透明图像(在我的屏幕截图中,/Img1,对象编号为2)和图像蒙版(在我的屏幕截图中,{{1对象编号为1)。

如果仔细观察图像蒙版(使不透明图像透明的图像),您会发现它是一个黑白图像,显示非常小的边框。此图像显示在右下方的面板中,其中显示" Stream" (这是渲染图像流的地方)。这个非常小的边框是我们也可以在GIMP(或其他支持透明图像的图像查看器)中看到的透明边框。

如果此边框是透明的,那么为什么在PDF查看器中看到它?好吧,这个边框被视为零宽度的线。在PDF查看器中,使用可用于查看PDF的设备上显示的最小宽度显示宽度为零的行。如果放大PDF,您会注意到线条的宽度保持不变。

摘要:您声称您的图片没有任何边框,并且iText添加了边框。我已经证明你错了:图像 透明边框,而iText正确地将这个透明边框作为蒙版引入。 PDF查看器将此边框显示为符合ISO-32000-1的零宽度线。

您可以通过删除原始图像中的透明边框来解决问题。例如:我使用GIMP 展平图像。结果就是这张图片:

enter image description here

此图片不再具有透明边框,当您将其引入PDF时,不显示边框,并且不会向PDF添加蒙版:

enter image description here