我的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();
}
答案 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。
问候,迈克尔