[英]How to get text extraction from PDF to work?
我需要从罗马尼亚语的PDF中提取文本。 使用pdfBox或Snowtide无法正确提取符号:ȚțȘșĂăÎîâ。
这是一个无效的示例文件: ftp : //ftp.logos.md/Biblioteca/_Colectie_RO/2nefon.pdf
有什么建议么?
恐怕OP指向的PDF( 2nefon.pdf )没有提供根据规范提取文本所需的信息。
尝试从Adobe Reader复制和粘贴会导致特殊字符被错误地导出,并且Adobe Reader包含相当好的文本提取功能,因此这已经是一个不好的信号。
检查文件将显示问题。 例如,让我们看一下标题
内容流的对应段为:
/F1 24 Tf
-148.44 -26.16 TD
(VIA}A {I ~NV|}|TURILE) Tj
296.88 0 TD
( ) Tj
-308.16 -29.28 TD
(SFANTULUI IERARH NIFON) Tj
让我们检查使用的字体F1 :
469 0 obj
<<
/Type /Font
/Subtype /TrueType
/Name /F1
/BaseFont /TimesR
/FirstChar 32
/LastChar 255
/Widths [ 250 333 444 722 500 833 778 [...] 500 500 500 500 500 500 500 ]
/Encoding /WinAnsiEncoding
/FontDescriptor 468 0 R
>>
endobj
因此,该字体声称使用WinAnsiEncoding而不进行任何更改(没有Differences )。
最后看一下字体描述符:
468 0 obj
<<
/Type /FontDescriptor
/FontName /TimesR
/Flags 34
/FontBBox [ -167 -307 1009 913 ]
/StemV 90
/ItalicAngle 0
/CapHeight 913
/Ascent 913
/Descent -307
/FontFile2 474 0 R
>>
endobj
这里没有暗示上述WinAnsiEncoding可能不是全部事实。
根据PDF规范ISO 32000-1
合格的读者可以按照给定的优先级使用这些方法,将字符代码映射到Unicode值。 特别是带标签的PDF文档,应至少提供以下方法之一(请参见14.8.2.4.2,“带标签的PDF中的Unicode映射”):
如果字体字典包含ToUnicode CMap(请参见9.10.3,“ ToUnicode CMaps”),请使用该CMap将字符代码转换为Unicode。
如果字体是使用预定义编码MacRomanEncoding , MacExpertEncoding或WinAnsiEncoding之一的简单字体,或者其编码格式的Differences数组仅包含取自Adobe标准拉丁字符集的字符名称和Symbol中的命名字符集,字体(请参阅附件D):
a)根据表D.1和字体的Differences数组将字符代码映射为字符名称。
b)在Adobe字形列表中查找字符名称(请参见参考书目)以获得相应的Unicode值。
如果字体是复合字体[...缩写,因为字体F1不是复合字体...]
如果这些方法无法产生Unicode值,则无法确定字符代码代表什么,在这种情况下,合格的阅读者可以选择他们选择的字符代码。
(第9.10.2节将字符代码映射到Unicode值)
因此,在报告文档声称这两行内容时,文本提取和复制粘贴将完全遵循规范:
VIA}A {I ~NV|}|TURILE
SFANTULUI IERARH NIFON
但是,您可能要检查是否将Ă (带有短音的大写字母 A)始终导出为|。 ; 这实际上并非不可能,在上个世纪的一段时间中,将特殊字符映射到符号的字符代码是很普遍的。 如果确实如此,提取文本后进行全局搜索并替换将为您提供所需的文本。
如何使用iText: http : //itextpdf.com/
“iText®是一个开放源代码库,可让您创建和处理PDF文档。它使开发人员希望通过动态PDF文档生成和/或处理来增强Web应用程序和其他应用程序。”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.