2016-06-30 11 views
0

私はpdfドキュメントの各文字のテキスト位置を取得したいと思います。私はPDFBoxのサンプルサイトで提供されているPrintTextLocationsの例を見てきました。この例では、保護されたwriteStringメソッドをオーバーライドし、PDFTextStripperクラスを拡張してテキスト位置を出力します。その方法はここにありますPDFBoxでtextpositionsを返す方法は?

/** 
* Override the default functionality of PDFTextStripper. 
*/ 
@Override 
protected void writeString(String string, List<TextPosition> textPositions) throws IOException 
{ 
    for (TextPosition text : textPositions) 
    { 
     System.out.println("String[" + text.getXDirAdj() + "," + 
       text.getYDirAdj() + " fs=" + text.getFontSize() + " xscale=" + 
       text.getXScale() + " height=" + text.getHeightDir() + " space=" + 
       text.getWidthOfSpace() + " width=" + 
       text.getWidthDirAdj() + "]" + text.getUnicode()); 
    } 
} 

しかし、私はクラスからTextPositionリストを返すしたいと思います。 APIから、クラスに保護されたメソッドがあり、getCharactersByArticle()という名前のクラスがprotected List<List<TextPosition>>を返すことがわかりました。

メソッドからリストを返す方法を知りたいです。

ありがとうございます。

+0

*メソッドからリストを返す* - *どのメソッドから返りたいのですか?明らかに、あなたが呼び出し元ではないので 'writeString'ではなく、実際の呼び出し元はすべての戻り値を無視します。 – mkl

答えて

0

メモリに問題がない場合は、次の回避策を使用できます。

static ArrayList<TextPosition> pos=new ArrayList<TextPosition>(); 
/** 
* Override the default functionality of PDFTextStripper. 
*/ 
@Override 
protected void writeString(String string, List<TextPosition> textPositions) throws IOException 
{ 
    for (TextPosition text : textPositions) 
    { 
     pos.add(text); 
     System.out.println("String[" + text.getXDirAdj() + "," + 
      text.getYDirAdj() + " fs=" + text.getFontSize() + " xscale=" + 
      text.getXScale() + " height=" + text.getHeightDir() + " space=" + 
      text.getWidthOfSpace() + " width=" + 
      text.getWidthDirAdj() + "]" + text.getUnicode()); 
    } 
} 

または、希望する変更を加えてプロジェクトにpdfboxクラスをコピーして再構築することができます。

関連する問題