2012-02-16 30 views
17

C#WinFormsアプリケーションでiTextSharpを使用してPDFファイルを解析しています。 iTextSharpを使用すると、PDFファイルからテキストデータを簡単に抽出できます。 PDFファイルに2行のテキストで囲まれたイメージが含まれているとします。この場合、画像に関する情報を抽出できませんでした。iTextSharpを使用してPDFファイルから構造要素を取得することは可能ですか?

私の要件がある:

  1. は、それぞれが例えばタイプテキスト、イメージ、テーブルまたは他の

であるか否かをPDFファイル

  • プロセスの構成要素を取得し、構成要素であります次のようになります。

    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

    +0

    これはC#4.0固有のものですか? –

    +0

    @ Ryan Gates:はい...それはC#4.0のためです – Saravanan

    答えて

    4

    は、私はしばらく前に必要性のこの種を持っていました。私は(Extract images using iTextSharpから)この機能を使用する:あなたはforeach (PdfName name in xobj.Keys)文で見ることができるように

    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; 
    } 
    

    、私はあなたが簡単に全体のPDFを解析し、それからのデータのすべての種類を扱うことができると思います。しかし、私はあなたの必要性の "垂直性"の部分についてはよく分かりません。

    お手数ですがお手伝いします。

    +0

    このコードは、表示されているページで問題の画像が*使用されているかどうかを完全に無視します。さらに、インライン画像は無視されます。完全に。 – mkl

    +0

    私はこのコードを使用して、pdfが1ページまたは複数ページの場合は常に、ページから画像を抽出します。私は彼がこのコードブロックをそのまま使用すべきだとは言わなかった...それから私の答えを改善するのを助けてくれますか? – cubitouch

    +0

    *あなたは私の答えを改善するのを手伝ってもらえますか?* - まあ、彼の質問には数多くの誤解が含まれていることを指摘することから始めることができます。 PDFに** **の段落や表はありません。場所に描かれたテキストチャンクだけです。私はこれらの誤解があなたの答えの前にほぼ1年間答えられなかった理由のいくつかであると推測します。 – mkl

    関連する問題