使用Python PyPDF2合并PDF并设置新文件名报错求助
问题解决:合并PDF并指定原PDF名称为输出文件名
报错原因
你的代码存在两个核心问题:
- 读写冲突:在循环中每添加一个PDF就执行
merger.write(path_with_file),这会尝试写入当前正在被读取的PDF文件,导致文件流混乱,触发invalid literal for int() with base 10: b''错误。 - 逻辑错误:合并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
相关产品推荐
相关产品推荐

