我试图从PDF文件复制文本,但得到一些奇怪的字符。奇怪的是,Okular可以重新识别文本,但不能使用Sumatra PDF或Adobe,这三个应用程序都安装在Windows 10 64位中。为了更好地解释我的问题,下面是视频https://streamable.com/sw1hc。 “文本层解决方法文件”是我得到的一种解决方案。任何帮助是极大的赞赏。问候
答案 0 :(得分:4)
简而言之:(原始)PDF不包含PDF规范中描述的常规文本提取所需的信息。根据任务的确切性质,您可以尝试将所需信息添加到现有文本对象和字体中,或者可以使用OCR。
PDF规范ISO 32000-1(以及类似的ISO 32000-2)也描述了一种算法,该算法使用直接在PDF内部可用的信息将字符代码映射到Unicode值。
它在其他堆栈溢出答案中经常被引用(请参阅here,here,here,here,here或{{3 }}),因此在此不再赘述。
从本质上讲,这是Adobe Acrobat在复制和粘贴以及其他许多文本提取器中使用的算法。
在不包含文本提取所需信息的PDF中,您最终会在算法中达到这一点:
如果这些方法无法产生Unicode值,则无法确定字符代码代表什么,在这种情况下,合格的读者可以选择自己选择的字符代码。
这是文本提取实现的不同之处,他们尝试通过使用PDF之外的启发式方法或信息或将OCR应用于相关字形来确定匹配的Unicode值。
您尝试过的不同程序返回的结果如此不同
您的PDF不包含PDF规范和
这些程序使用的启发式方法相关地有所不同,Okular的启发式方法最适合您的文档。
有多种选择,或多或少取决于您的具体情况:
向PDF来源询问包含正确文本提取信息的版本。
除非您与该来源有一项合同,要求他们以机器可读的形式提供PDF,否则该来源通常有义务这样做,尽管如此... < / p>
将OCR应用于相关PDF。
取决于OCR软件的质量和PDF中的字形,结果的质量可能令人怀疑;例如在您的“ PDF复制文本问题-文本层workaround.pdf”标题中,标题“第1章:衍生证券”被识别为“第1章:Deratve Securites” ...
您可以尝试将手动创建的 ToUnicode 映射交互式添加到PDF,例如如here在Tilman Hausherr至his answer中所述。
取决于创建映射所必须使用的不同字体的数量,此方法可能很容易需要太多时间和精力...