我正在使用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)进行测试时,它正在按预期工作。
请帮忙
由于
答案 0 :(得分:2)
iText及其标准文本提取策略摘录
作为
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 above。HorizontalTextExtractionStrategy2
是该答案的“更新:LocationTextExtractionStrategy中的更改”部分中的更新策略。)