如何使用 PyPDF2 在 Python 3 中将 PDF 中的所有页面作为单个字符串检索

Gav*_*vrk 5 python pdf pypdf python-3.x pdf-extraction

为了从多页 PDF 中获取单个字符串,我这样做:

import PyPDF2
pdfFileObject = open('sample.pdf', 'rb')
pdfReader = PyPDF2.PdfFileReader(pdfFileObject)
count = pdfReader.numPages
for i in range(count):
    page = pdfReader.getPage(i)
    output = page.extractText()
output
Run Code Online (Sandbox Code Playgroud)

结果是来自单个页面(文档中的最后一页)的字符串 - 正如PyPDF2 文档中应有的那样。我应用这种方法是因为我读过一些人建议它阅读整个 PDF,但这对我来说不起作用。

显然,这是一个基本操作,对于我缺乏经验,我提前表示歉意。我尝试了其他解决方案,如 Tika、PDFMiner 和 Textract,但 PyPDF 似乎是迄今为止唯一让我满意的解决方案。

任何帮助,将不胜感激。

更新:

按照建议,我将 an 定义output为一个列表,然后将所有页面附加到它(正如我所想的)循环中,如下所示:

for i in range(count):
    page = pdfReader.getPage(i)
    output = []
    output.append(page.extractText())
Run Code Online (Sandbox Code Playgroud)

结果是列表中的单个字符串,例如['sample content from the last page of PDF']

Tha*_*r A 6

难道是因为这一行:

output = page.extractText()
Run Code Online (Sandbox Code Playgroud)

试试这个:

output += page.extractText()
Run Code Online (Sandbox Code Playgroud)

因为在您的代码中,您将覆盖“输出”变量的值,而不是附加到它。不要忘记在 for 循环之前声明“输出”变量。所以output = ''之前for i in range(count):

  • 谢谢你!显然,是的。`TypeError: can't concat str to bytes` 这是我收到的错误。据我了解,这是因为我将“rb”作为“open”的参数。但是“PdfFileReader 流/文件对象不是二进制模式”是否可以选择以其他方式将字节转换为字符串? (2认同)
  • 你想做什么?要将输出写入文本文件: with open('sample.txt', 'w') as f: f.writelines(output) 不要忘记在 for 循环之前声明“output”变量。因此,在 for i in range(count) 之前输出 = '': (2认同)