2016-06-30 11 views
1

pdfboxを使用してPDF内のテーブルからデータを抽出するにはどうすればよいですか?PDFBox:テーブルからのデータの抽出

このプロセスでは、PDContentStreamクラスとPageStripperクラスを使用して、テキストとコンテンツのインデックスを見つけることができます。テーブル内の行のインデックスを見つける必要があります。

私は、テキストの開始インデックスを抽出するための次のことを試してみました:

public class Tables { 
    public static void main(String args[]) throws IOException{ 
     BufferedWriter wr; 
     File input = new File("test.pdf"); 
     File output = new File("SampleText.txt"); 
     PDDocument pd=new PDDocument(); 
     pd=PDDocument.load(input); 

     //  PDFTextStripper pds=new PDFTextStripper(); 
     //  String text=pds.getText(pd); 
     PDFTextStripper stripper = new PDFTextStripper() 
     { 
      @Override 
      protected void startPage(PDPage page) throws IOException 
      { 
       startOfLine = true; 
       super.startPage(page); 
      } 

      @Override 
      protected void writeLineSeparator() throws IOException 
      { 
       startOfLine = true; 
       super.writeLineSeparator(); 
      } 

      @Override 
      protected void writeString(String text, List<TextPosition> textPositions) throws IOException 
      { 
       if (startOfLine) 
       { 
        TextPosition firstProsition = textPositions.get(0); 
        writeString(String.format("[%s]", firstProsition.getYDirAdj())); 
        startOfLine = false; 
       } 
       super.writeString(text, textPositions); 
      } 
      boolean startOfLine = true; 
     }; 
     wr = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(output))); 
     stripper.writeText(pd, wr); 
     if (pd != null) { 
      pd.close(); 
     } 
     // I use close() to flush the stream. 
     wr.close(); 
    } 
} 

答えて

0

最近私はテーブルからデータを抽出するために持っていた同様のプロジェクトをしました。

1)あなたが(それはPDFファイルからテーブルを抽出するためのオープンソースのツールである)タブラを使用することができます - :

あなたはここに2つのオプションがあります。 http://tabula.technology/ https://github.com/tabulapdf/tabula コードでtabulaコマンドラインツールを使用して、特定の地域からデータを抽出することができます。

2)表形式のデータを抽出するための独自のアルゴリズムを考案する必要があります。 2番目のオプションを使用する場合は、テキストの座標も抽出する必要があります。あなたはpdfTextStripperクラスのwritestringメソッドをオーバーライドすることができます(あなたはこれについてgoogleすることができます)。次に、これらの情報を使用して必要な詳細を取得する方法について考える必要があります。 (調整は非常に役に立ちます)。

標準形式のpdfをお持ちの場合、あまり関係ないのでtabulaを使用することをお勧めします。

+0

あなたの2番目のオプションに行くと、私は既に私が付いたコードに示されているように、テキストの座標を見つけました。テーブルの行の座標を抽出することは、私が必要とするものです。 – Maalini

+0

もしあなたがグラフィックライン(とテキストの行ではない)を意味するならば、私はあなたがpdfをイメージに変換してイメージピクセルをピクセル単位でtravesringすることによってそうしなければならないと思います。 tabulaには、指定されたイメージ内で見つかった各線分の座標を返すメソッドがあります。 – ANKIT

+0

プロジェクトには同じフォーマットのpdfsがありますか?サンプルファイルをアップロードすることができれば、より良いアイデアが得られます。 – ANKIT

関連する問題