如何使用Python将多页PDF合并为单个可复制文本的PDF?
合并多个文本可复制PDF的Python脚本
要实现保留文本可复制性的PDF合并,推荐使用PyPDF2库——它直接操作PDF的页面结构,不会将内容转成图片,完美适配AI读取的需求。
步骤1:安装依赖库
执行以下命令安装最新版PyPDF2:
pip install PyPDF2
步骤2:合并脚本
以下脚本支持批量合并指定目录下的PDF,或手动指定PDF列表:
from PyPDF2 import PdfMerger import os def merge_pdfs(input_pdf_paths, output_path): # 初始化PDF合并器 merger = PdfMerger() for pdf_path in input_pdf_paths: try: # 添加PDF文件到合并器 merger.append(pdf_path) print(f"已添加文件: {pdf_path}") except Exception as e: print(f"处理文件 {pdf_path} 时出错: {str(e)}") # 写入合并后的PDF with open(output_path, 'wb') as output_file: merger.write(output_file) merger.close() print(f"合并完成,输出文件: {output_path}") # 示例用法 if __name__ == "__main__": # 方式1:手动指定要合并的PDF路径列表(按顺序排列) # pdf_list = ["file1.pdf", "file2.pdf", "file3.pdf"] # 方式2:合并指定目录下的所有PDF(按文件名排序) target_dir = "./pdfs_to_merge" pdf_list = [os.path.join(target_dir, f) for f in os.listdir(target_dir) if f.endswith('.pdf')] pdf_list.sort() # 按文件名排序,保证合并顺序 output_file = "merged_output.pdf" merge_pdfs(pdf_list, output_file)
关键注意事项
- 确保输入的PDF是文本型PDF:如果输入的是扫描生成的图片型PDF,合并后依然是图片格式,无法复制文本——这种情况需要先做OCR识别,不属于本脚本的处理范围。
- 处理加密PDF:如果遇到加密的PDF,需要先在
append前添加解密逻辑:from PyPDF2 import PdfReader reader = PdfReader(pdf_path) if reader.is_encrypted: # 如果有密码,替换为实际密码;无密码则传空字符串 reader.decrypt("your_password") merger.append(reader) else: merger.append(pdf_path) - 避免使用旧版本
PyPDF2:1.x版本的PdfFileMerger已被弃用,必须使用2.x及以上版本的PdfMerger。
常见失败原因排查
- 路径错误:检查输入PDF的路径是否正确,避免相对路径混乱,建议使用绝对路径。
- PDF文件损坏:尝试用PDF阅读器打开输入文件,确认文件可正常读取。
- 依赖库版本问题:卸载旧版本后重新安装最新版:
pip uninstall PyPDF2 && pip install PyPDF2
内容的提问来源于stack exchange,提问作者Benedikt Wörner
相关产品推荐
相关产品推荐

