pdf - PDF复制文本问题:奇怪的字符
问题描述
我试图从 PDF 文件中复制文本,但得到了一些奇怪的字符。奇怪的是,Okular 可以识别文本,但不能使用 Sumatra PDF 或 Adobe,这三个应用程序都安装在 Windows 10 64 位中。为了更好地解释我的问题,这里是视频https://streamable.com/sw1hc。“文本层解决方法文件”是我得到的一种解决方案。任何帮助是极大的赞赏。问候
解决方案
简而言之:(原始)PDF 不包含 PDF 规范中描述的常规文本提取所需的信息。根据您任务的具体性质,您可能会尝试将所需信息添加到现有文本对象和字体中,或者您可能会选择 OCR。
如 PDF 规范中所述,将字符代码映射到 Unicode
PDF 规范 ISO 32000-1(以及类似的 ISO 32000-2)描述了一种使用 PDF 中直接可用的信息将字符代码映射到 Unicode 值的算法。
它在其他堆栈溢出答案中经常被引用(见这里、这里、这里、这里、这里或这里),所以我不再在这里引用它。
本质上,这是 Adobe Acrobat 在复制和粘贴过程中使用的算法,也是许多其他文本提取器使用的算法。
在不包含文本提取所需信息的 PDF 中,您最终会在算法中达到这一点:
如果这些方法无法生成 Unicode 值,则无法确定字符代码代表什么,在这种情况下,符合标准的读者可以选择他们选择的字符代码。
如果上述算法无法生成 Unicode 值会发生什么
这就是文本提取实现不同的地方,它们尝试通过使用启发式或 PDF 之外的信息或将 OCR 应用于相关字形来确定匹配的 Unicode 值。
您尝试的不同程序返回的结果如此不同表明
您的 PDF 不包含 PDF 规范中上述算法所需的信息,并且
这些程序使用的启发式方法不同,Okular 的启发式方法最适合您的文档。
在这种情况下该怎么办
有多种选择,或多或少可行,具体取决于您的具体情况:
向 PDF 的来源询问包含适当信息以进行文本提取的版本。
除非您与该来源签订了合同,要求他们以机器可读的形式提供 PDF,或者该来源有其他义务这样做,否则他们通常会拒绝,但...
将 OCR 应用于相关 PDF。
根据 OCR 软件的质量和 PDF 中的字形,结果的质量可能有问题;例如,在您的“PDF copy text issue-Text layer workaround.pdf”中,标题“Chapter 1: Derivative Securities”已被识别为“Chapter1: Deratve Securites”...
您可以尝试以交互方式将手动创建的ToUnicode映射添加到 PDF,例如Tilman Hausherr在他对"how to add unicode in truetype0font on pdfbox 2.0.0"的回答中所描述的那样。
根据您必须为其创建映射的不同字体的数量,这种方法可能很容易需要太多的时间和精力......
推荐阅读
- css - 网格布局图像不等高
- r - 仅保留仅重复一次的行
- active-directory - 本地用户帐户禁用日期
- ruby-on-rails - RGeo::GeoJSON 不解码并返回几何体 as_text 用于“甜甜圈”多边形
- javascript - Javascript HTML 重定向
- reporting-services - ReportViewer 滚动条在 Internet Explorer 11 上不可见
- python-3.x - TypeError:'dict'和'dict'的实例之间不支持'<'
- swift - 一次循环初始化多个不可变数组
- machine-learning - 对分钟数据执行交叉验证
- java - 无法更改 Java 文件权限