2016-06-30 82 views
1

我想知道是否可以使用iTextsharp將圖像添加到PDF中,以便您不必將圖像直接添加到頁面上,而是首先將它們添加到庫中,然後引用庫在您的PDF中需要。是否可以在iTextsharp中創建一個圖像庫?

這種方法的優點是,如果您重新使用相同的圖像,它將不再將圖像的精確副本添加到PDF中,而只是重新使用圖像的當前副本。

我迄今所做的一些測試:

Actual image size: 102kB 
1 copy of the image in the PDF + other text: 259kB 
2 copies of the image in the PDF + other text: 481kB 
3 copies...: 704kB 
4 copies...: 926kB 

從這個很明顯的是,PDF是不是足夠聰明,知道我重複使用相同的圖像和簡單地引用它。如果它可能是真的很好...

+0

你的意思是文件本身內的圖書館,所以重用只有在文檔中? – adv12

+0

我想他想要使用字典並使用對圖像對象的引用。 –

+0

如果你提供了你的代碼,錯誤會很明顯。 – mkl

回答

2

圖像以PDF形式存儲爲Image XObjects。 XObject是外部對象的縮寫。這意味着圖像的位和字節不會存儲在頁面的內容流中。

正確使用時,iText將在這樣的XObject中添加圖像的位和字節,並在需要時重複使用它。如果多次添加相同的圖像並且文件大小增加,則說明您沒有正確使用iText。

參見Chapter 3 of the tutorial "iText 7: Building Blocks"並比較MaryReillyV2示例與MaryReillyV3示例。

這是正確的:

Image img = new Image(ImageDataFactory.create(MARY)); 
document.add(img); 
document.add(img); 

,它創建一個文件大小爲16 KB的文檔。

這是錯誤的:

Image img1 = new Image(ImageDataFactory.create(MARY)); 
document.add(img1); 
Image img2 = new Image(ImageDataFactory.create(MARY)); 
document.add(img2); 

,它創建一個文件大小31 KB的文件。

兩個PDF看起來相同肉眼:

enter image description here

唯一的區別是,16 KB PDF是由人誰閱讀手冊創建的,而31 KB PDF是由人創造了誰沒有。

文件mary_reilly_V1.pdf是我們添加圖像僅一次的PDF文件。正如您注意到的那樣,與我們正確添加圖像兩次的PDF文件大小的差異幾乎相同。

額外此言

答案是約iText的7,但同樣的原則是真實的iText的5

+0

非常好,謝謝你回答布魯諾問題! – Wyzak

相關問題