iText java无法从PDF /中正确解析文本

时间:2016-10-08 12:23:01

标签: java itext

我正在使用iText Java API从PDF中提取文本。

String text =  PdfTextExtractor.getTextFromPage(reader,i);

Src PDF内容:

1.2提交

生成的文字:

提交资料
1.2

提取的文本被分成两个单独的行,文本的顺序也混乱了。

有人可以帮我理解我做错了什么吗?

Src pdf文件链接 - https://www.dropbox.com/s/vc9it3c7856ejli/testPDF.pdf?dl=0

从iText生成的目标文本文件 - https://www.dropbox.com/s/ps2l9yz5ufuup01/test.txt?dl=0

但是,当我使用其他PDF API(如PDFClown,OCROnline)进行测试时,它正在按预期工作。

请帮忙

由于

1 个答案:

答案 0 :(得分:2)

原因

iText及其标准文本提取策略摘录

Screenshot

作为

SUBMITTALS
1.2 

因为“1.2”实际上位于“SUBMITTALS”之下(微小):

q .75000 0 0 .75000 0 792 cm 
1 1 1 rg 0 0 816 -1056 re f 
q .32000 0 0 .32000 0 0 cm 
q 
...
q .20823 0 0 .20807 0 0 cm 
BT /F2 220 Tf 0 g 2340 -6628 Td(SUBMITTALS) Tj ET Q
q .20823 0 0 .20807 0 0 cm 
BT /F2 220 Tf 0 g 1440 -6634 Td(1.2) Tj ET Q

正如您在PDF的内容绘制说明摘录中所看到的,“1.2”是在缩放的y坐标-6634处绘制的,而“SUBMITTALS”是在-6628处绘制的,即“1.2”绘制为6缩放单位“SUBMITTALS”。

这使得iText将它放在一个单独的后续行中。

解决方案

您可以使用HorizontalTextExtractionStrategy2中的this answer代替默认提取策略,参见TextExtraction.java test testTestPDF,并获得此输出:

1.2 SUBMITTALS 

(有关使用该策略的详细信息,请授予answer mentioned aboveHorizontalTextExtractionStrategy2是该答案的“更新:LocationTextExtractionStrategy中的更改”部分中的更新策略。)