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

时间:2019-02-12 06:58:17

标签: java pdfbox

sample pdf

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

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

提取结果如下图所示,只有几个词

extraction result

1 个答案:

答案 0 :(得分: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 编码,并且
  • 使用 Adob​​e-Identity-0 ROS

即没有任何信息,哪个字形代表哪个Unicode代码点。因此,完全没有文本提取结果就不足为奇了。

因此,如果您确实需要提取文本,请询问PDF的提供者以提供包含所需信息的副本。如果那不可能,请尝试OCR。


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

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