1
1
我想不出你为什么要让Ghostscript帮你搜索。
如果是前者,那么第一个问题是,一般来说,PDF文件没有 有 您要查找的结构信息的类型。在大多数PDF文件中,没有任何内容表明“这是一个标题”、“这是一个页码”等。
因为大多数PDF文件没有这些信息,所以你不能依赖它,除非你很高兴知道你的PDF文件是在哪里生成的,并且它们包含了这种信息。在这种情况下,有很多工具可以为您提取它,或者使您能够编写代码来执行此操作。 只搜索文本的问题是,首先文本不需要作为连续流写入。因此,如果您要查找的是“1.1”,可能会写为:
一些 PDF文件带有一个ToUnicode CMap,它将字符代码映射到Unicode代码点,但并非所有文件都这样。有些字体可能使用标准(即PDF标准)编码,在这种情况下,可以推断Unicode代码点。有些编码可能包含字形名称,从中可以推断出Unicode码位。
最好的办法可能是编写代码来提取文本,而Ghostscript就可以做到这一点。它甚至通过上面列出的回退的层次结构来尝试找到Unicode代码点。如果其他方法都失败了,它只需要使用字符代码,并希望这足够好。 如果使用Ghostscript的txtwrite设备,它将生成一个伪造的文本页面(默认),该页面试图尽可能模拟原始PDF文件中的文本布局,包括合并PDF文件中不连续但页面上彼此相邻的文本位。或者一个类似XML的输出,它将告诉您遇到了哪些Unicode代码点或字符代码,以及它们在原始页面上的位置。如果您不喜欢txtwrite试图找出哪一个文本与什么相匹配,那么您可以使用它来编写自己的文本。 我怀疑这个文本页面对你来说已经足够好了。您可以让txtwrite设备在每页生成一个文件,这样就可以从文件名中获取页码。然后,您可以编写自己的正则表达式来搜索文件并找到匹配项。 |