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。它将结合左右列。

我将用作示例 PDF,这是来自 START QA 文档。

如何阅读多列的 PDF 文档?

4

1 回答 1

3

这个问题有两种不同的方法,使用哪种方法取决于 PDF 本身。

  1. 如果问题中的 PDF 页面内容中的字符串已经处于所需的顺序:而不是您使用LocationTextExtractionStrategy的重载隐式使用,而是PdfTextExtractor.getTextFromPage显式使用SimpleTextExtractionStrategy; 在你的情况下:

    original_content = PdfTextExtractor.getTextFromPage(reader, 2, new SimpleTextExtractionStrategy());
    
  2. 如果有问题的 PDF 页面内容中的字符串不是所需的顺序:不是您使用LocationTextExtractionStrategy的重载隐式使用的,而是PdfTextExtractor.getTextFromPage显式包装一个这样的策略,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 回答