使用PyPDF2合并PDF时出现页面重复与缺失问题求助
PyPDF2合并PDF出现重复/缺失页面的问题修复
问题根源
你代码里的pdfFileObj.close()被错误地放在了遍历单个PDF页面的循环内部——每读取一页就立刻关闭PDF文件,导致后续页面根本无法正常读取,只能反复添加该PDF的第一页,同时跳过了其余页面。这就是为什么总页数看似正确,但内容出现重复和缺失的原因。
修复后的代码
把关闭文件的语句移到页面遍历循环的外面,确保整个PDF的所有页面都读取完成后再关闭:
pdfFiles = [] for filename in os.listdir(self.source): if filename.endswith('.pdf'): pdfFiles.append(os.path.join(self.source,filename)) pdfFiles.sort(key = str.lower) pdfWriter = PyPDF2.PdfWriter() for filename in pdfFiles: pdfFileObj = open(filename,'rb') pdfReader = PyPDF2.PdfReader(pdfFileObj) for pageNum in range(len(pdfReader.pages)): pageObj = pdfReader.pages[pageNum] pdfWriter.add_page(pageObj) # 移到这里:所有页面读取完成后再关闭文件 pdfFileObj.close() fileout = CombineName pdfOutput = open(self.destination + fileout,'wb') pdfWriter.write(pdfOutput) pdfOutput.close()
更稳妥的写法(推荐)
用Python的with语句自动管理文件上下文,无需手动调用close(),从根源避免这类失误:
pdfFiles = [] for filename in os.listdir(self.source): if filename.endswith('.pdf'): pdfFiles.append(os.path.join(self.source,filename)) pdfFiles.sort(key = str.lower) pdfWriter = PyPDF2.PdfWriter() for filename in pdfFiles: # with语句会在代码块结束后自动关闭文件 with open(filename,'rb') as pdfFileObj: pdfReader = PyPDF2.PdfReader(pdfFileObj) for pageNum in range(len(pdfReader.pages)): pageObj = pdfReader.pages[pageNum] pdfWriter.add_page(pageObj) fileout = CombineName with open(self.destination + fileout,'wb') as pdfOutput: pdfWriter.write(pdfOutput)
内容的提问来源于stack exchange,提问作者Reach Miami
相关产品推荐
相关产品推荐

