9hnn 打开下载页后,在「输入密码」框里填这 4 位,再点它下方的按钮即可下载,不用注册、不用登录。

主界面:12 页 A4 文档载入完成,默认那行「仅供内部审阅」平铺 3×2、-30°、35% 不透明;状态栏已经算好「其中 12 页将加 72 个水印」,左边示意图把每一个格子的位置、角度、深浅都画了出来
这个工具解决什么问题
「给文件盖个章」这件事在 Windows 上常见的四条路都不太好用:一是把原稿重排一遍再导出——Word 里加个水印再另存 PDF,版式、字体、行距全变了,本来要发出去的就是那份定稿,改不得;二是在线工具——最省事,但要把合同、报价单、病历、内部教材整份传上别人的服务器,上传之前你永远不知道它把文件存了多久;三是阅读器的高级版水印——收费、按页数或按分钟限制、几十页要一页一页点,而且改一次参数就得重来;四是打印时盖——打印预览里那点透明字,存成 PDF 就没有了,发给别人、换个打印机又变成干净的一份。」
- 原来的做法:打开在线网站 → 上传合同 → 填水印文字 → 下载回来 → 翻页确认每页都有 → 发现角度不对再传一遍;或者在阅读器里一页一页加,几十页加到手酸
- 用这个工具:在资源管理器里对着 PDF 点右键,选「百业PDF大师 → 添加水印..」→ 填一行「仅供内部审阅」,挑平铺 3×2、-30°、35% 不透明 → 左边示意图当场告诉你这一页会长成什么样,状态栏告诉你「12 页将加 72 个水印」→ 点「保存加水印结果」,出一份新的
原名_水印.pdf - 省下来的:不用上传下载、不用注册账号,没有页数和体积的额度限制;参数改一下预览立刻重算,不点保存什么都不写盘;文字水印还能写
{page}、{pages}、{date}这种逐页变化的占位符,「第 3 页 / 共 12 页」一行参数就出,泄露了能追到是哪一版;源文件一个字节都不动,也不动页面上原有的内容、批注和链接
技术实现
Windows 桌面程序,.NET Framework 4.8 + WinForms 界面,PDF 处理用 PdfSharp。加水印走的是「在原页上追加一层绘制」:不搬页、不重建页面、也不重排任何内容,而是把新画的那一段 q … Q 绘制指令,作为 /Contents 数组的第二个元素挂到原页的内容流后面(选「垫在下面」就是挂到前面)。所以原页面的绘制指令是原样保留的——开发阶段拿一份带 2 处页内链接的样本实测过:加水印后 /Contents 从单一对象变成 2 个元素,而原来的绘制算子一个不少(re 仍是 2 个),/Annots 2、/Link 2、/URI 4,连标注矩形 /Rect 的两个坐标都和源文件逐字一致,页框与 /Rotate 也不变。换句话说,加水印不丢批注、不丢页内链接、不丢表单域——这一点和同系列的「多页拼版」正好相反(拼版把页当成整块画面搬进格子里,标注会没了),所以别把两个工具的说法互相套用。
- 真透明,不是把颜色预先调淡:不透明度写进 PDF 的图形状态参数
/ca。界面填 35%,成品回读就是/ca = 0.3490;再用渲染引擎把成品画成位图逐点比对,落在深色正文上的取点 100% 都在「底色 → 35% 混合色」这条线段上,在灰底上对正确混合律的误差只有 7.4 个色阶、而对「预混白色的假透明」误差是 94.2 个色阶——所以它盖在黑色正文上不会翻成粉色,盖在彩色底纹上也不会发白 - 中文字体是运行时实测出来的白名单:下拉里只列实测真能嵌进 PDF 并正常显示的字体——中文有黑体、楷体、仿宋、等线,西文有 Arial、Times New Roman、Courier New、Segoe UI、Tahoma。宋体和微软雅黑是 TTC 字体集合、PdfSharp 嵌不出子字体,构造成功但名字回环不一致(被静默替换成别的字体)的也一律判不可用,下拉框下面用一行灰字说明为什么没有它们。宁可让你选不到,也不让你选了之后在保存时崩,或者以为选了隶书、成品里其实换成了别的字
- 拍照扫描件那种「旋转页」是专门啃过的:手机拍照转出来的 PDF 常见「页面尺寸还是竖的、但标了
/Rotate 90」。PdfSharp 画布完全不读这个旋转标记(0/90/180/270 四种页上画布的坐标都是恒等变换、报的尺寸是没旋转的那个数、方向甚至仍然报「纵向」),直接按你想当然的方向摆,人眼看到的就是错的角、文字还会横躺。本工具把「你眼睛看到的页面」和「PDF 内部的用户空间」之间的换算做成一个不碰 PdfSharp 的纯函数,九宫格定位和倾斜角都跟着修;成品再用渲染引擎一页页量水印主轴,实测四种旋转角的页面全部命中目标角度、误差 ≤0.1° - 图片水印:PNG 的透明是真的透明:带 alpha 的 PNG 会同时写出软掩膜
/SMask与硬掩膜/Mask,成品渲染出来实测透明外圈透的是页面白底(255,255,255),实心处就是图章本色。JPG 结构里根本没有透明通道,同一位置的实测是一圈纯黑(0,0,0)——拿一张「透明背景的公章 JPG」来盖文件,压出来的是一块黑底,所以选到 JPG 时界面直接红字提醒,要做透明章请另存 PNG。BMP 更糟:实测无压缩、57 KB 一张,而且 alpha 会被静默丢掉,索性拒收并告诉你「BMP 请先另存为 PNG」。同一张图不管铺几格、跨几页,都只嵌一份图像对象(实测 6 格比 1 格只多 18 字节,20 页仍然只有 3 个图像对象) - 逐页变化的占位符:水印文字里写
{page}(当前页码)、{pages}(总页数)、{date}(今天,形如 2026-10-15)、{time},保存时逐页替换;「仅供内部审阅 {page}/{pages}」这一行就是几十页文档的防伪水印 - 布局两档:平铺是行×列(1~8 × 1~8)把页面等分成格子,每格一个水印、整片保持同一个倾斜角,做「样稿」「内部审阅」这种铺满全屏的效果;定位是九宫格九选一(左上/上中/右上/左中/正中/右中/左下/下中/右下)+ 内边距 mm,做公章、页脚标记这种固定位置的效果;切到定位模式时行/列输入框会跟着置灰,界面上灰掉的框程序里也不会去读它的值(这条专门加了两条断言钉住)
- 层次与范围:盖在内容上(默认)或垫在下面当背景底纹;应用范围支持全部页 / 指定页
1-3,5/ 仅奇数页 / 仅偶数页,范围外的页在列表里明写「不在范围」,一个水印都不画——实测范围外那些页渲染出来一丝墨迹都没有 - 保存守卫:输出路径撞上源文件本身直接拒绝,实测被拒之后源文件大小和修改时间一字未动;输出名撞上其它已有文件先弹确认框,点取消旧文件不被覆写、再点一次还会弹、点确认才真的覆写;字号、角度、行列、不透明度、边距、页码范围六类越界都是当场红字给中文原因并把保存按钮置灰(比如字号填 400 → 「字号要在 6~300 之间」,范围填
3-1→ 起止颠倒),不会把非法参数写进 PDF - 右键菜单:组键「百业PDF大师」下挂一个「添加水印..」动词,写的是当前用户的注册表项(HKCU),免管理员、免装 COM 组件;水印没有跨文件的语义,所以多选几个 PDF 就是每个文件各起一个窗口、各出一份成品,不会把它们并成一条页流(这条在真资源管理器里多选跑过端到端:选中几个就起几个进程、开几个窗,每个窗口只装自己那一份);移除时只删自己那一个动词,不动兄弟工具的菜单项
操作教程
- 第 1 步:把 PDF 放进软件:三种入口:点「选择PDF」用文件对话框选;把文件从资源管理器直接拖进窗口;或者在资源管理器里对着 PDF 点右键,选「百业PDF大师 → 添加水印..」(第一次用需要在软件里点一下「右键菜单」按钮把它装上)。多选几个文件时每个文件各开一个窗口,各处理各的 预期:信息栏立刻报出「共 12 页 · 首页 595×842pt(210×297mm 纵向)」,下面逐页一列状态;非 PDF、被截断的损坏文件、0 页的空文件各有独立的中文原因,窗口不会闪退
- 第 2 步:写水印内容:一行文字,或者一张图章:类型选「文字」就在文字框里填,比如
仅供内部审阅,想每页不一样就加占位符第 {page}/{pages} 页、加当天日期{date};字体从实测可用的白名单里挑,字号 6~300pt,颜色 8 个预设加自定义 RGB,不透明度 5%~100%,角度 -90°~90°(默认 -30° 斜排)。类型切到「图片」就去选一张 PNG 或 JPG,尺寸按 mm 填、可勾「保持宽高比」 预期:左边预览跟着改,改一个参数重画一次;切到图片模式时整块文字参数面板会收起来,选到 JPG 时红字写明「这张图没有透明通道,整块都会盖在正文上」,选到 BMP 直接拒绝 - 第 3 步:决定摆在哪里:平铺还是定位:「平铺」适合铺满:填行×列(各 1~8),默认 3 行 2 列,整片共用同一个倾斜角;「定位」适合一个章钉在固定位置:九宫格里点一个方位,再填内边距 mm(默认 10),方位是按你眼睛看到的页面方向算的,旋转过的页不会跑错角 预期:选平铺时行列框可编辑、定位的九宫格置灰;选定位时反过来行列框置灰,状态栏的水印个数跟着变(12 页 × 平铺 6 格 = 72 个;改成定位就每页 1 个、共 12 个)
- 第 4 步:限定哪几页、盖在上面还是垫在下面:「应用范围」选全部页 / 指定页(写
1-3,5,起止颠倒或看不懂的写法当场红字)/ 仅奇数页 / 仅偶数页;「层次」选「盖在内容上」(默认)或「垫在内容下」(做背景底纹) 预期:范围外的行状态列变成「不在范围」,预览行只数范围内的页;选「垫在内容下」会先弹一个二次确认框,把理由写全:「水印画在原内容之前,如果这一页有满版底色或整页图片,它会被完全盖住、看不见」 - 第 5 步:点「保存加水印结果」:默认输出名是同目录的
原名_水印.pdf,点「浏览…」可以换位置换名字;保存过程中进度会写「正在处理第 i / N 页…」,勾上「完成后打开输出文件所在目录」可以直接跳过去。界面上参数都还在,想换一种盖法改数字再存一次就行 预期:新文件出现在输出目录,页数和源文件一模一样、页框尺寸一分未变;提示条报出成品大小与「跳过多少页」;源文件从头到尾只被读、没被写过

