【问题标题】:How to get text extraction from PDF to work?如何将文本从 PDF 提取到 word?
【发布时间】:2013-12-22 13:19:47
【问题描述】:

我需要从 PDF 中提取罗马尼亚语文本。使用 pdfBox 或 Snowtide 无法正确提取符号:ȚțȘșĂăÎîÂâ。

这是一个不工作的示例文件: ftp://ftp.logos.md/Biblioteca/_Colectie_RO/2nefon.pdf

有什么建议吗?

【问题讨论】:

标签: java pdf unicode


【解决方案1】:

恐怕 OP 指向的 PDF (2nefon.pdf) 没有提供根据规范提取文本所需的信息。

尝试从 Adob​​e Reader 复制粘贴会导致特殊字符被错误导出,并且由于 Adob​​e 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 而不作任何更改(无差异)。

最后看一下字体描述符:

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 数组仅包含取自 Adob​​e 标准拉丁字符集的字符名称和 Symbol 字体中的命名字符集(参见附录 D):

    a) 根据表 D.1 和字体的 Differences 数组将字符代码映射到字符名称。

    b)在 Adob​​e Glyph List(参见参考书目)中查找字符名称以获得对应的 Unicode 值。

  • 如果字体是复合字体 [...缩短,因为字体 F1 不是复合字体...]

如果这些方法无法生成 Unicode 值,则无法确定字符代码代表什么,在这种情况下,符合标准的读者可以选择他们选择的字符代码。

(第 9.10.2 节将字符代码映射到 Unicode 值)

因此,当报告文档声称这两行说时,文本提取和复制和粘贴完全遵循规范:

VIA}A {I ~NV|}|TURILE
SFANTULUI IERARH NIFON

不过,您可能想检查一下,例如Ă(大写的 A 和缩写)始终导出为 |;这实际上并非不可能,将特殊字符映射到符号的字符代码在上个世纪的一段时间内相当普遍。如果确实如此,文本提取后的全局搜索和替换将为您提供所需的文本。

【讨论】:

    【解决方案2】:

    iText 怎么样:http://itextpdf.com/

    “iText® 是一个开源库,允许您创建和操作 PDF 文档。它使希望通过动态 PDF 文档生成和/或操作来增强 Web 和其他应用程序的开发人员。”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-06
      • 2019-12-05
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 2010-11-12
      相关资源
      最近更新 更多