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

我想将以下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。

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

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

在此处输入图像描述

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

我创建了一个包含您共享图像的PDF,当我使用iText RUPS打开此PDF时,我看到如下所示:

在此处输入图像描述

ISO-32000-1(又称PDF规范)不支持PNG,因此想要将PNG引入PDF文件的软件需要将该PNG转换为另一种格式。 在iText的情况下,“普通”PNG被转换为具有filter /FlateDecode的位图。

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

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

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

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

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

在此处输入图像描述

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

在此处输入图像描述