Python合并两个PDF文件

引言

在办公自动化场景中,合并多个PDF文件是常见需求。本文将介绍如何使用Python实现PDF合并功能,重点对比PyPDF2和pdfplumber两种实现方案,并提供完整可运行的代码示例。

方案一:使用PyPDF2库(推荐)

特性

  • 官方维护的成熟库
  • 支持PDF1.4到PDF2.0标准
  • 自动处理页面尺寸适配

安装方法

bash 复制代码
pip install pypdf2

完整代码示例

python 复制代码
from PyPDF2 import PdfFileMerger

def merge_pdfs(pdf_list, output_path):
    merger = PdfFileMerger()
    
    for pdf in pdf_list:
        try:
            with open(pdf, 'rb') as f:
                merger.append(f)
        except Exception as e:
            print(f"处理文件 {pdf} 时出错: {str(e)}")
    
    with open(output_path, 'wb') as outfile:
        merger.write(outfile)
    merger.close()

# 使用示例
merge_pdfs(['file1.pdf', 'file2.pdf'], 'merged.pdf')

方案二:使用pdfplumber库

特性

  • 支持更复杂的PDF解析
  • 可同时提取文本和表格数据
  • 适合需要预处理的场景

安装方法

bash 复制代码
pip install pdfplumber

完整代码示例

python 复制代码
import pdfplumber

def merge_pdfs_advanced(input_paths, output_path):
    with pdfplumber.PDF.open(input_paths[0]) as first_pdf:
        writer = first_pdf.copy()
        
        for path in input_paths[1:]:
            with pdfplumber.PDF.open(path) as pdf:
                for page in pdf.pages:
                    writer.add_page(page)
        
        with open(output_path, 'wb') as outfile:
            writer.write(outfile)

# 使用示例
merge_pdfs_advanced(['doc1.pdf', 'doc2.pdf'], 'combined.pdf')

方案对比

特性 PyPDF2 pdfplumber
代码复杂度 简单 中等
执行效率
特殊格式支持 良好 优秀
内存占用

高级技巧

  1. 处理加密文件
python 复制代码
# PyPDF2示例
merger.append(pdf_path, password='your_password')
  1. 保留书签
python 复制代码
# 需要使用PyPDF2的Bookmark特性
merger.addBookmark("Chapter 1", 0)
  1. 异常处理增强
python 复制代码
try:
    # 合并操作
except PyPDF2.utils.PdfMetricsError as e:
    print("页面尺寸不匹配:", e)
except Exception as e:
    print("未知错误:", e)

最佳实践建议

  1. 优先使用PyPDF2方案,其性能和稳定性经过长期验证
  2. 处理超过50个文件时建议分批合并
  3. 合并前检查文件是否加密
  4. 输出文件建议使用.pdf扩展名
  5. 测试合并效果时建议先合并前两个文件验证

常见问题解答

Q1: 合并后的文件乱码怎么办?

A: 检查原始文件是否包含特殊字体,建议使用pdfplumber方案并指定字体编码

Q2: 如何保持原文件质量?

A: 两种方案都会保留原始质量,但建议不要重复合并已合并的文件

Q3: 支持PDF/A格式吗?

A: PyPDF2 3.0.0+ 版本支持PDF/A-1b标准

总结

对于大多数常规合并需求,推荐使用PyPDF2方案。当需要处理复杂PDF结构或需要精细控制时,可以选择pdfplumber方案。两种方案都提供了基础的异常处理机制,实际使用时可根据具体需求进行扩展。

相关推荐
没有梦想的咸鱼185-1037-166330 分钟前
【遥感技术】从CNN到Transformer:基于PyTorch的遥感影像、无人机影像的地物分类、目标检测、语义分割和点云分类
pytorch·python·深度学习·机器学习·数据分析·cnn·transformer
钟爱蛋炒饭35 分钟前
基于深度学习神经网络协同过滤模型(NCF)的视频推荐系统
python·神经网络·机器学习
eqwaak036 分钟前
Python Pillow库详解:图像处理的瑞士军刀
开发语言·图像处理·python·语言模型·pillow
RE-19011 小时前
制冷剂中表压对应温度值的获取(Selenium)
爬虫·python·selenium·jupyter·pandas·danfoss·reftools
测试老哥1 小时前
Python+selenium自动化生成测试报告
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
IT北辰2 小时前
Linux 系统python环境( Miniconda),最新版
linux·运维·python
keerduoba2 小时前
PDFParser 的pickle.loads 寻找链(源码)wmctf2025-pdf2text
python·pdf·pickle·pdf与pickle反序列化
该用户已不存在2 小时前
PHP、Python、Node.js,谁能称霸2025?
python·node.js·php
luckys.one2 小时前
第12篇|[特殊字符] Freqtrade 交易所接入全解:API、WebSocket、限频配置详解
网络·ide·python·websocket·网络协议·flask·流量运营
Pocker_Spades_A3 小时前
Python快速入门专业版(四十六):Python类的方法:实例方法、类方法、静态方法与魔术方法
开发语言·python