夜雨聆风学习资料网

ARTICLE · 1084748

几十份 PDF 要合并、拆分、加水印,AI 写了三段脚本一次搞定

几十份 PDF 要合并、拆分、加水印,AI 写了三段脚本一次搞定

「AI 帮我写」第 7 期

摘要:合并、按页拆分、给每一页盖水印,这三件事 AI 一共写了 30 行代码,复制就能跑。

手上有 PDF 的人都遇到过这三件事。

第一件,十几份材料要合成一份交上去,用在线工具合并,还得担心合同内容被谁看去了。

第二件,收到一份 200 页的汇总文件,你只要其中第 51 到 80 页。

第三件,文件要发给外部,得在每一页盖上仅限内部使用的字样。

图 1:合并、拆分与水印

这三件事,AI 一共给我写了 30 行代码。

第 1 段:合并

from pathlib import Path

from pypdf import PdfReader, PdfWriter

src = Path(r"D:\PDF")

# 新建一个空的写入器,用来装最终的文件

writer = PdfWriter()

# 按文件名排序,保证合并顺序是 01、02、03 而不是随机

for f in sorted(src.glob("待合并*.pdf")):

reader= PdfReader(str(f))

forpage in reader.pages:

#一页一页往总文件里加

writer.add_page(page)

writer.write(str(src / "合并结果.pdf"))

print("合并完成")

图 2:多份按顺序汇成一叠

第 2 段:按页拆分

from pypdf import PdfReader, PdfWriter

from pathlib import Path

src = Path(r"D:\PDF")

reader = PdfReader(str(src / "大文件.pdf"))

# range 的第三个参数是步长,每 10 页切一份

for i in range(0, len(reader.pages), 10):

w= PdfWriter()

forpage in reader.pages[i:i + 10]:

w.add_page(page)

#i // 10 + 1 算出这是第几份,从 1 开始数

w.write(str(src/ f"拆分_{i // 10 + 1}.pdf"))

print("拆分完成,共", (len(reader.pages) + 9) // 10, "份")

想要指定页码范围,比如只抽 51 到 80 页,把问 AI 的话说成这样:帮我改成只抽第 51 到 80 页,输出一份新文件。

第 3 段:加水印

先自己做一个水印 PDF,一页就行,中间写几个大字。然后用下面这段,把它盖到每一页上。

from pypdf import PdfReader, PdfWriter

from pathlib import Path

src = Path(r"D:\PDF")

# 水印页取第一页,所有页都盖同一张

water = PdfReader(str(src / "水印.pdf")).pages[0]

reader = PdfReader(str(src / "正文.pdf"))

w = PdfWriter()

for page in reader.pages:

#merge_page 是把水印叠在当前页上,不改动原内容

page.merge_page(water)

w.add_page(page)

w.write(str(src / "加好水印.pdf"))

print("水印完成")

图 3:加盖水印与按页裁剪

装库和 3 个高频坑

python -m pip install pypdf

1. 合并后页序乱了:sorted 是按文件名排的,文件名如果叫 1、10、2,顺序就会变成 1、10、2。统一改成 01、02、03 这种带前导零的名字

2. 水印把正文盖住了:纸质文件的习惯是水印要淡,做成浅灰色半透明,或者用 Python 生成一个透明度更低的图层

3. 有些 PDF 加了密码:读的时候会报错,让 AI 加一段带密码解密的代码,密码你得自己有

图 4:三段脚本跑通

安全红线

1. 三个脚本都是生成新文件,原文件不动,处理完整批核对一遍再清理

2. 加了水印的版本才是发出去的版本,别把没加过水印的原件顺手一起发了

3. 合同、报价单这类文件不要用在线合并工具,本地跑脚本是最稳的选择

相关学习资料