2

为了从多页 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

结果是来自单个页面(文档中的最后一页)的字符串 - 就像根据PyPDF2 文档一样。我应用这种方法是因为我读过一些人建议它阅读整个 PDF,这在我的情况下不起作用。

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

任何帮助,将不胜感激。

更新:

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

for i in range(count):
    page = pdfReader.getPage(i)
    output = []
    output.append(page.extractText())

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

4

4 回答 4

3

可能是因为这条线:

output = page.extractText()

试试这个:

output += page.extractText()

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

于 2020-02-13T01:14:51.067 回答
2

output每次都在覆盖变量。

虽然您可以使用 将字节连接在一起output +=,但使用列表可能更安全,在这种情况下,您将output = []在循环之外定义,并替换output = page.extractText()output.append(page.extractTest()).

于 2020-02-13T20:44:36.010 回答
2

此代码有效:

import os, glob, PyPDF2, sys

file_path = 'C:/Users/ipeter/Desktop/Webdriverdownloads'
read_files = glob.glob(os.path.join(file_path,'*.pdf'))

for files in read_files:
    pdfReader = PyPDF2.PdfFileReader(files)
    count = pdfReader.numPages
    output = []
    for i in range(count):
        page = pdfReader.getPage(i)
        output.append(page.extractText())
    print(output)

第一个循环读取文件夹中的所有文件。第二个循环读取 pdf 中的所有页面。

output[0] = pdfpage1
output[1] = pdfpage2
output[2] = pdfpage3

... ETC

如果您需要一个字符串中的整个 pdf,您可以保存newoutput使用 join 函数:

seperator = ','
newoutput = seperator.join(output)

或简化:

newoutput = ','.join(output)
于 2020-02-14T02:57:14.330 回答
0

尝试首先将输出创建为空字符串..

output = ""
for i in range(pdfReader.numPages):
    pageObj = pdfReader.getPage(i)
    output += pageObj.extractText()
于 2021-09-10T08:30:07.713 回答