12 页 A4 文档载入后的默认参数:平铺 3×2、-30°、35% 不透明、盖在内容上、全部页;状态栏「其中 12 页将加 72 个水印」就是把每一页要画的格子数加出来的结果

文字填 第 {page}/{pages} 页 后翻到第 4 页:示意块上的白字就是「第 4/12」,输入框下方那行灰字是占位符说明。这类水印的价值在于每页都不同——流出去的是第几页,一看就知道

切到图片模式选了一张 120×120 的带透明通道 PNG 章,尺寸填 45×45mm;整块文字参数收起来了,状态栏改按「图片 45×45mm」的口径给你数水印。PNG 的透明在成品里是真透明——渲染实测外圈透出的是页面白底,不是黑块

锚点选「右下」+ 内边距 15mm + 30° + 60pt:行/列两个输入框随之置灰,每页只有一个水印(12 页共 12 个),示意图右下角那块红字就是成品里会出现的位置

同一份文档改成 4 行 × 4 列、45°、20pt:状态栏随之报「将加 192 个水印」(12 页 × 16 格)。格子密到这个程度时字号得跟着调小,否则水印比页面还大,程序会直接告诉你这一页会跳过

范围切「仅奇数页」+ 层次切「垫在内容下」:状态栏「其中 6 页将加 36 个水印」并写明「垫在内容下」。这个组合不是摆设——成品实测过:落在满版蓝色块上的那一页,垫底的水印确实被完全盖没(墨迹从 736 变 0),而落在白底上的那一页看得见(735 对 735)。所以那句提醒不是危言耸听,而是让你先想清楚

