PDF复制文本问题:奇怪字符
我试图从PDF文件中复制文本,但得到了一些奇怪的字符。奇怪的是,Okular可以识别文本,但苏门答腊PDF或Adobe无法识别,这三个应用程序都安装在64位Windows 10中。为了更好地解释我的问题,这里是视频。“文本层解决方案文件”是我得到的一个解决方案。非常感谢您的帮助。简而言之,(原始)PDF不包含PDF规范中所述的常规文本提取所需的信息。根据任务的具体性质,您可以尝试将所需信息添加到现有的文本对象和字体中,也可以选择OCR 如PDF规范所述,将字符代码映射到Unicode PDF规范ISO 32000-1(以及类似的ISO 32000-2)描述了一种使用PDF中直接提供的信息将字符代码映射到Unicode值的算法 它在其他堆栈溢出答案中经常被引用(请参阅、、或),因此我不再在这里引用它 从本质上讲,这是Adobe Acrobat在复制和粘贴期间使用的算法,也是许多其他文本提取器使用的算法 在不包含文本提取所需信息的PDF中,您最终可以在算法中找到这一点: 如果这些方法无法生成Unicode值,则无法确定字符代码所代表的内容,在这种情况下,一致性读取器可以选择自己选择的字符代码 如果上述算法无法生成Unicode值,会发生什么情况 这就是文本提取实现的不同之处,它们试图通过使用启发法或来自PDF之外的信息,或将OCR应用于所讨论的字形来确定匹配的Unicode值 您尝试的不同程序返回的结果如此不同,这表明PDF复制文本问题:奇怪字符,pdf,copy-paste,Pdf,Copy Paste,我试图从PDF文件中复制文本,但得到了一些奇怪的字符。奇怪的是,Okular可以识别文本,但苏门答腊PDF或Adobe无法识别,这三个应用程序都安装在64位Windows 10中。为了更好地解释我的问题,这里是视频。“文本层解决方案文件”是我得到的一个解决方案。非常感谢您的帮助。简而言之,(原始)PDF不包含PDF规范中所述的常规文本提取所需的信息。根据任务的具体性质,您可以尝试将所需信息添加到现有的文本对象和字体中,也可以选择OCR 如PDF规范所述,将字符代码映射到Unicode PDF规范
请分享有问题的PDF。非常感谢。这里是PDF示例文件的链接,您没有指定奇怪字符的确切位置,但我可以看到PDF中的任何连字都有不正确的Unicode输出。例如,我得到的不是“Metallgesellschaft fired”,而是“Metallgesellschaft®red”,其中“fi”是unicode连字U+FB01。这是制作PDF的软件的一个问题,在PDF中没有生成正确的ToUnicode映射。@Ryan起初我认为问题在整个文件中,因为只有Okula可以识别文本。对于具体提到的单词,苏门答腊PDF将其识别为“I%”,Adobe将其识别为“I%”。但现在我可以确认,Okular也错误地将“Metallge sellschaft fired”识别为Metallge sellschaft®红色“。很高兴知道问题出在哪里,有没有办法更正PDF格式的ToUnicode地图?谢谢,谢谢。这就解释了所有的问题,特别是关于我为什么坚持一个程序可以提取文本,而其他程序不能。请有人详细解释一下代码。我可以看到glyph字符12映射到unicode十六进制值0064,但在PDFDebugger屏幕截图中,拉丁文小写字母D有代码/CID/GID 18。最后,如何运行此代码?是否可以将其直接映射到PDFDebugger ToUnicode CMap表中?对于我来说,OCR作为另一种解决方案不是很理想,虽然我通过了最佳路径(文本层覆盖),因为文本的准确性为回到这里提供了理由,但我不能在上面提到的线程的答案部分发表评论。@ariefcfa“我可以看到glyph字符12映射到unicode十六进制值0064,但在PDFDebugger屏幕截图中,拉丁文小写字母D的代码为/CID/GID 18。“-ToUnicode CMap中的所有映射数据都以十六进制数写入,包括字符代码。因此,
作为十进制数是18!PDFDebugger将数字输出为十进制数字。因此,您看到的数字毕竟是匹配的@ariefcfa“如何运行此代码”-它是基于PDFBox库的Java代码。因此,您可以使用PDFBox jar及其依赖项编译它,然后运行编译后的代码。