2012-09-10 123 views
6

「processTextPosition」と同様に、PDFBoxを使用して単語の位置を取得することは可能ですか? processTextPositionは1文字のみで呼び出され、それらを単語にマージするコードはPDFTextStripper( "normalize")メソッドの一部であり、テキストの位置を返します。 場所を抽出する方法/ユーティリティはありますか? PDFファイルあなたから抽出されたテキストに単語とそのxとyの位置を取得する おかげPDFBox - 単語の位置を取得するだけでなく、文字を取得する

+0

おそらくこれが役立ちます:http://stackoverflow.com/questions/3203790/parsing-pdf-files-especially-with -tables-with-pdfbox/12545981#12545981 – impeto

+0

提案していただきありがとうございます。最終的には、writePageを変更して、単語をその位置に保つようにしました(送信したURLに記述されています)。しかし、私たちの場合、列の数(およびその位置)はわかっていないので、情報の構成に基づいて列を見つける必要があります(たとえば、Yの位置から始まる単語を持つ行がたくさんある場合= 100、おそらくテーブルの列があります)。この構造を検出できるコンポーネントはありますか?もしそうなら、「Y」が定数ではないときに、やや回転したページも扱うことができますか? – user964797

+0

可能な方法の1つは、PDFTextStripperクラスのprocessTextPosition()にオーバーライドを追加し、seperatorという単語をチェックすることによって文字を追跡することです。単語startにマークを付け、単語の末尾にマークを付けて保存しますデリミタが遭遇する。 – programer8

答えて

1

- (情報は実際のテーブルであり、我々は空のセルを検出したい動機が何であるか疑問に思う人のために)このカスタムクラスのオブジェクトを作成し、これ

PDFTextStripper pdfStripper = new CustomPDFTextStripper(); 
String text = pdfStripper.getText(*pdf file wrapped as a PDDocument object*); 

としてテキストを抽出

public class CustomPDFTextStripper extends PDFTextStripper{ 

    public CustomPDFTextStripper() throws IOException { 

    } 

    /** 
    * Override the default functionality of PDFTextStripper. 
    */ 

    @Override 
    protected void writeString(String text, List<TextPosition> textPositions) throws IOException{ 
     TextPosition firstProsition = textPositions.get(0); 
     writeString(String.format("[%s , %s , %s]", firstProsition.getTextPos().getXPosition(), 
       firstProsition.getTextPos().getYPosition(), text)); 

    } 
} 

PDFファイルなどからPdfTextStripperクラスを拡張し、テキストを抽出するために、カスタムクラスを使用する必要があります結果のテキスト文字列は[xposition、yposition、word]の形式でデフォルトの単語区切り文字で区切られています

+0

PdfBoxで動作しません。 –

関連する問題