2013-10-06 48 views
3

pdf顯示在我的Firefox非常好,但在C#程序使用我5.4.4 itextsharp寫的,我用的PdfImageObjectGetDrawingImage方法,我也得到一個grabled圖像。itextsharp 5.4.4 - GetDrawingImage以這種方式解碼這個圖像 - 爲什麼?

我用iTextSharp的以下列方式:

PdfReader reader = new PdfReader(filename); 
PdfReaderContentParser parser = new PdfReaderContentParser(reader); 
ImageRenderListener listener = new ImageRenderListener(); 
parser.ProcessContent(pageNumber, listener); 

ImageRenderListenerIRenderListener,它實現在以下方式RenderImage方法:

public void RenderImage(ImageRenderInfo renderInfo) 
    { 
     PdfImageObject image = renderInfo.GetImage(); 

     PdfObject obj = image.Get(PdfName.FILTER); 

     PdfName filter = null; 

     if (obj is PdfName) 
     { 
      filter = (PdfName)obj; 
     } 
     else if (obj is PdfArray) 
     { 
      foreach(var o in (PdfArray)obj) 
      { 
       if (o is PdfName) 
       { 
        filter = o as PdfName; 
        break; 
       } 
      } 
     } 

     if (filter != null) 
     { 
      System.Drawing.Image drawingImage = image.GetDrawingImage(); 
... 
... 
... 
     } 

繪圖圖像被存儲在聽者然後畫到屏幕等...

我試圖理解這一點,我得到的過濾器我s /CCITTFaxDecodestreamContentType是不知何故png,有人可以啓發我在這個問題上?

Thanx提前。

+0

*'filter'是一個**/CCITTFaxDecode **,但'streamContentType'是某種方式的** png *** - 一個iText圖像提取結果*可以是png或tiff,具體取決於顏色圖像的深度,*參見「PdfImageObject.decodeImageBytes」的文檔;這就是說,iText(或圖像數據)似乎存在一個問題,因爲在我的測試設置中,PDF的外觀會出現問題。 – mkl

+0

@mkl thanx的解釋,無論如何,我的意圖是要問爲什麼iTextSharp使這PDF看起來破碎,當與其他工具,它看起來很好... – dhg

回答

2

此問題的原因在以下視頻中進行了說明:Ripping your PDF files apart。如果您不想坐在整個視頻中,請快速轉到第24分鐘,然後觀看第27分鐘的所有內容。請注意第27分鐘的結論:一般而言,PDF中沒有圖像。(那是誇張的,但如果你理解了3分鐘的解釋,你懂什麼馬克·斯蒂芬斯意思。)

如果您想了解爲什麼CCITTFaxDecode改爲PNG的詳情,請閱讀my book第10章。

+0

這個談話是非常有助於理解PDF中的圖像是一個確實是一個複雜的主題(和是沒有圖像:-)),但我仍然不明白爲什麼我給的例子PDF在iText中看起來壞了... – dhg

+0

嗯,我試圖挖掘iTextSharp的代碼,以找到爲什麼這是發生,到目前爲止,我找不到原因,我懷疑在解碼1D T4時出現了一個錯誤,我現在只通過這個「TiffWriter」類的幫助來通過這個,我真的很想知道但是我的時間是有限的...無論如何,謝謝你這個圖書館... – dhg

+0

也感謝那個強大的lib。 我和/ CCITTTFAXDECODE圖像有類似的問題。我壓縮它們2次(如* .png,使用FreeImage lib),將其保存到文件系統並檢查。但是當我要使用stamper.Writer.AddDirectImageSimple()(以及之前調用的KillInderect())插回到PDF壓縮圖像時,生成的壓縮PDF文件保持幾乎相同的大小。我調試ITextSharp源代碼的方式,仍然找不到根本原因... –

相關問題