2010-08-20 69 views
4

後PDF文件的大小,我現在把一些舊的代碼來創建使用iTextSharp的PDF文件。我們正在創建一個包含多個圖像,其中我將像這樣一個相當大的PDF文件:iTextSharp的 - 插入圖像

Document doc = new Document(PageSize.A4, 50, 50, 25, 25); 
PdfWriter writer = PdfWriter.GetInstance(doc, myStream); 

writer.SetFullCompression(); 

doc.Open(); 

Image frontCover = iTextSharp.text.Image.GetInstance(@"C:\MyImage.png"); 

//Scale down from a 96 dpi image to standard itextsharp 72 dpi 
frontCover.ScalePercent(75f); 

frontCover.SetAbsolutePosition(0, 0); 

doc.Add(frontCover); 

doc.Close(); 

插入圖像(20.8 KB png文件)似乎近100 KB增加PDF文件的大小。

有前項壓縮圖像的方式(銘記這需要是合理的打印質量),或進一步壓縮整個PDF?我甚至在上面的例子中執行任何壓縮?

回答

7

答案似乎是,你需要設置PDF規範相應版本的目標,然後設置壓縮如下:

PdfWriter writer = PdfWriter.GetInstance(doc, ms); 
PdfContentByte contentPlacer; 

writer.SetPdfVersion(PdfWriter.PDF_VERSION_1_5); 

writer.CompressionLevel = PdfStream.BEST_COMPRESSION; 

這帶來了我的文件大小大大下降。我還發現,對於文件的最終尺寸,PNG給了我最好的結果。

+0

完美,像魅力一樣工作 – Raghurocks 2013-11-07 05:06:00

0

看來,PDF要求巴紐轉碼爲別的,JPEG,最有可能。

在這裏看到:http://forums.adobe.com/message/2952201

我能想到的唯一的事情就是先轉換PNG到最小JPEG,包括縮減75%,然後導入該文件不進行縮放。

+0

我不認爲這是必然的情況。我發現許多頁面推薦使用PNG,因爲它們可以更好地縮放和縮小。我自己的實驗發現JPEG是爲更大的PDF製作的。 – Paddy 2010-08-23 08:14:12

1

我今天早上做了一些實驗。我的測試圖像爲800x600,保存爲PNG時文件大小爲100.69K。我將它插入到PDF中(使用iTextSharp和通常的GetInstance()方法),文件大小從301.71K增加到402.63K。然後,我將測試圖像重新保存爲文件大小爲1,440,054的原始位圖。我將它插入到PDF中,文件大小降至389.81K。有趣!

我沒有在網絡上的一些研究了可能的解釋,並根據我的發現,它看起來像iTextSharp的不壓縮的圖像,而是用壓縮一些通用的壓縮一切。換句話說,BMP實際上並沒有轉換爲另一種文件類型,它只是像壓縮ZIP文件一樣壓縮。無論他們在做什麼,它都必須是好的,因爲它比使用PNG壓縮的圖像壓縮得更好。我假設iTextSharp woudld會嘗試壓縮PNG,但會壓縮到0%,因爲它已經被壓縮了。 (這與原作者的觀察結果不一致,儘管......帕迪說他的PDF尺寸比PNG的尺寸增加了很多......不知道該怎麼做,我只能進行我自己的實驗)。

結論:

1)我並不需要一些花哨的庫添加到我的項目我(最終動態創建的)圖像轉換爲PNG;它實際上最好將其完全解壓縮並讓iTextSharp完成所有的壓縮工作。

2)我還約iTextSharp的在一定的DPI圖像保存在網絡上閱讀的東西。我沒有看到這個問題...我使用ScalePercent()方法將位圖縮放到1%,文件大小相同,位圖中的位圖像素沒有「損失」......這證實iTextSharp正在做一個簡單的,很好的,通用的無損壓縮。