【问题标题】:Extracting entire pdf data with python pdfminer使用 python pdfminer 提取整个 pdf 数据
【发布时间】:2013-06-04 21:17:31
【问题描述】:

我正在使用 pdfminer 使用 python 从 pdf 文件中提取数据。我想提取 pdf 中存在的所有数据,无论它是图像、文本还是其他任何数据。我们可以在一行中做到这一点(如果需要,可以两行,无需太多工作)。任何帮助表示赞赏。提前致谢

【问题讨论】:

    标签: python pdf-reader


    【解决方案1】:

    我们可以在一行中做到这一点吗(如果需要,可以两行,无需太多工作)。

    不,你不能。 Pdfminer 功能强大,但级别较低。

    不幸的是,文档并不完全详尽。多亏了 Denis Papathanasiou 的一些代码,我才能找到解决方法。代码在his blog讨论,你可以在这里找到源代码:layout_scanner.py

    另请参阅this answer,,我会提供更多详细信息。

    【讨论】:

    • 感谢您的快速回复。我正在努力从 pdf 中提取 html,以便将其转换为 epub。我可以获取 html,但是 pdf 中的图像丢失了,你能建议一种方法来提取它们并将它们保存在一个文件夹中(如果需要)
    • 还要检查命令行工具pdf2txt.py 的文档,它带有 PDFMiner——它说它可以提取嵌入的 jpg 图像(但只有 jpg;Dennis 的代码处理多种类型)。
    【解决方案2】:

    对于 Python 3:

    pip install pdfminer.six

    from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
    from pdfminer.converter import TextConverter
    from pdfminer.layout import LAParams
    from pdfminer.pdfpage import PDFPage
    from io import StringIO
    
    def convert_pdf_to_txt(path, codec='utf-8'):
        rsrcmgr = PDFResourceManager()
        retstr = StringIO()
        laparams = LAParams()
        device = TextConverter(rsrcmgr, retstr, codec=codec, laparams=laparams)
        fp = open(path, 'rb')
        interpreter = PDFPageInterpreter(rsrcmgr, device)
        password = ""
        maxpages = 0
        caching = True
        pagenos=set()
    
        for page in PDFPage.get_pages(fp, pagenos, maxpages=maxpages, password=password,caching=caching, check_extractable=True):
            interpreter.process_page(page)
    
        text = retstr.getvalue()
    
        fp.close()
        device.close()
        retstr.close()
        return text
    

    【讨论】:

      【解决方案3】:

      对于python3,还有一个:pip install pdfminer3k

      from pdfminer.pdfinterp import PDFResourceManager, process_pdf
      from pdfminer.converter import TextConverter
      from pdfminer.layout import LAParams
      from io import StringIO
      import time
      from functools import wraps
      
      def fn_timer(function)://this is for calculating the run time(function)
          @wraps(function)
          def function_timer(*args, **kwargs):
              t0 = time.time()
              result = function(*args, **kwargs)
              t1 = time.time()
              print ("Total time running %s: %s seconds" %
                      ('test', str(t1-t0))
                      )
              return result
          return function_timer
      
      @fn_timer
      def convert_pdf(path, pages):
          rsrcmgr = PDFResourceManager()
          retstr = StringIO()
          laparams = LAParams()
          device = TextConverter(rsrcmgr, retstr, laparams=laparams)
      
          fp = open(path, 'rb')
          process_pdf(rsrcmgr, device, fp,pages)
          fp.close()
          device.close()
      
          str = retstr.getvalue()
          retstr.close()
          return str
      
      file = r'M:\a.pdf'
      
      print(convert_pdf(file,[1,]))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-17
        • 1970-01-01
        • 2021-10-05
        • 2014-10-06
        • 1970-01-01
        • 1970-01-01
        • 2012-09-18
        • 1970-01-01
        相关资源
        最近更新 更多