“属性”->“字体”进行识别。其中一种字体被提及为,C0EX02Q0_22类型:3型编码:-6ren">
gpt4 book ai didi

java - 使用java从pdf文件中提取文本时遇到的问题

转载 作者:太空宇宙 更新时间:2023-11-04 07:06:34 25 4
gpt4 key购买 nike

无法从具有客户加密字体的 pdf 中提取文本,该字体可通过 Adob​​e reader 中的"file"->“属性”->“字体”进行识别。其中一种字体被提及为,C0EX02Q0_22类型:3型编码:自定义实际字体:C0EX02Q0_22实际字体类型:Type 3

请告诉我有什么方法可以从此类 pdf 文件中提取文本内容。目前我正在使用 pdf util 中的 PDFText2HTML。提取此类 pdf 文件时获取“ÁÙÅ@ÅÕãÉ”等值

示例 pdf:tesis completa.pdf

在此 pdf 中,您可以看到使用自定义编码的字体,例如:T3Font_1(请在 Adob​​e reader 中通过"file"->“属性”->“字体”进行引用)由于我无法上传我的 pdf,因此更新了具有相同问题的示例

最佳答案

按照标准中的描述进行提取

PDF 规范 ISO 32000-1第 9.10 节文本内容的提取描述了如果 PDF 提供了所需信息并且正确执行,如何进行文本提取。

但是,使用此算法仅适用于文档的几个页面范围(即摘要、内容列表、致谢词和 Publicación 7 部分),但在其他范围中会导致乱码,例如8QLYHUVLWDWGH/OHLGD 而不是 Universitat de Lleida。查看有问题的 PDF 对象可以清楚地看出缺少所需的信息(没有 ToUnicode 映射,并且编码基于WinAnsiEncoding,但使用的所有位置都通过差异映射到非标准名称)。

尝试使用 Adob​​e Reader 中的复制和粘贴来提取文本也会返回乱码。这通常表明通用提取是不可能的。

解决方法

检查 PDF 对象和通用文本提取尝试的输出,会产生这样的想法,即提取为乱码的文本的实际编码对于所有使用的字体都是相同的,并且它是某种基于 ASCII 的编码,并通过常量进行转换:将 'U' - '8' 添加到提取的 8QLYHUVLWDWGH/OHLGD 的每个字符中,结果是 Universitat de Lleida。只要文本仅使用 ASCII 字符,向从文档其他位置提取的文本中的字符添加相同的常量也会产生正确的文本。

这种简单方法无法正确映射 ASCII 范围之外的字符,但它们似乎也总是被提取为相同的错误字符,例如字形“ó”始终被提取为“y”。

因此,您可以从该(以及类似创建的)文档中提取文本,方法是首先使用标准算法提取文本,然后在乱码部分(可能可以通过字体名称识别)中通过添加 'U' - '8' 来替换每个字符(对于较小的值),并根据某些映射进行替换以获取较高的值。

正如您在问题中提到的 Java 一样,我通过 iText 和 PDFBox 文本提取运行了您的文档,无论是否按 'U' - '8' 移动,结果看起来很有希望。我认为其他通用 Java PDF 库也可以工作。

另一种解决方法

您可以尝试通过向有问题的字体添加 ToUnicode 映射条目来修复有问题的 PDF,而不是创建自定义提取例程。之后,正常的文本提取程序应该能够正确提取内容。

关于java - 使用java从pdf文件中提取文本时遇到的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21279548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com