无法从具有客户加密字体的pdf中提取文本,后者可以通过Adobe中的File -> ->字体识别。其中一种字体被提及为,C0EX02Q0_22类型:类型3编码:自定义实际字体: C0EX02Q0_22实际字体类型:类型3
让我知道是否有任何方法来提取这些pdf文件的文本内容。目前,我正在使用的PDFText2HTML从pdf util。在提取这样的pdf文件时,获取类似于‘extracting @ files’之类的值。
样本pdf:tesis completa.pdf
在这个pdf中,您可以看到使用自定义编码(例如: T3Font_1 )的字体(请参考Adobe中的文件->属性->字体),因为我无法上传我的pdf更新后的示例,其中有同样的问题。
发布于 2014-01-22 14:55:50
标准中描述的提取
PDF规范ISO 32000-1在第9.10节中描述了如何提取文本内容,如果PDF提供了所需的信息,并且这样做是正确的。
然而,使用此算法只在文档的几个页面范围内工作(即摘要、内容列表、感谢部分和Publicación 7节),但在其他范围内则会产生胡言乱语,例如8QLYHUVLWDWGH/OHLGD而不是Universitat de Lleida。查看问题中的PDF对象,可以清楚地发现所需的信息缺失(没有ToUnicode地图,虽然编码基于,但使用中的所有位置都通过Difference映射到非标准名称)。
另外,尝试使用Adobe中的复制和粘贴来提取文本,也会返回这种胡言乱语。这通常表明泛型提取是不可能的。
周旋
但是,检查PDF对象和泛型文本提取尝试的输出,会产生这样的想法,即对于所有使用的字体,提取的文本的实际编码都是相同的,并且是一些基于ASCII的编码被一个常量移位:将'U' - '8'添加到提取的8QLYHUVLWDWGH/OHLGD的每个字符中就会导致Universitat de Lleida。在文档其他地方提取的文本中添加相同的常量也会导致正确的文本,只要文本只使用ASCII字符。
ASCII范围以外的字符不能通过该简单方法正确地映射,但它们似乎也总是被提取为相同的错误字符,例如字形'ó‘总是被提取为'y’。
因此,您可以从该文档(以及类似地创建的)文档中提取文本,方法是首先使用标准算法提取文本,然后在乱七八糟的部分(可能可以通过字体名称识别)替换每个字符,为小值添加'U' - '8',并根据某些映射替换较高的值。
正如您在问题中提到的那样,我已经通过iText和PDFBox文本提取来运行您的文档,不管'U' - '8'是否移位,结果看起来都很有希望。我想其他通用的Java库也能工作。
另一个工作-
与创建自定义提取例程不同,您可以尝试通过将ToUnicode映射项添加到所讨论的字体中来修复所讨论的PDF。之后,正常的文本提取程序应该能够正确地提取内容。
https://stackoverflow.com/questions/21279548
复制相似问题