PyPDF2 PDF拆分代码调试遇弃用错误求助
解决PyPDF2 3.0.0+的DeprecationError问题
你的报错是因为PyPDF2 3.0.0彻底移除了旧版本的getNumPages()和getPage()方法,你只修改了第37行,但代码里还有其他几处使用这些废弃API的位置,必须全部替换:
需要修改的核心位置:
- 第37行:
while i in range(pdf.getNumPages())→while i in range(len(pdf.pages)) - 第41、45行:
pdf.getPage(i)→pdf.pages[i] - 最后一行打印语句:
str(pdf.getNumPages())→str(len(pdf.pages)) - 额外注意:
addPage()已被重命名为add_page(),虽然部分版本兼容旧写法,但推荐使用新命名保持API一致性
修改后的完整代码:
# PDF Certificate Splitting # Import packages import re import time import os from PyPDF2 import PdfReader, PdfFileWriter from progressbar import ProgressBar import fitz import parameters import sys # Create paths input_dir = parameters.inputs_foldername+'\Certificates' try: os.mkdir(input_dir) except: pass output_dir = 'Outputs_'+parameters.batch_name+'\Split Certificates' ### Set up output folder isExist = os.path.exists(output_dir) if not isExist: os.makedirs(output_dir) # Get paths count = 0 for path in os.listdir(input_dir): full_path = os.path.join(input_dir, path) pdf = PdfReader(full_path) t0 = time.time() i = 0 new = True with fitz.open(full_path) as doc: while i in range(len(pdf.pages)): text = doc[i].get_text() if ("Page 1 of" in text) and (new == True): pdf_writer = PdfFileWriter() pdf_writer.add_page(pdf.pages[i]) tmp = re.search(r"(?<=\* \* \*\n)\d{7}", text) parid = tmp.group() i+=1 new = False elif ("Page 1 of" not in text) and (new == False): pdf_writer.add_page(pdf.pages[i]) i+=1 new = False elif ("Page 1 of" in text) and (new == False): with open(output_dir+'/'+str(parid)+'.pdf', "wb") as out: pdf_writer.write(out) new = True else: raise ValueError("'Page 1 of' not found and 'new == True' at page "+str(i)) with open(output_dir+'/'+str(parid)+'.pdf', "wb") as out: pdf_writer.write(out) t1 = time.time() # Print timing print(str(len(pdf.pages))+" pages processed in " + str(int(t1-t0)) + " seconds.")
关键API变化说明:
PyPDF2 3.0.0重构了页面访问逻辑,PdfReader的pages属性变为一个包含所有页面的列表:
- 总页数通过
len(pdf.pages)获取 - 单页通过列表索引
pdf.pages[i]直接访问 - 页面添加方法统一为
add_page()替代旧版addPage()
内容的提问来源于stack exchange,提问作者Avery Delancy
相关产品推荐
相关产品推荐

