-1

2列形式のpdfがあります。単純なテキストに解析することはできますが、これらの pdf には間に画像もあります。その結果、間に画像があるPDFの特定のページのテキスト出力がごちゃごちゃになります。

たとえば、2 列のページ形式を考えてみましょう

画像テキスト2

イメージ イメージ

画像テキスト3

Text1 画像

    Text4   

出力は、Text1 Text2 Text3 Text4 ではなく、Text4 Text3 Text2 Text1 です。

これが適切な順序でテキストを読むための解決策はありますか?

次のコードを使用しています

public void parsePdf(String pdf, String txt) throws IOException {

    PdfReader reader = new PdfReader(pdf);
    PdfReaderContentParser parser = new PdfReaderContentParser(reader);
    PrintWriter out = new PrintWriter(new FileOutputStream(txt));
    TextExtractionStrategy strategy;
    for (int i = 76; i <= reader.getNumberOfPages(); i++) {
       strategy = parser.processContent(i, new SimpleTextExtractionStrategy());
        out.println(strategy.getResultantText());
    }
    out.flush();
    out.close();
}
4

1 に答える 1

0

SimpleTextExtractionStrategy を使用しています。この戦略は、ページ コンテンツ内の文字グループがすでに適切な順序になっていることを前提としています。代わりに、これらの文字グループをソートする LocationTextExtractionStrategy を試してください。

しかし、あなたは興味深い順序を好むようです。あなたの質問によると、Text1 Text2 Text3 Text4を取得したい

Image Text2
Image Image
Image Text3
Text1 Image
      Text4

ただし、LocationTextExtractionStrategy は主に上から下に並べ替え、左から右に並べるだけです。したがって、Text2 Text3 Text1 Text4が得られます。必要に応じて、LocationTextExtractionStrategy をコピーし、必要な方法でテキスト フラグメントを並べ替えるように変更する必要があります。

ただし、コンテンツが 2 つの列にあると解釈されることを意図しているためにその順序が望ましい場合は、戦略の入力をフィルタリングして、列を個別に解析することをお勧めします。

Rectangle rect = new Rectangle(x1, y1, x2, y2);
RenderFilter filter = new RegionTextRenderFilter(rect);
TextExtractionStrategy strategy = new FilteredTextRenderListener(
    new LocationTextExtractionStrategy(), filter);

iText in Action、第 2 版のサンプルExtractPageContentArea を授与します。

よろしく、マイケル

于 2012-10-23T10:48:08.443 に答える