【问题标题】:PDFTextStripper parsing with wrong encodingPDFTextStripper 解析错误的编码
【发布时间】:2013-07-15 07:55:05
【问题描述】:
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?

【问题讨论】:

    标签: java pdf pdfbox pdf-parsing


    【解决方案1】:

    如何解析this pdf

    缺少 OCR 功能。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-07-17
      • 1970-01-01
      • 1970-01-01
      • 2017-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多