2012-02-16 44 views
17

我們使用iTextSharp和C#WinForms應用程序來解析PDF文件。使用iTextSharp,我可以輕鬆地從PDF文件中提取文本數據。假設一個PDF文件包含一個由兩行文本包圍的圖像。在這種情況下,我無法提取關於圖像的信息。是否可以使用iTextSharp從PDF文件中獲取結構元素?

我的要求是:

  1. 獲取PDF文件的結構元素
  2. 過程中的每個是否是類型文本,圖像,表格或其它

。例如,結構元件是類似於以下內容:

text :paragraph1 
text :paragraph2 
Image:Image 
text :paragraph3 
Table:table info 
text :Paragraph4 

如果我可以獲取信息像這樣的格式,我可以輕鬆理解文本,圖像,表格,頁眉或頁腳信息。

那麼,是否有可能使用iTextSharp獲取這類信息?如果是的話,請在這方面給我啓發。否則,您能否提出一些其他能夠滿足此要求的工具?

感謝所有,

Saravanan

+0

可能的重複http://stackoverflow.com/questions/5945244/extract-image-from-pdf-using-itextsharp – emd 2013-05-01 16:12:27

+0

這是特定於C#4.0嗎? – 2013-06-11 21:26:37

+0

@ Ryan Gates:是...這是C#4.0 – Saravanan 2013-06-12 03:58:26

回答

4

我用了一段時間前需要有這樣的。我用這個功能(從Extract images using iTextSharp):

private static PdfObject FindImageInPDFDictionary(PdfDictionary pg) 
{ 
    PdfDictionary res = 
     (PdfDictionary)PdfReader.GetPdfObject(pg.Get(PdfName.RESOURCES)); 


    PdfDictionary xobj = 
     (PdfDictionary)PdfReader.GetPdfObject(res.Get(PdfName.XOBJECT)); 
    if (xobj != null) 
    { 
     foreach (PdfName name in xobj.Keys) 
     { 

      PdfObject obj = xobj.Get(name); 
      if (obj.IsIndirect()) 
      { 
       PdfDictionary tg = (PdfDictionary)PdfReader.GetPdfObject(obj); 

       PdfName type = 
        (PdfName)PdfReader.GetPdfObject(tg.Get(PdfName.SUBTYPE)); 

       //image at the root of the pdf 
       if (PdfName.IMAGE.Equals(type)) 
       { 
        return obj; 
       }// image inside a form 
       else if (PdfName.FORM.Equals(type)) 
       { 
        return FindImageInPDFDictionary(tg); 
       } //image inside a group 
       else if (PdfName.GROUP.Equals(type)) 
       { 
        return FindImageInPDFDictionary(tg); 
       } 

      } 
     } 
    } 

    return null; 
} 

正如你可以在foreach (PdfName name in xobj.Keys)聲明看,我覺得你可以輕鬆地分析整個PDF和治療各種從它的數據。但我不確定你需要的「垂直」部分。

希望它能幫助你。

+0

這段代碼完全忽略了在任何可見頁面上所討論的圖像是否被*使用*,更不用說其結構中的何處。此外,它忽略了內嵌圖像。完全。 – mkl 2014-01-18 23:18:32

+0

我使用此代碼從頁面中提取圖像,只要pdf是單頁或多頁。我沒有說他應該使用這個代碼塊......你能幫我改進我的答案嗎? – cubitouch 2014-01-19 09:00:24

+0

*您可以幫我改進我的答案嗎?* - 嗯,您可以首先向操作員指出他的問題意味着一些誤解。在PDF中有**沒有**段落或表格,只是在地方繪製了一些文本塊。我認爲這些誤解是在答案出現前將近一年未解決的原因。 – mkl 2014-01-19 15:25:39

相關問題