繁体   English   中英

如何使PDF文本提取正常工作?

[英]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包含相当好的文本提取功能,因此这已经是一个不好的信号。

检查文件将显示问题。 例如,让我们看一下标题

屏幕截图2nefon.pdf

内容流的对应段为:

/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。

  • 如果字体是使用预定义编码MacRomanEncodingMacExpertEncodingWinAnsiEncoding之一的简单字体,或者其编码格式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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM