代码之家  ›  专栏  ›  技术社区  ›  Ooker

是否可以在PDF中使用regex进行索引搜索?

  •  0
  • Ooker  · 技术社区  · 4 年前

    ^([0-9IVX]\.)*.*\R
    

    并报告他们所在的页码。输出如下:

    1. Heading/page number
    1.1 Subheading/page number
    1.1.1. Subsubheading/page number
    

    这可以用PDF格式吗?我想那需要鬼脚本,但是搜索 How to Use Ghostscript 第页,共页 regex 我什么也没找到。

    0 回复  |  直到 4 年前
        1
  •  1
  •   halfer Rahul Baradia    4 年前

    我想不出你为什么要让Ghostscript帮你搜索。

    如果是前者,那么第一个问题是,一般来说,PDF文件没有 您要查找的结构信息的类型。在大多数PDF文件中,没有任何内容表明“这是一个标题”、“这是一个页码”等。

    因为大多数PDF文件没有这些信息,所以你不能依赖它,除非你很高兴知道你的PDF文件是在哪里生成的,并且它们包含了这种信息。在这种情况下,有很多工具可以为您提取它,或者使您能够编写代码来执行此操作。

    只搜索文本的问题是,首先文本不需要作为连续流写入。因此,如果您要查找的是“1.1”,可能会写为:

    (1.1) Tj
    
    (1) Tj
    (.) Tj
    (1) Tj
    
    [(1) -0.1 (.) 0.1 (1)] TJ
    

    一些 PDF文件带有一个ToUnicode CMap,它将字符代码映射到Unicode代码点,但并非所有文件都这样。有些字体可能使用标准(即PDF标准)编码,在这种情况下,可以推断Unicode代码点。有些编码可能包含字形名称,从中可以推断出Unicode码位。

    最好的办法可能是编写代码来提取文本,而Ghostscript就可以做到这一点。它甚至通过上面列出的回退的层次结构来尝试找到Unicode代码点。如果其他方法都失败了,它只需要使用字符代码,并希望这足够好。

    如果使用Ghostscript的txtwrite设备,它将生成一个伪造的文本页面(默认),该页面试图尽可能模拟原始PDF文件中的文本布局,包括合并PDF文件中不连续但页面上彼此相邻的文本位。或者一个类似XML的输出,它将告诉您遇到了哪些Unicode代码点或字符代码,以及它们在原始页面上的位置。如果您不喜欢txtwrite试图找出哪一个文本与什么相匹配,那么您可以使用它来编写自己的文本。

    我怀疑这个文本页面对你来说已经足够好了。您可以让txtwrite设备在每页生成一个文件,这样就可以从文件名中获取页码。然后,您可以编写自己的正则表达式来搜索文件并找到匹配项。