带有图像的IText Pdf阅读器

时间:2012-10-22 19:13:01

标签: itext pdf-reader

我的pdf是2列格式。我能够将它解析为简单的文本,但这些pdf之间也有图像。结果,我的文本输出混乱了pdf的特定页面,其间有图像。

例如,考虑2列页面格式

Image Text2

图片图片

图片文字3

Text1 Image

    Text4   

输出是 Text4 Text3 Text2 Text1而不是Text1 Text2 Text3 Text4

任何解决方案都能以正确的顺序阅读文本吗?

我正在使用以下代码

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();
}

1 个答案:

答案 0 :(得分:0)

您正在使用SimpleTextExtractionStrategy。此策略假定页面内容中的字母组已经处于合理的顺序中。尝试使用LocationTextExtractionStrategy对这些字母组进行排序。

但你似乎更喜欢有趣的订单。根据您的问题,您希望获得 Text1 Text2 Text3 Text4

Image Text2
Image Image
Image Text3
Text1 Image
      Text4

然而,LocationTextExtractionStrategy将主要从上到下排序,并且仅从左到右排序。因此,您将获得 Text2 Text3 Text1 Text4 。根据您的要求,您应该复制LocationTextExtractionStrategy并将其更改为按照您需要的方式对文本片段进行排序。

如果所需的顺序是由于内容被解释为在两列中,您可能希望通过过滤策略输入来单独解析列:

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

授予iText行动,第2版示例ExtractPageContentArea

问候,迈克尔