如何使用poppler提取pdf索引/目录?

如何使用poppler提取pdf索引/目录?,pdf,indexing,poppler,Pdf,Indexing,Poppler,我看到像okular和Evence这样的pdf查看器能够很好地显示pdf文档(书籍)的索引,并提供指向每个段落的链接。 他们怎么能这样做呢?他们使用poppler库,我如何用poppler提取索引,或者一般来说?它只是在第一级停止(递归需要更深入) 下面是如何在Python中使用poppler执行此操作的演示: import poppler def walk_index(iterp, doc): while iterp.next(): link=iterp.get_acti

我看到像okular和Evence这样的pdf查看器能够很好地显示pdf文档(书籍)的索引,并提供指向每个段落的链接。
他们怎么能这样做呢?他们使用poppler库,我如何用poppler提取索引,或者一般来说?

它只是在第一级停止(递归需要更深入)


下面是如何在Python中使用poppler执行此操作的演示:

import poppler

def walk_index(iterp, doc):
    while iterp.next():
      link=iterp.get_action()
      s = doc.find_dest(link.dest.named_dest)
      print link.title,' ', doc.get_page(s.page_num).get_label()
      child = iterp.get_child()
      if child:
        walk_index(child, doc)

def main():
    uri = ("file:///"+path_to_pdf)
    doc = poppler.document_new_from_file(uri, None)

    iterp = poppler.IndexIter(doc)
    link = iterp.get_action()
    s = doc.find_dest(link.dest.named_dest)
    print link.title,' ', doc.get_page(s.page_num).get_label()
    walk_index(iterp, doc)
    return 0


if __name__ == '__main__':
    main()
python
poppler
库已经过时,下面介绍如何使用Gobject:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# walk to table of contents and print titles and pages

import sys
from gi.repository import Poppler

def walk_index(iterp, doc):
    while iterp.next():
        link=iterp.get_action()
        dest=doc.find_dest(link.goto_dest.dest.named_dest)
        s = doc.get_page(dest.page_num-1)
        print link.goto_dest.title, dest.page_num, s.get_label()
        child = iterp.get_child()
        if child:
            walk_index(child, doc)

def main():
    uri = ("file:///"+sys.argv[1])
    doc = Poppler.Document.new_from_file(uri, None)
    iterp = Poppler.IndexIter.new(doc)
    link = iterp.get_action()
    dest=doc.find_dest(link.goto_dest.dest.named_dest)
    s = doc.get_page(dest.page_num-1)
    print link.goto_dest.title, dest.page_num, s.get_label()
    walk_index(iterp, doc)
    return 0


if __name__ == '__main__':
    main()
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# walk to table of contents and print titles and pages

import sys
from gi.repository import Poppler

def walk_index(iterp, doc):
    while iterp.next():
        link=iterp.get_action()
        dest=doc.find_dest(link.goto_dest.dest.named_dest)
        s = doc.get_page(dest.page_num-1)
        print link.goto_dest.title, dest.page_num, s.get_label()
        child = iterp.get_child()
        if child:
            walk_index(child, doc)

def main():
    uri = ("file:///"+sys.argv[1])
    doc = Poppler.Document.new_from_file(uri, None)
    iterp = Poppler.IndexIter.new(doc)
    link = iterp.get_action()
    dest=doc.find_dest(link.goto_dest.dest.named_dest)
    s = doc.get_page(dest.page_num-1)
    print link.goto_dest.title, dest.page_num, s.get_label()
    walk_index(iterp, doc)
    return 0


if __name__ == '__main__':
    main()