【问题标题】:How can i read pdf with itext?如何使用 itext 阅读 pdf?
【发布时间】:2018-05-08 10:01:29
【问题描述】:

现在我有错误:2018 年 5 月 8 日 12:27:47 PM toUnicode

警告:字体中没有 CID+88 (88) 的 Unicode 映射 404198E5f54TimesNewRoman

结果为空。 如果需要,我可以提供一个文件。

【问题讨论】:

  • 欢迎来到 Stack Overflow!请更详细地描述您在看到错误消息时所做的操作。
  • @werner 还提到了使用的 iText 版本,因为文本提取在过去几年中得到了改进。 iText 5.0.0 中出现的一些错误在 iText 7.1.2 中不再出现。
  • drive.google.com/file/d/1T906GnzJcoPHr-wO5v2Mvd9fGncOueVm/... 我同意使用任何版本的 itext。 itext 不给出警告。它只给出空结果
  • 欢迎来到 Stack Overflow!寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建 minimal reproducible example。使用edit 链接改进您的问题 - 不要通过 cmets 添加更多信息。谢谢!

标签: java pdf itext


【解决方案1】:

您的示例 PDF 不包含提取文本所需的信息。

文档使用具有特殊编码的子集字体:页面上使用的相应字体的第一个字形由某个起始值 n 编码,下一个使用,n+1 的不同字形,下一个使用, n+2,...的不同字形...

例如 第一个单词被十六进制编码为000a 000b 000c 000d 000e 000f 0010,第二个单词加上冒号0011 0012 0013 000c 000d 0010 0014 0015 0016。您可以识别第二个单词中的代码000c000d0010,对应于第一个单词中已经使用过的字形。

显然这种没有任何额外信息的编码不允许文本提取,程序应该如何将这些值映射到 Unicode?​​p>

PDF 格式确实具有包含从这些编码值到 Unicode 的映射的选项,但不幸的是,您文件中的字体不包含此类映射。

因此,您的文件不允许文本提取,您需要改用 OCR。

【讨论】:

  • 换句话说:我的回答是正确的,一旦你分享了 PDF,mkl 就能证明这一点。
【解决方案2】:

带有文本的 PDF 包含在页面上绘制字形的语法。这些字形的形状存储在字体中。页面使用的语法使用字符来指代字形。

例如:

12334 54637

是一种可能的表示:

Hello World

您有以下映射:

`1` = `H`
`2` = `e`
`3` = `l`
`4` = `0`
` ` = ` `
`5` = `W`
`6` = `r`
`7` = `d`

当您以人类的身份查看页面时,您会看到“Hello World”,但是当机器查看页面的语法时,它会看到“12334 54637”,如果您在没有提取内容的情况下提取内容,这也是使用toUnicode 映射。

我刚才描述的映射(1 = H, 2 = e, 3 = l,...)存储在一个映射页面中使用的字符的对象中带有 Unicode 字符。如果缺少该地图,则无法正确提取内容。

您提到的错误 No Unicode mapping for CID+88 (88) in font 404198E5f54TimesNewRoman 通知您 PDF 中缺少信息,因此您无法获得可靠的结果。您可以用肉眼看到正确的文本,但机器无法将文本解析为有用的字符串。

如果这个答案不能让您满意,请分享 PDF,以便我们证明这个答案是正确的。另外:您没有提及您使用的是哪个版本的 iText。与较新的版本(iText 7.1.2 是最新版本)相比,较旧的版本通常不擅长提取文本。

【讨论】:

  • drive.google.com/file/d/1T906GnzJcoPHr-wO5v2Mvd9fGncOueVm/… 我同意使用任何版本的 itext。 itext 不给出警告。它只给出空结果
  • 查看@mkl 的答案:我的解释正是您遇到的问题。 PDF 的创建方式不允许提取文本。
  • 您必须将指向文件的链接放在问题本身中,而不是在答案下方的评论中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-13
相关资源
最近更新 更多