0

複数列の PDF ドキュメントの読み取り

iText が PDF を読み取る (ページ コンテンツを文字列変数に抽出する) と、コンテンツは次の方法で修正されます。

reader = new PdfReader(getResources().openRawResource(R.raw.resume1));
original_content = PdfTextExtractor.getTextFromPage(reader, 2);
String sub_content = original_content.trim().replaceAll(" {2,}", " ");
sub_content = sub_content.trim().replaceAll("\n ", "\n");
sub_content = sub_content.replaceAll("(.+)(?<!\\.)\n(?!\\W)", "$1 "); 

ドキュメントが1列のみの場合、ドキュメントに複数列がある場合、1行に1つのドキュメントが抽出されます。左と右の列を結合します。

これを START QA ドキュメントからのサンプル PDF として使用しています。

複数列の PDF ドキュメントを読むには?

4

1 に答える 1

3

この問題には 2 つの異なるアプローチがあり、どちらを使用するかは PDF 自体によって異なります。

  1. 質問の PDF のページ コンテンツの文字列が既に目的の順序になっている場合:LocationTextExtractionStrategyオーバーロードによって暗黙的に使用される代わりに、明示的に;PdfTextExtractor.getTextFromPageを使用します。SimpleTextExtractionStrategyあなたの場合:

    original_content = PdfTextExtractor.getTextFromPage(reader, 2, new SimpleTextExtractionStrategy());
    
  2. 問題の PDF のページ コンテンツの文字列が目的の順序になっていないLocationTextExtractionStrategy場合:使用するオーバーロードによって暗黙的に使用される代わりに、そのPdfTextExtractor.getTextFromPageような戦略の 1 つを明示的にラップしてFilteredTextRenderListener、単一の列の領域のテキストを受け取るように制限します。それだけ; あなたの場合:

    Rectangle left = new Rectangle(0, 0, 306, 792);
    Rectangle right = new Rectangle(306, 0, 612, 792);
    RenderFilter leftFilter = new RegionTextRenderFilter(left);
    RenderFilter rightFilter = new RegionTextRenderFilter(right);
    [...]
    TextExtractionStrategy strategy = new FilteredTextRenderListener(new LocationTextExtractionStrategy(), leftFilter);
    original_content = PdfTextExtractor.getTextFromPage(reader, 2, strategy);
    originalContent += " ";
    strategy = new FilteredTextRenderListener(new LocationTextExtractionStrategy(), rightFilter);
    original_content += PdfTextExtractor.getTextFromPage(reader, 2, strategy);
    
于 2012-11-12T08:23:13.567 に答える