解析 pdf 中的注释

新手上路,请多包涵

我想要一个 python 函数,它接受一个 pdf 并返回文档中注释注释的文本列表。我看过 python-poppler ( https://code.launchpad.net/~poppler-python/poppler-python/trunk ),但我不知道如何让它给我任何有用的东西。

我找到了 get_annot_mapping 方法并修改了提供的演示程序以通过 self.current_page.get_annot_mapping() 调用它,但我不知道如何处理 AnnotMapping 对象。好像没有完全实现,只提供copy方法。

如果有任何其他库提供此功能,那也很好。

原文由 davidb 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 619
2 个回答

以防万一有人正在寻找一些工作代码。这是我使用的脚本。

 import poppler
import sys
import urllib
import os

def main():
  input_filename = sys.argv[1]
    # http://blog.hartwork.org/?p=612
  document = poppler.document_new_from_file('file://%s' % \
    urllib.pathname2url(os.path.abspath(input_filename)), None)
  n_pages = document.get_n_pages()
  all_annots = 0

  for i in range(n_pages):
        page = document.get_page(i)
        annot_mappings = page.get_annot_mapping ()
        num_annots = len(annot_mappings)
        if num_annots > 0:
            for annot_mapping in annot_mappings:
                if  annot_mapping.annot.get_annot_type().value_name != 'POPPLER_ANNOT_LINK':
                    all_annots += 1
                    print('page: {0:3}, {1:10}, type: {2:10}, content: {3}'.format(i+1, annot_mapping.annot.get_modified(), annot_mapping.annot.get_annot_type().value_nick, annot_mapping.annot.get_contents()))

  if all_annots > 0:
    print(str(all_annots) + " annotation(s) found")
  else:
    print("no annotations found")

if __name__ == "__main__":
    main()

原文由 Enno Gröper 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题