2015-12-28 68 views
1

我想下面的PNG圖像添加到我的PDF:iText的 - 添加PNG圖像採用無邊框

我用下面的代碼來做到這一點:

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。

+0

(1.)默認情況下,iText不會爲圖像添加任何邊框。如果您看到邊框,則該邊框已經存在於圖像中。也許你在另一個查看器中查看圖像時看不到它,但它在那裏! (2)您正在使用iText 2.1.5。該版本的日期從2009年3月開始。現在已經快7年了。請升級[以避免問題](http://developers.itextpdf.com/question/can-itext-217-or-earlier-be-used-commercially)。 –

+0

但這是PNG文件,我打開圖像中的油漆,但它沒有顯示任何外邊框,即使我嘗試裁剪和複製此圖像並粘貼到另一個編輯器中,但它不顯示任何外邊框,但是當我通過Java中添加pdf那麼它顯示的是外部邊界。 –

+0

儘管您聲明瞭圖片,圖片*確實有邊框。但是:邊界是透明的,這可以解釋你爲什麼做出錯誤的假設。 –

回答

2

在評論中,我聲稱你的原始圖像確實有邊框。你聲稱它沒有邊框。既然您已經分享了這張圖片,我們可以查看事實以確定誰是對的。

事實證明,我是對的。當我打開GIMP圖像,我清楚地看到一個透明的邊框:

enter image description here

也許你看不到它,因爲你正在尋找在塗料中的圖像或者也許你認爲「透明」和「白色「是相同的顏色。顯然這個假設是錯誤的。

我創建了一個包含您共享,當我打開使用iText RUPS這個PDF,我看到像這樣的圖像的PDF:

在ISO-32000-1不支持enter image description here

PNG(又名PDF規範),因此想要將PNG引入PDF文件的軟件需要將該PNG轉換爲另一種格式。在iText的情況下,「正常」PNG被轉換爲帶有過濾器/FlateDecode的位圖。

就你而言,你有一個透明PNG。在ISO-32000-1中,透明圖像總是作爲兩個圖像存儲:您有不透明的圖像(在我的屏幕截圖中,/Img1與對象編號2)和圖像蒙版(在我的屏幕截圖中,/Img0與對象編號1)。

如果仔細觀察圖像蒙版(使不透明圖像透明的圖像),您會看到它是黑白圖像,顯示非常小的邊界。該圖像顯示在右下方的「Stream」(這是呈現圖像流的位置)面板中。這個非常小的邊框是透明邊框,我們也可以在GIMP(或支持透明圖像的其他圖像查看器)中看到。

如果此邊框是透明的,那麼您爲什麼在PDF查看器中看到它?那麼,這個邊界被視爲零寬度的線。在PDF查看器中,使用可用於查看PDF的設備上顯示的最小寬度顯示零寬度的線。如果放大PDF,您會注意到線條的寬度保持不變。

總結:你聲稱你的圖像沒有任何邊框,並且iText添加了邊框。我已經證明你錯了:圖像確實有一個透明邊界和iText正確地引入此透明邊框作爲掩碼。 PDF查看器根據ISO-32000-1將此邊框顯示爲零寬度線。

您可以通過刪除原始圖像中的透明邊框來解決您的問題。例如:I 拼合使用GIMP的圖像。結果是這樣的形象:

enter image description here

該圖像不再具有透明的邊緣,當你介紹成一個PDF,顯示沒有邊框,沒有口罩被添加到PDF:

enter image description here

+0

非常感謝Bruno的快速回應。那是我沒有想到的錯誤。 –

+1

隨時接受答案(點擊問題旁邊的接受按鈕)。 –