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

使用Python PyPDF2合并PDF并设置新文件名报错求助

问题解决:合并PDF并指定原PDF名称为输出文件名

报错原因

你的代码存在两个核心问题:

  1. 读写冲突:在循环中每添加一个PDF就执行merger.write(path_with_file),这会尝试写入当前正在被读取的PDF文件,导致文件流混乱,触发invalid literal for int() with base 10: b''错误。
  2. 逻辑错误:合并PDF的正确流程是先将所有需要合并的文件全部添加到合并器,最后一次性写入目标文件,而非边加边写。

需求实现方案

要将合并后的文件命名为某一原PDF的名称,你可以二选一:

  • 自动选取目录中的第一个PDF文件名称作为输出文件名
  • 手动指定某一个具体的PDF文件名(比如"指定目标文件.pdf")

修正后的代码

import os
from PyPDF2 import PdfFileMerger

# 目标文件夹路径
folder_path = r'C:\Desktop\Work'
# 筛选出文件夹中所有PDF文件
pdf_files = [f for f in os.listdir(folder_path) if f.endswith(".pdf")]

if not pdf_files:
    print("目录中没有PDF文件")
    exit()

# 方案1:用第一个PDF的名称作为输出文件名
target_filename = pdf_files[0]
# 方案2:手动指定输出文件名,取消下面注释即可
# target_filename = "你想要的文件名.pdf"

target_path = os.path.join(folder_path, target_filename)

# 初始化PDF合并器
merger = PdfFileMerger(strict=False)

# 批量添加所有PDF到合并器
for pdf in pdf_files:
    file_path = os.path.join(folder_path, pdf)
    print(f"正在添加文件: {file_path}")
    merger.append(file_path, import_bookmarks=False)

# 写入合并后的文件并关闭合并器
merger.write(target_path)
merger.close()

print(f"合并完成,输出文件路径: {target_path}")

注意事项

  • 如果指定的目标文件名已存在,代码会直接覆盖原文件;若要避免覆盖,可以在写入前判断文件是否存在,或者给文件名加前缀/后缀(比如target_filename = f"合并版_{pdf_files[0]}")。
  • 确保PyPDF2是最新版本,旧版本可能存在兼容性问题,可执行pip install --upgrade PyPDF2更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:54:16