【问题标题】:How to read line by line in pdf file using PyPdf?如何使用 PyPdf 在 pdf 文件中逐行读取?
【发布时间】:2010-03-20 04:39:04
【问题描述】:

我有一些代码可以从 pdf 文件中读取。有没有办法在 Windows 上使用 Pypdf、Python 2.6 从 pdf 文件(不是页面)中逐行读取?

这里是阅读pdf页面的代码:

import pyPdf

def getPDFContent(path):
    content = ""
    num_pages = 10
    p = file(path, "rb")
    pdf = pyPdf.PdfFileReader(p)
    for i in range(0, num_pages):
        content += pdf.getPage(i).extractText() + "\n"
    content = " ".join(content.replace(u"\xa0", " ").strip().split())
    return content

更新:

调用代码是这样的:

f= open('test.txt','w')
pdfl = getPDFContent("test.pdf").encode("ascii", "ignore")
f.write(pdfl)
f.close()

【问题讨论】:

    标签: python pdf pypdf


    【解决方案1】:

    看起来您拥有的是要逐行解释的大量文本数据。

    您可以使用 StringIO 类将该内容包装为可查找的类似文件的对象:

    >>> import StringIO
    >>> content = 'big\nugly\ncontents\nof\nmultiple\npdf files'
    >>> buf = StringIO.StringIO(content)
    >>> buf.readline()
    'big\n'
    >>> buf.readline()
    'ugly\n'
    >>> buf.readline()
    'contents\n'
    >>> buf.readline()
    'of\n'
    >>> buf.readline()
    'multiple\n'
    >>> buf.readline()
    'pdf files'
    >>> buf.seek(0)
    >>> buf.readline()
    'big\n'
    

    在你的情况下,做:

    from StringIO import StringIO
    
    # Read each line of the PDF
    pdfContent = StringIO(getPDFContent("test.pdf").encode("ascii", "ignore"))
    for line in pdfContent:
        doSomething(line.strip())
    

    【讨论】:

    • 同样的问题,这行不通,它给了我整个页面,我只想一行一行:)
    【解决方案2】:
    import pyPdf  
    def getPDFContent(path):
        content = ""
        num_pages = 10
        p = file(path, "rb")
        pdf = pyPdf.PdfFileReader(p)
        for i in range(0, num_pages):
            content += pdf.getPage(i).extractText() + "\n"
        content = " ".join(content.replace(u"\xa0", " ").strip().split())     
        return content 
    

    【讨论】:

      【解决方案3】:

      使用yieldPdfFileReader.pages 可以简化事情,

      from pyPdf import PdfFileReader
      
      def get_pdf_content_lines(pdf_file_path):
          with open(pdf_file_path) as f:
              pdf_reader = PdfFileReader(f)
              for page in pdf_reader.pages: 
                  for line in page.extractText().splitlines():
                      yield line
      
      for line in get_pdf_content_lines('/path/to/file.pdf'):
          print line
      

      另外,有些人可能会在谷歌上搜索 “python 获取 pdf 内容文本”,方法如下:(这就是我到达这里的方式)

      from pyPdf import PdfFileReader
      
      def get_pdf_content(pdf_file_path):
          with open(pdf_file_path) as f:
              pdf_reader = PdfFileReader(f)
              content = "\n".join(page.extractText().strip() for page in pdf_reader.pages)
              content = ' '.join(content.split())
              return content
      
      
      print get_pdf_content('/path/to/file.pdf')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-02
        • 2015-12-14
        • 2014-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多