12 页 A4 文档加完水印落盘 30,057 B(源文件 8,687 B)——涨的那部分几乎全是一份中文字体子集,见下面常见问题第 5 条;底部提示条同时告诉你成品页数与跳过的页数
第一次用想开右键菜单,点工具栏「右键菜单」按钮即可集成,再点一次选移除就能清理干净,且不影响同系列其它工具;移动了软件所在的文件夹后,在新位置再点一次按钮刷新路径。同系列还有 PDF合并大师、PDF拆分器、PDF旋转工具、PDF删页工具、PDF提取页面、PDF页面重排、PDF裁剪工具、PDF页面缩放 和 PDF多页拼版,共用同一个右键菜单分组。发出去之前想先删掉封面广告页或者把内部编号页去掉,可以先用删页/提取处理一遍,再来盖水印。
常见问题
/ToUnicode 映射的。所以「把身份证号用灰色水印盖住再发出去」这种做法等于没遮盖。要真正销毁页面上的信息,得用会重写页面内容的涂黑(密文遮盖)工具,那是本站后续的另一款。同理,加水印也不等于加密:本工具不写 /Encrypt、不改权限位,想让别人不能打印不能复制,得用加密类工具。q … Q 作为 /Contents 数组的第二个元素挂上去。拿一份带 2 处页内链接的样本加完水印回读,绘制算子数量不变、/Annots、/Link、/URI 的数量和标注矩形坐标都和源文件一致,页框尺寸与 /Rotate 也没动。所以批注、页内链接、表单域在加水印后是完整保留的。注意这跟同系列「PDF多页拼版」的行为相反——拼版把整页当画面搬进格子,标注会丢,不要互相套用。至于源文件本身:软件只读打开、不改写、不删除,成品一律另存为新文件,并且主动拒绝「输出路径就是源文件」(实测被拒之后源文件字节数和修改时间都没动)。/Encrypt 的明文 PDF。所以软件在读入的那一刻就用红字把这件事告诉你(不是等保存完才说),介绍页这里也再写一遍:不要把「带密码的原件 + 加水印后的成品」当成两件受保护的文件,成品那份是公开的。另外被截断的损坏文件提示「文件损坏或不是有效的 PDF」,0 页的空文件提示「这个 PDF 里没有任何页面」,三种情况窗口和进程都正常存活,不会闪退。/SMask//Mask),JPG 走不了这条路,于是那一圈底就渲染成了黑块,实测同一取样点 PNG 是白底 (255,255,255)、JPG 是 (0,0,0)。解决办法:把章另存成带 alpha 的 PNG,成品里的透明外圈实测透的就是页面白底,实心处就是图章本色。BMP 更糟——无压缩、一张 57 KB、alpha 还会被静默丢掉,所以软件直接拒收 BMP 并告诉你「请先另存为 PNG」。另外图片水印的深浅由 PNG 自己的 alpha 决定,界面上的「不透明度」对图片模式不生效,想让章淡一点请回去调 PNG 的透明度。软件截图

