【问题标题】:PyPDF2 ignores content, gets watermark onlyPyPDF2 忽略内容,仅获取水印
【发布时间】:2018-11-24 07:09:04
【问题描述】:

我有数千个 PDF 文件,例如 this one

我正在尝试使用 PyPDF2 将它们转换为纯文本(代码如下)。但 PyPDF2 显然只“看到”水印,而不是内容本身。我可以在这里做什么?

import os
import PyPDF2

path_to_pdfs = '/path/to/pdf/files/'
for filename in os.listdir(path_to_pdfs):
    if '.pdf' in filename.lower():
        with open(path_to_pdfs + filename, mode = 'rb') as f:
            txt = ''
            pdf_reader = PyPDF2.PdfFileReader(f)
            num_pages = pdf_reader.numPages
            for page in range(num_pages):
                page_obj = pdf_reader.getPage(page)
                page_text = page_obj.extractText()
                txt = txt + '\n' + page_text
            print(txt)

我在 macOS 10.13.14 上使用 Python 3.5.1 和 PyPDF2 1.26.0。

【问题讨论】:

    标签: python pypdf2


    【解决方案1】:

    PyPDF2 适用于普通 PDF 文件。但我建议你使用pdfminer。您可以使用pip install pdfminer.six 安装它 并遵循以下命令:

    from pdfminer import high_level # High level text extraction
    
    local_pdf_filename = "path/to/your/pdf/file.pdf"
    pages = [0] # Page which you wanna extract
    
    extracted_text = high_level.extract_text(local_pdf_filename, "", pages)
    print(extracted_text)
    input('\n\nExtraction Complete')
    

    【讨论】:

      【解决方案2】:

      有时pdfminer3k 会提供更好的结果。请查看“How to read pdf file using pdfminer3k?

      我测试了以下代码并提取了文本。但是,提取不是 100% 准确的......

      # Open the example file
      fp = open('Decisao_10166720039201098.pdf', 'rb')
      
      from pdfminer.pdfparser import PDFParser, PDFDocument
      from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
      from pdfminer.converter import PDFPageAggregator
      from pdfminer.layout import LAParams, LTTextBox, LTTextLine
      
      parser = PDFParser(fp)
      doc = PDFDocument()
      parser.set_document(doc)
      doc.set_parser(parser)
      doc.initialize('')
      rsrcmgr = PDFResourceManager()
      laparams = LAParams()
      laparams.char_margin = 1.0
      laparams.word_margin = 1.0
      device = PDFPageAggregator(rsrcmgr, laparams=laparams)
      interpreter = PDFPageInterpreter(rsrcmgr, device)
      extracted_text = ''
      
      for page in doc.get_pages():
          interpreter.process_page(page)
          layout = device.get_result()
          for lt_obj in layout:
              if isinstance(lt_obj, LTTextBox) or isinstance(lt_obj, LTTextLine):
                  extracted_text += lt_obj.get_text()
      
      print(extracted_text)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-08
        • 2011-03-21
        相关资源
        最近更新 更多