使用pdfbox从pdf中提取文本时出错

问题描述 投票:1回答:1

sample pdf

样本pdf是一份中文简历,3页,使用下面的标准代码

PDDocument document =  PDDocument.load(new File(path));
PDFTextStripper stripper = new PDFTextStripper();
text = stripper.getText(document);

提取结果如下图所示,只有一些单词

extraction result

java pdfbox
1个回答
3
投票

如果您运行文本提取代码并启用日志记录,您将看到许多警告:

Feb 12, 2019 5:45:58 PM org.apache.pdfbox.pdmodel.font.PDType0Font toUnicode
WARN: No Unicode mapping for CID+5482 (5482) in font GNPVNR+PingFangSC-Semibold
Feb 12, 2019 5:45:58 PM org.apache.pdfbox.pdmodel.font.PDType0Font toUnicode
WARN: No Unicode mapping for CID+1842 (1842) in font GNPVNR+PingFangSC-Semibold
Feb 12, 2019 5:45:58 PM org.apache.pdfbox.pdmodel.font.PDType0Font toUnicode
WARN: No Unicode mapping for CID+7566 (7566) in font GNPVNR+PingFangSC-Semibold
Feb 12, 2019 5:45:58 PM org.apache.pdfbox.pdmodel.font.PDType0Font toUnicode
WARN: No Unicode mapping for CID+1915 (1915) in font GNPVNR+PingFangSC-Semibold
...

实际上,在检查PDF时,我们发现嵌入了许多PingFangSC样式的子集,但每次都是这样

  • 使用ToUnicode地图,根本没有任何条目,
  • 使用Identity-H编码,和
  • 使用Adobe-Identity-0 ROS,

即没有任何字形代表哪个Unicode代码点的信息。因此,文本提取结果非常缺乏应该不足为奇。

因此,如果您确实需要提取文本,请要求PDF的来源提供包含所需信息的副本。如果无法做到这一点,请尝试OCR。


顺便说一句,一个好的第一次检查通常是尝试从Adobe Reader复制和粘贴文本。在手头的情况下,也导致大多数字符丢失。这通常意味着缺少根据PDF规范提取文本所需的信息。

您还可以在评论中提供的@Tilman链接中找到更多背景:https://pdfbox.apache.org/2.0/faq.html#text-extraction

© www.soinside.com 2019 - 2024. All rights reserved.