在合同、报告、内部草稿等 Word 文档流转场景里,水印常用于标识“机密”“草稿”或叠加公司 Logo。手工逐个设置,文件一多容易漏、样式难统一。用 Python 脚本可以把水印变成流水线的一步:批量、统一、可重复。本文以 Spire.Doc for Python 为例,给出文本水印、图片水印的代码实现,以及移除文档级水印的方法。
一、环境准备
Spire.Doc 是本文使用的 Word 操作库。安装命令:脚本中先导入模块:- from spire.doc import *
- from spire.doc.common import *
复制代码
二、添加文本水印
TextWatermark 对象描述文本水印。Text 设置显示文本;FontSize 控制字号;Color 取预定义颜色;Layout 决定排布方式,WatermarkLayout.Diagonal 表示沿对角线倾斜铺满页面。把设置好的对象赋给 document.Watermark,再保存文档即可。- from spire.doc import *
- from spire.doc.common import *
- # 加载 Word 文档
- document = Document()
- document.LoadFromFile("Sample.docx")
- # 创建文本水印并设置外观
- txtWatermark = TextWatermark()
- txtWatermark.Text = "Confidential"
- txtWatermark.FontSize = 95
- txtWatermark.Color = Color.get_Blue()
- txtWatermark.Layout = WatermarkLayout.Diagonal
- # 把水印应用到文档
- document.Watermark = txtWatermark
- # 保存结果
- document.SaveToFile("TextWatermark.docx", FileFormat.Docx)
- document.Close()
复制代码 执行后生成 TextWatermark.docx。TextWatermark() 先构造空对象,再通过属性设置外观。FontSize 越大,水印文字越明显。Color.get_Blue() 只是预定义颜色之一,也可以使用 Color.get_Red()、Color.get_Gray() 等;需要任意颜色时用 Color.FromArgb(r, g, b)。Layout 选用 Diagonal 时,文字会沿对角线倾斜。
三、添加图片水印
图片水印用 PictureWatermark 对象。SetPicture() 接收图片本地路径,常见 PNG、JPG 等格式可用;Scaling 是缩放百分比,250 表示按原始尺寸的 250% 放置;IsWashout 控制是否做冲蚀淡化,False 表示保留原色、不淡化。- from spire.doc import *
- from spire.doc.common import *
- document = Document()
- document.LoadFromFile("Sample.docx")
- # 创建图片水印并设置外观
- picture = PictureWatermark()
- picture.SetPicture("Logo.png")
- picture.Scaling = 250
- picture.IsWashout = False
- # 把水印应用到文档
- document.Watermark = picture
- document.SaveToFile("ImageWatermark.docx", FileFormat.Docx)
- document.Close()
复制代码 生成 ImageWatermark.docx。同样是把 PictureWatermark 对象赋给 document.Watermark。如果希望 Logo 更淡、更像背景底纹,可将 IsWashout 设为 True。
四、移除文档中的水印
定稿或对外发布前,常需要去掉草稿阶段的水印。document.Watermark 管理的是文档级水印,无论之前添加的是文本水印还是图片水印,将其设为 None 即可移除:- from spire.doc import *
- from spire.doc.common import *
- document = Document()
- document.LoadFromFile("ImageWatermark.docx")
- # 将水印设为 None 即可移除文本和图片水印
- document.Watermark = None
- document.SaveToFile("RemoveWatermark.docx", FileFormat.Docx2013)
- document.Close()
复制代码 该方法不区分水印类型。但如果某些水印是以页眉图片等形式手动嵌入的,则不在 document.Watermark 管理范围内,需要另外处理页眉内容。
五、参数与批量处理提示
- 版式:WatermarkLayout 除 Diagonal 外也提供水平铺排选项,可按文档风格切换。
- 颜色:Color.get_Blue()、Color.get_Red()、Color.get_Gray() 等是预定义颜色;任意颜色使用 Color.FromArgb(r, g, b)。
- 淡化:图片水印把 IsWashout 设为 True,会得到更淡、更不抢眼的背景效果,适合做品牌底纹。
- 资源释放:每次处理完文档都调用 document.Close(),避免长期持有文件句柄。
- 免费版限制:Spire.Doc 免费版会在文档上添加评估警告,并对页数有上限,正式批量处理时需注意这一限制。
- 批量化:可以把加载文档、设置 document.Watermark、保存、Close 的流程封装成函数,再遍历目录中的 .docx 文件,把加水印接入报告生成、合同分发等自动化流程。
总结:TextWatermark 添加文本水印,PictureWatermark 添加图片水印,document.Watermark = None 移除文档级水印。掌握这三个入口后,结合批量遍历逻辑,就能把 Word 水印处理脚本化。 |