【python实用小脚本-194】Python一键给PDF加水印:输入文字秒出防伪文件——再也不用开Photoshop

Python一键给PDF加水印:输入文字秒出防伪文件------再也不用开Photoshop

PDF加水印, 本地脚本, 零会员费, 防伪标记, 瑞士军刀

故事开场:一把瑞士军刀救了投标的你

周五下午,你把 100 页标书 PDF 发给客户,却担心被同行盗用。

想加水印,打开 Photoshop 导出再合并?图层爆炸,电脑风扇狂转。

这时,你从桌面掏出"小白瑞士军刀"------main.py

终端里输入:

复制代码
PDF file: bid.pdf
Enter the watermark text here: CONFIDENTIAL - 2024

30 秒后,finalDraft.pdf 生成,每页都斜着灰字"CONFIDENTIAL - 2024",盗用者无从下手。

痛点解决:再也不用庞大设计软件,一句命令给 PDF 打防伪标签。


完整代码(≤1000字符,直接展示)

python 复制代码
from reportlab.pdfgen import canvas
from reportlab.lib.units import inch
from reportlab.lib import colors
from reportlab.lib.pagesizes import A4
from PyPDF2 import PdfFileReader, PdfFileWriter

def make_watermark(text):
    c = canvas.Canvas("watermark.pdf", pagesize=A4)
    c.translate(inch, inch)
    c.setFillColor(colors.grey, alpha=0.6)
    c.setFont("Helvetica", 50)
    c.rotate(45)
    c.drawCentredString(400, 100, text)
    c.save()

def add_watermark(pdf_file):
    watermark = 'watermark.pdf'
    merged = "finalDraft.pdf"
    with open(pdf_file, "rb") as inp, open(watermark, "rb") as wm:
        reader = PdfFileReader(inp)
        writer = PdfFileWriter()
        wm_page = PdfFileReader(wm).getPage(0)
        for i in range(reader.numPages):
            page = reader.getPage(i)
            page.mergePage(wm_page)
            writer.addPage(page)
        with open(merged, "wb") as out:
            writer.write(out)

if __name__ == "__main__":
    text = input("水印文字: ")
    pdf_file = input("PDF 路径: ")
    make_watermark(text)
    add_watermark(pdf_file)

代码解析

功能块 1:快速画水印

reportlab 三行生成带旋转角度的透明水印 PDF,字体大小颜色可调。

python 复制代码
c.setFillColor(colors.grey, alpha=0.6)
c.rotate(45)
c.drawCentredString(400, 100, text)

功能块 2:逐页合并

PyPDF2 把水印页当作图层,循环合并到每一页,顺序不变。

python 复制代码
page.mergePage(wm_page)

功能块 3:零残留输出

合并完直接生成 finalDraft.pdf,无临时文件,干净清爽。

python 复制代码
writer.write(out)

如果还想更厉害

扩展点子 1:批量文件夹

reports/ 里所有 PDF 一键加统一水印。

python 复制代码
import glob
for pdf in glob.glob("reports/*.pdf"):
    add_watermark(pdf)

扩展点子 2:GUI拖放+预览

tkinter 做窗口,拖文件+实时预览水印位置。

python 复制代码
import tkinter.filedialog as fd
pdf_file = fd.askopenfilename()

总结

main.py 这把 30 行瑞士军刀,把"打开PS→画水印→导出→合并"四步压缩成"输入文字+回车"。

你无需会员、无需联网,就能把任意 PDF 打上专属防伪水印。

再加两行批量或 GUI,它就从脚本升级成版权工厂。

下次再怕文件被转发,直接跑脚本,30 秒给 PDF 上锁!


源码获取

完整代码已开源,包含详细的注释文档:

🔗 [GitCode仓库] https://gitcode.com/laonong-1024/python-automation-scripts

📥 [备用下载] https://pan.quark.cn/s/654cf649e5a6 提取码:f5VG