PDF 复制文本问题:奇怪的字符
PDF Copy Text Issue: Weird Characters
我试图从 PDF 文件复制文本,但得到了一些奇怪的字符。奇怪的是,Okular 可以识别文本,但不能识别 Sumatra PDF 或 Adobe,这三个应用程序都安装在 Windows 10 64 位中。为了更好地解释我的问题,这里是视频 https://streamable.com/sw1hc。 "text layer workaround file" 是我得到的一种解决方案。任何帮助是极大的赞赏。此致
简而言之:(原始)PDF 不包含 PDF 规范中描述的常规文本提取所需的信息。根据您任务的具体性质,您可以尝试将所需信息添加到现有文本 objects 和字体中,或者您可以使用 OCR。
按照 PDF 规范中的描述将字符代码映射到 Unicode
PDF 规范 ISO 32000-1(以及类似的 ISO 32000-2)描述了一种使用 PDF 中直接可用的信息将字符代码映射到 Unicode 值的算法。
在其他stack overflow的回答中已经被多次引用(见here, here, here, here, here, or here),这里不再引用。
基本上这是 Adobe Acrobat 在复制和粘贴过程中使用的算法,也被许多其他文本提取器使用。
在不包含文本提取所需信息的 PDF 中,您最终会在算法中达到这一点:
If these methods fail to produce a Unicode value, there is no way to determine what the character code represents in which case a conforming reader may choose a character code of their choosing.
如果上述算法无法生成 Unicode 值会怎样
这是文本提取实现的不同之处,它们尝试通过使用启发式方法或来自 PDF 之外的信息或将 OCR 应用于相关字形来确定匹配的 Unicode 值。
您尝试的不同程序返回如此不同的结果表明
您的 PDF 不包含 PDF 规范中上述算法所需的信息,并且
这些程序使用的启发式算法存在相关差异,Okular 的启发式算法最适合您的文档。
遇到这种情况怎么办
有多种选择,或多或少取决于您的具体情况:
向 PDF 来源索取包含适当文本提取信息的版本。
除非您与该来源签订合同,要求他们以机器可读的形式提供 PDF,或者该来源有义务这样做,否则他们通常会拒绝,但...
对有问题的 PDF 应用 OCR。
根据 OCR 软件的质量和 PDF 中的字形,结果的质量可能有问题;例如在您的 "PDF copy text issue-Text layer workaround.pdf" 中,header "Chapter 1: Derivative Securities" 已被识别为 "Chapter1: Deratve Securites"...
您可以尝试以交互方式将手动创建的 ToUnicode 映射添加到 PDF,例如如 Tilman Hausherr in his answer to "how to add unicode in truetype0font on pdfbox 2.0.0".
所述
根据您必须为其创建映射的不同字体的数量,这种方法可能很容易需要太多时间和精力...
我试图从 PDF 文件复制文本,但得到了一些奇怪的字符。奇怪的是,Okular 可以识别文本,但不能识别 Sumatra PDF 或 Adobe,这三个应用程序都安装在 Windows 10 64 位中。为了更好地解释我的问题,这里是视频 https://streamable.com/sw1hc。 "text layer workaround file" 是我得到的一种解决方案。任何帮助是极大的赞赏。此致
简而言之:(原始)PDF 不包含 PDF 规范中描述的常规文本提取所需的信息。根据您任务的具体性质,您可以尝试将所需信息添加到现有文本 objects 和字体中,或者您可以使用 OCR。
按照 PDF 规范中的描述将字符代码映射到 Unicode
PDF 规范 ISO 32000-1(以及类似的 ISO 32000-2)描述了一种使用 PDF 中直接可用的信息将字符代码映射到 Unicode 值的算法。
在其他stack overflow的回答中已经被多次引用(见here, here, here, here, here, or here),这里不再引用。
基本上这是 Adobe Acrobat 在复制和粘贴过程中使用的算法,也被许多其他文本提取器使用。
在不包含文本提取所需信息的 PDF 中,您最终会在算法中达到这一点:
If these methods fail to produce a Unicode value, there is no way to determine what the character code represents in which case a conforming reader may choose a character code of their choosing.
如果上述算法无法生成 Unicode 值会怎样
这是文本提取实现的不同之处,它们尝试通过使用启发式方法或来自 PDF 之外的信息或将 OCR 应用于相关字形来确定匹配的 Unicode 值。
您尝试的不同程序返回如此不同的结果表明
您的 PDF 不包含 PDF 规范中上述算法所需的信息,并且
这些程序使用的启发式算法存在相关差异,Okular 的启发式算法最适合您的文档。
遇到这种情况怎么办
有多种选择,或多或少取决于您的具体情况:
向 PDF 来源索取包含适当文本提取信息的版本。
除非您与该来源签订合同,要求他们以机器可读的形式提供 PDF,或者该来源有义务这样做,否则他们通常会拒绝,但...
对有问题的 PDF 应用 OCR。
根据 OCR 软件的质量和 PDF 中的字形,结果的质量可能有问题;例如在您的 "PDF copy text issue-Text layer workaround.pdf" 中,header "Chapter 1: Derivative Securities" 已被识别为 "Chapter1: Deratve Securites"...
您可以尝试以交互方式将手动创建的 ToUnicode 映射添加到 PDF,例如如 Tilman Hausherr in his answer to "how to add unicode in truetype0font on pdfbox 2.0.0".
所述根据您必须为其创建映射的不同字体的数量,这种方法可能很容易需要太多时间和精力...