使用PyPDF2合并多份PDF时出现单个PDF重复的问题求助
解决PyPDF2合并PDF时重复添加最后一份文档的问题
尝试遍历多份独立的1095文档,将它们合并为单个PDF文件,文档命名格式为「姓氏, 名字.pdf」。执行代码后生成的PDF中仅最后一份被添加的PDF重复了X次(X为待合并PDF的总数),尝试用merge替代append也未解决。
原代码:
writer = PdfWriter() for row in df_dict: print(row['Last Name'], row['First Name']) reader = PdfReader(path5 + '\\' + row['Last Name'] + ', ' + row['First Name'] + '.pdf') writer.append(reader) with open(path5 + '\\2021_1095.pdf', "wb") as output_stream: writer.write(output_stream)
排查与修复步骤
确认循环数据源的正确性
先检查循环中打印的Last Name和First Name是否对应不同的文件。如果打印结果重复,说明df_dict中存在重复条目,需要先清理数据源。改用逐个添加页面的方式
部分PyPDF2版本中,append(reader)方法可能存在引用复用的问题,导致重复添加最后一个PDF的内容。改用遍历页面并逐个添加的方式可以避免这个问题:
修正后的代码:
import os from PyPDF2 import PdfWriter, PdfReader writer = PdfWriter() for row in df_dict: last_name = row['Last Name'] first_name = row['First Name'] print(last_name, first_name) # 使用os.path.join处理路径,适配不同系统且避免拼接错误 file_path = os.path.join(path5, f"{last_name}, {first_name}.pdf") reader = PdfReader(file_path) # 遍历当前PDF的所有页面并添加到writer for page in reader.pages: writer.add_page(page) # 同样用os.path.join处理输出路径 with open(os.path.join(path5, "2021_1095.pdf"), "wb") as output_stream: writer.write(output_stream)
- 检查文件路径的正确性
原代码用字符串拼接路径容易出错(比如路径末尾是否有\),使用os.path.join可以确保路径格式正确,避免因路径错误导致重复读取同一个文件。
额外提示
- 如果仍有问题,可以在循环中添加文件存在性检查,避免读取不存在的文件:
if not os.path.exists(file_path): print(f"文件不存在:{file_path}") continue
内容的提问来源于stack exchange,提问作者muraaby
相关产品推荐
相关产品推荐

