PDF 万能文字水印
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_a54c5a5c/pdf-watermark-jiacai。
技能介绍
它解决什么问题
给 PDF 加水印看着简单,实际很容易翻车:把水印画在物理坐标系上,页面一带 /Rotate,视觉方向就歪了;换个环境跑,又找不到中文字体;网格参数手写一遍,批量文档里就再也对不齐了。这个技能把这套流程收敛成一次调用——你只提供水印文字,排版、旋转、换行、非 A4 页面处理全部按默认值执行。
核心能力与工作流程
- 半透明文字网格:以页面中心为轴心铺开行列网格,默认
10 x 10,行列对称居中。 - 参数可覆盖:字号、颜色、不透明度、旋转角度、行列数、行列间距都能通过命令行选项调整,不传则用默认值。
- 自动换行:文字超过阈值(默认 7 字)时每行最多 7 字并尽量均衡分配;含英文单词时优先按词断行,避免把词切开。
- 非 A4 预处理:竖版非 A4 缩放到 A4 竖版,横版同理,保持视觉方向并留少量白边,
/Rotate一并烘焙成 0。 - 输出副本:源文件只读不改,结果写到同目录的
xxx_水印.pdf。
执行流程是:确认源文件路径存在 → 检查 Python venv 里的 pypdf 和 reportlab → 运行 scripts/add_watermark.py 传入源路径与水印文字 → 用 pymupdf 渲染预览图确认效果。
/Rotate 的补偿逻辑
PDF 内部可能标记 /Rotate 为 0/90/180/270,导致物理坐标系与你看到的方向不一致。脚本会读取每页的 /Rotate 值,计算 effective_rotation = 用户设定角度 + 页面/Rotate,这样无论文件内部怎么标,水印都落在你期望的视觉方向上。非 A4 页面因为在预处理阶段已经用单一 CTM 把旋转烘焙进内容,/Rotate 置 0,后续只按设定角度倾斜即可。
适用边界与注意点
- 单个文件用默认值就够了;要调整全局参数(比如把角度改成 45°),必须对已生成的全部文件重跑一遍,工具不做增量更新。
- 输出文件被其他程序占用时写入会失败,脚本改用
_水印2之类的临时名,需要关闭占用进程后再改名。 - 字体探测顺序是 Windows 微软雅黑 / macOS PingFang / Linux Noto·文泉驿,全找不到才回退
reportlab内置 CID 字体STSong-Light,无需额外安装。 reportlab5.0+ 中from reportlab.pdfbase.ttfonts import TTFont已不可用,需改用import reportlab.pdfbase.ttfonts as ttfonts再调用ttfonts.TTFont(...);注册msyh.ttc这类 TTC 集合字体时还要带subfontIndex=0。- 网格默认允许溢出到页面边缘之外,要严格收在页内就得显式调整行列数与间距。
使用场景
- 法务/合规场景下,你需要给一批合同PDF添加统一的半透明文字水印,脚本可批量执行并保持一致的网格与旋转。
- 你收到横版或竖版的非A4 PDF,需要先自动缩放到A4,再在页面中心覆盖半透明水印网格,保持视觉方向不变。
- 你要在PDF每页上铺10x10行列的文字网格作为防扩散标识,并允许网格略微溢出到页边之外。
- PDF页面带/Rotate属性,你希望水印始终按照设定的视觉方向呈现,脚本会自动补偿每页的旋转值。
适合人员
- 需要在合同、报表、课件等PDF上加统一文字水印的法务、行政和项目管理同学。
- 经常接收非A4横竖版PDF,希望快速得到A4并带水印副本的产品、设计和文档工程师。
- 在CI里批量处理PDF附件,需要稳定可复现的水印步骤的后端或工具链开发者。
- 用Python脚本自动化办公文档处理,关注字体探测和/Rotate兼容的工程人员。