乐于分享
好东西不私藏

Day22:PDF处理神器!用Python合并/拆分/加水印,从此告别Adobe会员

Day22:PDF处理神器!用Python合并/拆分/加水印,从此告别Adobe会员

想合并几个PDF还要开会员?Python让你免费搞定所有PDF操作!

一、先看这个真实场景

张老师期末要干这些事:

  1. 全班30个学生交来的电子版作业(每个学生一个PDF文件)
  2. 要合并成一个总文件,方便存档
  3. 有些文件太大,要拆分成几个小文件
  4. 还要给每页加上“仅供存档”的水印
  5. 最后转成Word让领导审阅

以前他:

  1. 打开百度搜“PDF合并免费版” → 下个软件 → 试用版只能合3个文件 ✓
  2. 开会员?一个月30块,划不来 ✓
  3. 用在线工具 → 上传 → 等待 → 下载 → 有广告 → 怕泄露信息 ✓

一整天没了!

二、Python的“PDF魔法”三件套

今天教你用Python操作PDF,三行代码搞定上面所有事:

import PyPDF2# 1. 合并多个PDF合并器 = PyPDF2.PdfMerger()for 文件名 in ['作业1.pdf''作业2.pdf''作业3.pdf']:    合并器.append(文件名)合并器.write('全班作业合集.pdf')# 2. 拆分PDF(取前3页)with open('全班作业合集.pdf''rb') as f:    阅读器 = PyPDF2.PdfReader(f)    写入器 = PyPDF2.PdfWriter()for 页 in range(3):  # 取前3页        写入器.add_page(阅读器.pages[页])    with open('前3页.pdf''wb') as 输出:        写入器.write(输出)# 3. 加水印(需要先做个水印PDF)from PyPDF2 import PdfReader, PdfWriterwith open('全班作业合集.pdf''rb') as 源文件, open('水印.pdf''rb') as 水印文件:    源PDF = PdfReader(源文件)    水印PDF = PdfReader(水印文件)    水印页 = 水印PDF.pages[0]  # 取水印第一页    写入器 = PdfWriter()for 页 in 源PDF.pages:        页.merge_page(水印页)  # 把水印盖上去        写入器.add_page(页)    with open('带水印的作业合集.pdf''wb') as 输出:        写入器.write(输出)print("✅ 搞定!PDF处理完成!")

看懂了吗?

  • PdfMerger:合并多个PDF文件
  • PdfReader + PdfWriter:读取和写入PDF,实现拆分
  • merge_page():把水印盖到每一页上
  • 全程免费,没有广告,不泄露隐私!

三、分解“魔法”:每步在干什么?

3.1 第一步:安装需要的库

pip install PyPDF2

如果还要转Word,需要额外装 pdf2docx:

pip install pdf2docx

3.2 合并PDF详解

合并器 = PyPDF2.PdfMerger()for 文件名 in ['作业1.pdf''作业2.pdf''作业3.pdf']:    合并器.append(文件名)合并器.write('全班作业合集.pdf')
  • PdfMerger():创建一个合并器对象
  • .append(文件名):把一个PDF文件加到合并列表
  • .write(新文件名):保存合并后的文件

注意:文件名可以用 os.listdir() 自动获取,不用手动写列表。

3.3 拆分PDF详解

with open('全班作业合集.pdf''rb') as f:    阅读器 = PyPDF2.PdfReader(f)    写入器 = PyPDF2.PdfWriter()for 页 in range(3):        写入器.add_page(阅读器.pages[页])    with open('前3页.pdf''wb') as 输出:        写入器.write(输出)
  • PdfReader(f):读取PDF文件
  • len(阅读器.pages):获取总页数
  • 阅读器.pages[页]:获取第几页(从0开始)
  • PdfWriter():创建写入器
  • 写入器.add_page(页对象):添加一页到新文件
  • 最后保存

3.4 加水印详解

先准备水印PDF:用Word做个“仅供存档”或“机密”的文档,另存为PDF。

with open('源文件.pdf''rb') as 源文件, open('水印.pdf''rb') as 水印文件:    源PDF = PdfReader(源文件)    水印PDF = PdfReader(水印文件)    水印页 = 水印PDF.pages[0]    写入器 = PdfWriter()for 页 in 源PDF.pages:        页.merge_page(水印页)        写入器.add_page(页)    with open('带水印.pdf''wb') as 输出:        写入器.write(输出)
  • merge_page(水印页):把水印页叠加到当前页上(水印透明的话能看到原内容)
  • 注意水印最好做成半透明的,或者放在角落,不遮挡正文

四、自己动手试试!

4.1 第一步:创建几个测试PDF

如果你手头没有PDF,可以用Word随便打几个字,另存为 测试1.pdf、测试2.pdf、测试3.pdf。

4.2 第二步:合并它们

