【问题标题】:PDFPage does not exist in Python PDFMiner libraryPython PDFMiner 库中不存在 PDFPage
【发布时间】:2017-11-22 01:31:26
【问题描述】:

所以我为 python 3.6 安装了 pdfminer3k。我试图在打开 PDF 文件并将其转换为文本时遵循一些示例,它们都需要 PDFPage 导入。这对我来说不存在。有什么解决方法吗?我尝试从在线复制 PDFPage.py 并保存到 python 搜索 pdfminer 的目录,但我刚刚得到......“导入错误:无法导入名称 PDFObjectNotFound”。

谢谢!

【问题讨论】:

    标签: python importerror pdfminer pdfpage


    【解决方案1】:

    啊。我猜 PDFPage 不适用于 python 3.6。以下来自How to read pdf file using pdfminer3k? 的示例解决了我的问题!

    【讨论】:

      【解决方案2】:
      import io
      from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
      from pdfminer.converter import TextConverter
      from pdfminer.layout import LAParams
      from pdfminer.pdfparser import PDFParser, PDFDocument
      
      def extract_text_from_pdf(pdf_path):
          '''
          Iterator: extract the plain text from pdf-files with pdfminer3k
      
          pdf_path: path to pdf-file to be extracted
          return: iterator of string of extracted text (by page)
          '''
          # pdfminer.six-version can be found at:
          # https://www.blog.pythonlibrary.org/2018/05/03/exporting-data-from-pdfs-with-python/
          with open(pdf_path, 'rb') as fp:
              parser = PDFParser(fp)
              doc = PDFDocument()
              parser.set_document(doc)
              doc.set_parser(parser)
              doc.initialize('')
              for page in doc.get_pages(): # pdfminer.six: PDFPage.get_pages(fh, caching=True, check_extractable=True):
                  rsrcmgr = PDFResourceManager()
                  fake_file_handle = io.StringIO()
                  device = TextConverter(rsrcmgr, fake_file_handle, laparams=LAParams())
                  interpreter = PDFPageInterpreter(rsrcmgr, device)
                  interpreter.process_page(page)
      
                  text = fake_file_handle.getvalue()
                  yield text
      
                  # close open handles
                  device.close()
                  fake_file_handle.close()
      
      maxPages = 1
      for i, t in enumerate(extract_text_from_pdf(fPath)):
          if i<maxPages:
              print(f"Page {i}:\n{t}")
          else:
              print(f"Page {i} skipped!")
      

      【讨论】:

      • PDFPage 似乎适用于 pdfminer.six 而不是 pdfminer3k
      猜你喜欢
      • 2017-02-12
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      • 2020-01-20
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2011-08-09
      相关资源
      最近更新 更多