0
PDFTextStripper stripper = new PDFText2HTML(encoding);
String result = stripper.getText(document).trim();

结果包含类似

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd"> <html><head><title>Inserat
 SeLe EE rev</title> <meta http-equiv="Content-Type"
 content="text/html; charset=utf-8"> </head> <body> <div
 style="page-break-before:always;
 page-break-after:always"><div><p>&#0;&#1;&#2;&#3;&#4;&#5;&#6;&#7;&#...

代替

 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 "http://www.w3.org/TR/html4/loose.dtd"> <html><head><title>Inserat
 SeLe EE rev</title> <meta http-equiv="Content-Type"
 content="text/html; charset=utf-8"> </head> <body> <div
 style="page-break-before:always; page-break-after:always"><div><p>any
 blablabla characters...

当我将编码更改为 windows-1252 或 utf-8 时,结果没有改变。错误的 pdf 网址http://www.permaco.ch/fileadmin/user_upload/jobs/Inserat_SeLe_EE_rev.pdf

如何解析这个pdf?

4

1 回答 1

3

如何解析这个pdf

缺少OCR'ing它你没有。

有问题的 PDF 不包含在不进行至少一些 OCR 的情况下提取文本所需的信息(至少对所用字体的每个字符进行 OCR 以找到从字形到字符的映射),这需要额外的库和代码。

作为文本提取的要求,PDF 规范ISO 32000-1:2008在第 9.10.2 节中正确声明用于提取文本的字体需要

  • 要么包含ToUnicode CMap——文档中使用的字体不包含——</li>
  • 或者是使用表 118 中列出的预定义 CMap 之一的复合字体(Identity-H 和 Identity-V 除外)或其后代 CIDFont 使用 Adob​​e-GB1、Adobe-CNS1、Adobe-Japan1 或 Adob​​e-Korea1 字符集— 您的文档中使用的字体不是 —</li>
  • 或者是使用预定义编码MacRomanEncoding、MacExpertEncodingWinAnsiEncoding 之一的简单字体,或者其差异数组仅包含取自 Adob​​e 标准拉丁字符集的字符名称和 Symbol 字体中的命名字符集的编码—您的文档中使用的字体既不使用这些预定义的编码之一,也不使用其差异数组中提到的那些选择中的字符名称:使用的名称是/0/1、 ...、/155

通常,一个好的第一个测试是尝试使用 Adob​​e Reader 复制和粘贴文本,因为 Reader 的代码中有很多文本提取经验。尝试这样做时,您会发现只会得到垃圾。

于 2013-07-15T10:13:30.010 回答