web-dev-qa-db-ja.com

iTextSharp-ページ上のWordの位置を取得する方法

私はiTextSharpとreader.GetPageContentメソッドを使用してPDFからテキストを引き出しています。ドキュメントで見つかった各単語の長方形/位置を見つける必要があります。 iTextSharpを使用してPDF)内の単語の長方形/位置を取得する方法はありますか?

15
Dave

はいあります。 text.pdf.parserパッケージ、具体的にはLocationTextExtractionStrategyを確認してください。実際、それでもうまくいかないかもしれません。 PdfTextExtractorにフィードするために、独自のTextExtractionStrategyを作成することをお勧めします。

MyTexExStrat strat = new MyTexExStrat();
PdfTextExtractor.getTextFromPage(reader, pageNum, strat);
// get the strings-n-rects from strat.

public class MyTexExStrat implements TextExtractionStrategy {
    void beginTextBlock() {}
    void endTextBlock() {}
    void renderImage(ImageRenderInfo info) {}
    void renderText(TextRenderInfo info) {
      // track text and location here.
    }
}

LocationTextExtractionStrategyのソースを調べて、ベースラインを共有するテキストをどのように組み合わせるかを確認することをお勧めします。 LTESを変更して、文字列と四角形の並列配列を格納することもできます。

PS:四角形を作成するには、AscentLineとDescentLineを取得し、それらの座標を上下のコーナーとして使用できます。

Vector bottomLeft = info.getDescentLine().getStartPoint();
Vector topRight = info.getAscentLine().getEndPoint();
Rectangle rect = new Rectangle(bottomLeft.get(Vector.I1),
                               bottomLeft.get(Vector.I2),
                               topRight.get(Vector.I1),
                               topRight.get(Vector.I2));

警告:上記のコードは、テキストが水平で左から右に進むことを示しています。回転したテキストは、垂直のテキストや右から左(アラビア語、ヘブライ語)のテキストと同様に、それを台無しにします。ほとんどのアプリケーションでは、上記は問題ないはずですが、限界があることを知っておいてください。

良い狩り。

21
Mark Storer