完整界面:上方是文件与保存按钮和源文件信息,左下是自绘预览(页面矩形 + 边距框 + 每一个水印的位置角度深浅,右下角写着第几页,可以 ◀ ▶ 翻页),中间是参数区,右下是逐页状态表

一份 4 页的拍照样张,首页是横向的:信息栏写「首页 141×106mm(横向)」,方向列把 3 张带旋转标记的页标出来并写明「按视觉摆」。这一档是本项目最费功夫的地方——PdfSharp 的画布根本不读 /Rotate,不做换算的话,你以为放在右下角的章会跑到右上角、字还是横躺的

字号填 400:输入框下红字「字号要在 6~300 之间」,逐页状态整列变成「参数不合」,保存按钮灰掉。非法参数不会被写进 PDF,也不会让你等到保存时才看到一个报错弹窗

把输出文件填成源文件本身:提示条「输出文件不能覆盖源文件…」,源文件仍是原来的 8,687 B。输出名撞上其它已有文件时则弹确认框,点取消旧文件不动,点确认才覆写

密码填对之后立刻红字告知「源文件带密码:成品将不再加密…」,信息栏正常显示页数与大小。这一步发生在读入时,不是等保存到最后一刻才说

第 {page}/{pages} 页 翻到第 4 页的预览:一行参数,每页自动换成不同的页码,适合「泄露了能追到是哪一页」的内部流转场景
技术实现与后续维护
程序集 by.pdf.watermark,单文件发布:PdfSharp、界面库、授权组件都已合并/嵌入进 exe,包里再带一份 cfg.ini 配置,没有原生依赖。运行环境是 .NET Framework 4.8,Windows 10/11 一般已经具备。授权与试用计时按机器码在本机完成,不上传文件内容,也不读取文件之外的个人数据。出厂前跑了六套验收:一轮无界面自检(232 项断言:平铺格心与九宫格锚点的几何公式、mm 与 pt 的换算、四种旋转角与 -90/450 等价写法下的视觉↔用户空间换算、写入角度与 /Rotate 的补偿、占位符逐页替换、页码范围解析、字体白名单实探、六类参数越界的中文文案、六类保存守卫、/ca 回读、/Annots 与 /QuadPoints 逐字不变、PNG 双掩膜与 JPG 无掩膜、BMP 拒绝、同一图只嵌一份对象、右键菜单注册与注销与兄弟动词安全、定宽文案逐条量宽度不溢出);一轮成品像素对拍(54 项,用渲染引擎把成品画成位图,逐页量水印主轴角度、层次遮挡、透明混合律与图片外圈取点;量具自己先做三重量具自检再拿它量成品);一轮模拟真实点击的界面回归(81 项:预载起窗→参数修改→平铺行列真正进方案→定位模式置灰→原生图片对话框→范围与层次→六类守卫→保存并复核成品像素与源文件未被改动);一轮真资源管理器多选文件的右键菜单端到端(17 项:选中几个文件就起几个进程、几个窗口,每个窗口只载自己那一份,兄弟 5 个动词与组键图标在注销后逐字还原);一轮 151 MB / 40 页大文件(17 项);再加一轮素材实拍(75 项,每一幕先把界面调到该有的状态、回读控件确认到位才拍)。合计 476 项断言,在混淆后的发布版上重跑一遍仍然全绿,并在只放那 2 个文件的干净目录里实跑过完整流程,本文所有截图与封面都是用那个发布版实拍出来的。
已知的边界(不藏着):水印只是盖一层画,不会删除底下的任何信息,要销毁内容请用会重写页面内容的涂黑工具;带密码的源文件加完水印,成品不再加密;图片水印只收 PNG / JPG,透明必须用 PNG,BMP 直接拒;宋体、微软雅黑这类 TTC 字体嵌不进 PDF,所以不在下拉框里;中文文字水印会一次性带来约 18~21 KB 的字体子集开销;预览是软件自己画的矢量级示意(页面框 + 边距 + 每个水印的位置角度深浅 + 页码),不是逐像素的照片级预览——要做到照片级得随包带一份原生渲染引擎,目前刻意不做,所以「示意里看着对、成品就一定是那个样子」这句话是靠上面那轮像素对拍来保证的,不是靠肉眼预览。
后续可扩展的方向:一个目录批量跑完并保留各自参数、把常用「字体+字号+颜色+角度+平铺行列」存成模板下次一键套用、页眉页脚分开的双区水印、每页从一张表里取不同文字(工号、部门、流水号)、二维码/条形码水印、按内容自动避让正文区域的水印摆放、图层式可开关的水印,以及会真正重写页面内容的涂黑工具(那是另一款,用途与本品完全不同)。这些都能挂在现有的「载入→参数→几何纯函数→逐页绘制」结构上,不需要改动界面骨架。
可以定制(二次开发)
这个工具按「一个痛点一个小工具」的思路做,界面和功能都可以按你的实际流程改:比如把「仅供内部审阅 + 平铺 3×2 + 20% 灰」做成打开就带的默认档、固定输出目录与「部门-日期-合同号」的命名规则、每页右下角自动生成「第 N 页 / 共 M 页 + 阅读者姓名或工号」的追溯水印(文字来自一张人员名单表逐页取)、公章图片固定尺寸固定位置做成一键、只对前 3 页和最后 1 页加而不碰中间、或者一次跑完一个文件夹里的所有 PDF 并各自输出。也能和同系列的删页/提取/旋转/拼版串成一条流水(先删掉封面广告页 → 再把拍照页转正 → 最后盖水印)。需要改动的联系方式见站内「联系我们」页面的 QQ 客服,也可以在本文下方留言说明场景。定制合作会连同可编译的工程一起交付。
使用说明与免责声明
请只对你拥有合法权利的文件添加水印。给他人文档加盖水印、或冒用他人名义的图章图片,可能涉及版权、商标与保密义务,责任由操作者自行承担。特别提醒四件事:一是水印不是涂黑,被盖住的文字对象仍然在文件里,用「提取文字」照样能取走,不要用本品来遮盖需要彻底销毁的敏感信息;二是带密码的源文件加水印后,成品不再带密码,本品不做加密,不要把成品当成仍然受保护的那一份发出去;三是中文字体水印会让文件增大十几到几十 KB,这是保证「别人电脑上也能正确显示」的必要代价,如果需要严格控制体积,请改用图片水印或西文字体;四是软件不会改动任何源文件,但输出文件如果与已有文件重名,确认后会被覆盖,重要资料建议先备份或换一个输出目录再处理。本工具按「现状」免费提供,因使用本工具造成的数据损失,作者不承担责任。
9hnn 打开下载页后,在「输入密码」框里填这 4 位,再点它下方的按钮即可下载,不用注册、不用登录。