import PyPDF2import os文件夹 = '.'# 当前文件夹所有PDF = [f for f in os.listdir(文件夹) if f.endswith('.pdf') and f != '合并结果.pdf']合并器 = PyPDF2.PdfMerger()for 文件名 in 所有PDF:    合并器.append(文件名)合并器.write('合并结果.pdf')print(f"✅ 已合并 {len(所有PDF)} 个文件到 合并结果.pdf")

4.3 第三步:制作水印

用Word写一行字“机密”,调成浅灰色、半透明、旋转45度,保存为 水印.pdf。

4.4 第四步:给合并后的文件加水印

with open('合并结果.pdf''rb') as 源文件, open('水印.pdf''rb') as 水印文件:    源PDF = PyPDF2.PdfReader(源文件)    水印PDF = PyPDF2.PdfReader(水印文件)    水印页 = 水印PDF.pages[0]    写入器 = PyPDF2.PdfWriter()for 页 in 源PDF.pages:        页.merge_page(水印页)        写入器.add_page(页)    with open('带水印_合并结果.pdf''wb') as 输出:        写入器.write(输出)print("✅ 水印添加完成!")

五、办公实战1:批量处理学生作业(按学号排序)

import PyPDF2import osimport redef 提取学号(文件名):"""从文件名中提取数字(假设学号是纯数字)"""    match = re.search(r'(\d+)', 文件名)return int(match.group(1)) if match else 0# 假设作业都在“学生作业”文件夹里作业文件夹 = '学生作业'所有作业 = [f for f in os.listdir(作业文件夹) if f.endswith('.pdf')]# 按学号排序所有作业.sort(key=提取学号)合并器 = PyPDF2.PdfMerger()for 文件名 in 所有作业:    文件路径 = os.path.join(作业文件夹, 文件名)    合并器.append(文件路径)print(f"已添加:{文件名}")合并器.write('全班作业_按学号排序.pdf')print(f"✅ 共合并 {len(所有作业)} 份作业!")

六、办公实战2:PDF转Word(方便领导修改)

from pdf2docx import Converter# 单个文件转换cv = Converter('全班作业合集.pdf')cv.convert('全班作业合集.docx', start=0, end=None)cv.close()print("✅ PDF转Word完成!")

批量转换文件夹里所有PDF:

import osfrom pdf2docx import Converterpdf文件夹 = 'PDF文件'输出文件夹 = 'Word文件'os.makedirs(输出文件夹, exist_ok=True)for 文件名 in os.listdir(pdf文件夹):if 文件名.endswith('.pdf'):        pdf路径 = os.path.join(pdf文件夹, 文件名)        docx路径 = os.path.join(输出文件夹, 文件名.replace('.pdf''.docx'))        cv = Converter(pdf路径)        cv.convert(docx_path, start=0, end=None)        cv.close()print(f"已转换:{文件名}")print("✅ 所有PDF转Word完成!")

七、进阶技巧:提取PDF中的文字(比如学生姓名)

import PyPDF2def 提取文字(pdf路径):    with open(pdf路径, 'rb') as f:        阅读器 = PyPDF2.PdfReader(f)        文字 = ''for 页 in 阅读器.pages:            文字 += 页.extract_text()return 文字# 试试内容 = 提取文字('张三的作业.pdf')print(内容)

可以结合正则表达式提取学号、姓名等信息,自动归档。

八、重点总结:今天你学会了什么?

✅ 核心技能

  1. PdfMerger – 合并多个PDF
  2. PdfReader + PdfWriter – 拆分PDF、提取页
  3. merge_page() – 叠加水印
  4. pdf2docx – PDF转Word
  5. extract_text() – 提取文字内容

✅ 办公应用场景

  1. 合并学生作业 → 一个PDF全班交齐
  2. 拆分长文档 → 只发需要的部分
  3. 添加保密水印 → 防止外泄
  4. PDF转Word → 方便领导修改

✅ 效率对比

任务
传统操作
Python代码
合并30个PDF
开会员/在线工具
几秒钟
加水印
逐个用PS
批量完成
转Word
找转换网站
本地转换

九、今日挑战:动手做!

任务1:批量拆分PDF(每个文件分成每10页一个小文件)

# 提示:循环 range(0, 总页数, 10),每次取10页保存为新文件

任务2:给文件夹里所有PDF加上“保密”水印(保留原文件)

# 生成带水印的新文件,文件名加“_带水印”后缀

任务3:提取所有PDF的第一页,合并成一个“封面合集”

# 用于快速浏览所有文档的首页

十、明日预告

明天学终极自动化:搭建你的个人办公机器人!

  • 如何用Python监控文件夹,有新文件自动处理?
  • 如何把多个脚本组合成一个完整系统?
  • 如何用GUI界面让不懂代码的同事也能用?

真正的“办公自动化大师”,从明天开始!


回复「Py-Day」获取今日挑战题解及完整代码

评论区作业:晒出你处理的PDF,或者分享你遇到的坑!👇

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » Day22:PDF处理神器!用Python合并/拆分/加水印,从此告别Adobe会员

评论 抢沙发

9 + 9 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