Python中操作PDF文件的常用方法与工具选型
本文详解如何使用Python主流库处理PDF文件。涵盖PyPDF2执行合并拆分与加解密、pdfminer.six与PyMuPDF精准提取文档文本、ReportLab动态创建页面及嵌入图片。提供完整代码示例、依赖安装步骤与安全操作规范,助您快速掌握自动化文档处理全流程。
Python处理PDF的核心目标与依赖环境
日常办公与数据流转中,常需对PDF执行批量整合、页面拆解、内容抽取、格式生成及安全管控。本文按照真实操作链路梳理四大核心任务,直接给出可运行的代码骨架与关键参数说明。
首次使用前需在终端执行依赖安装:
pip install PyPDF2
pip install pdfminer.six
pip install reportlab
第1步:使用PyPDF2合并与拆分文档
目的:批量整合多个独立文件或按页拆解大型报表。
入口:Python脚本或交互式环境。
动作:实例化合并器或读写器,遍历路径列表进行IO操作。
重要参数:源文件数组(如['file1.pdf','file2.pdf'])与目标输出路径。
完成状态:控制台输出执行成功提示,工作目录生成对应的新文件。
import PyPDF2
# 创建一个 PDF 合并器对象
pdf_merger = PyPDF2.PdfMerger()
# 需要合并的 PDF 文件列表
pdf_files = ['file1.pdf', 'file2.pdf', 'file3.pdf']
# 合并 PDF 文件
for pdf in pdf_files:
pdf_merger.append(pdf)
# 输出合并后的 PDF 文件
pdf_merger.write('merged_output.pdf')
pdf_merger.close()
print("PDF 文件合并完成!")
拆分实现逻辑
拆分依赖PdfReader获取总页数,循环内逐页追加至PdfWriter并定向写入。注意每次循环内新开文件流避免句柄冲突,最终生成page_1.pdf至page_N.pdf序列即为拆分闭环。
第2步:调用第三方引擎精准提取文本
目的:获取PDF内的纯文本内容,适用于归档、检索或二次建模预处理。
入口:模块化函数调用。
动作:通过专用解析接口或页面对象逐行读取。
重要参数:待解析文件路径。
完成状态:日志区打印完整段落,内存变量接收结构化字符串。
import PyPDF2
# 打开 PDF 文件
with open('sample.pdf', 'rb') as file:
reader = PyPDF2.PdfReader(file)
text = ""
# 提取所有页的文本
for page_num in range(len(reader.pages)):
page = reader.pages[page_num]
text += page.extract_text()
print("PDF 文件内容:")
print(text)
高阶替代方案:pdfminer.six内置更完善的版面分析算法,对表格型或混排复杂的文档还原度更高,调用极简:from pdfminer.high_level import extract_text; text = extract_text('sample.pdf')。PyMuPDF(fitz)则侧重底层渲染树解析,提取速度最快,适合海量文档流水线作业。
第3步:基于ReportLab创建并渲染内容
目的:从零构建符合企业规范的PDF票据、报表或宣传页。
入口:canvas.Canvas上下文初始化。
动作:设定纸张规格后,通过坐标映射绘制文本串、几何图形或外部媒体资源。
重要参数:pageszie定义画幅,drawString(x,y,text)定位文字,drawImage(path,w,h)绑定图像尺寸。
完成状态:调用c.save()提交绘制指令,生成离线文档。
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
def create_pdf_with_image(output_filename):
c = canvas.Canvas(output_filename, pagesize=letter)
c.drawString(100, 750, "Here is an image below:")
# 添加图像
c.drawImage("image.jpg", 100, 500, width=200, height=150) # 图像位置和大小
c.save()
crate_pdf_with_image("pdf_with_image.pdf")
print("PDF 文件(带图像)创建完成!")
第4步:为文档配置访问权限控制
⚠️ 风险提醒:加密操作会改变文件校验结构,务必在执行覆盖前备份原始凭证与源文件,防止遗忘密钥导致永久无法读取。
目的:限制未授权查阅或篡改敏感数据。
入口:读写混合模式下的安全接口。
动作:将原文档页队列注入写入器,挂载加密算法并写入密文副本;解密则反向校验口令流。
import PyPDF2
# 加密演示
with open('sample.pdf', 'rb') as file:
reader = PyPDF2.PdfReader(file)
writer = PyPDF2.PdfWriter()
for page in reader.pages:
writer.add_page(page)
password = "your_password"
writer.encrypt(password)
with open('encrypted_sample.pdf', 'wb') as encrypted_file:
writer.write(encrypted_file)
print("PDF 文件加密完成!")
# 解密演示
with open('encrypted_sample.pdf', 'rb') as file:
reader = PyPDF2.PdfReader(file)
password = "your_password"
if reader.is_encrypted:
reader.decrypt(password)
writer = PyPDF2.PdfWriter()
for page in reader.pages:
writer.add_page(page)
with open('decrypted_sample.pdf', 'wb') as decrypted_file:
writer.write(decrypted_file)
print("PDF 文件解密完成!")
运行验证排错与交付确认
执行时若抛出ModuleNotFoundError,请核对当前Python环境与pip安装的版本空间是否一致。部分底层解析组件在纯Linux容器内可能缺失C扩展,建议优先采用预编译轮子或切换Conda虚拟环境。操作落盘后,比对输出文件的页数标记与实际业务量是否吻合,且能正常被常规阅读器打开,即判定为流程完结。
工具链适用场景对照
PyPDF2:轻量级元数据处理,适合常规合并、分页切割、基础口令保护。pdfminer.six:专注版面还原与深度文本挖掘,应对复杂排版与表格抽取。reportlab:完全可控的渲染引擎,用于定制化单据、证书或带图排版输出。PyMuPDF:底层直读架构,追求极高吞吐量的批量化文本/图像收割。
以上就是Python中操作PDF文件的常用方法的详细内容,更多关于Python操作PDF文件的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









