You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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)

排查与修复步骤

  1. 确认循环数据源的正确性
    先检查循环中打印的Last Name和First Name是否对应不同的文件。如果打印结果重复,说明df_dict中存在重复条目,需要先清理数据源。

  2. 改用逐个添加页面的方式
    部分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)
  1. 检查文件路径的正确性
    原代码用字符串拼接路径容易出错(比如路径末尾是否有\),使用os.path.join可以确保路径格式正确,避免因路径错误导致重复读取同一个文件。

额外提示

  • 如果仍有问题,可以在循环中添加文件存在性检查,避免读取不存在的文件:
    if not os.path.exists(file_path):
        print(f"文件不存在:{file_path}")
        continue
    

内容的提问来源于stack exchange,提问作者muraaby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 22:34:52