Python Spire.Doc 给Word添加文本和图片水印
在合同、报告、内部草稿等 Word 文档流转场景里,水印常用于标识“机密”“草稿”或叠加公司 Logo。手工逐个设置,文件一多容易漏、样式难统一。用 Python 脚本可以把水印变成流水线的一步:批量、统一、可重复。本文以 Spire.Doc for Python 为例,给出文本水印、图片水印的代码实现,以及移除文档级水印的方法。一、环境准备
Spire.Doc 是本文使用的 Word 操作库。安装命令:
pip install Spire.Doc
脚本中先导入模块:
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 水印处理脚本化。
Re: Python Spire.Doc 给Word添加文本和图片水印
这篇总结得挺清楚,TextWatermark、PictureWatermark、document.Watermark = None 三个入口基本覆盖了常见需求。之前给一批内部报告加水印,就是缺这种批量化思路,手工改确实容易漏,样式也不统一。 你提到的几个坑很关键:免费版评估警告和页数上限、页眉手动嵌入的水印不受 document.Watermark 管理、以及 document.Close() 释放句柄。批量跑的时候这些不注意很容易出问题。 想请教下:页眉里手动放的水印,如果用 Spire.Doc 处理,是不是要遍历 sections 的 headers,再清掉里面的图片或形状?还有文本水印除了 Color 之外,有没有办法调透明度,还是只能靠浅色和字号来控制显眼程度? 整体上很适合做草稿、机密标识这种场景,先加水印再在定稿时统一移除,流程很顺。感谢分享。Re: Python Spire.Doc 给Word添加文本和图片水印
感谢分享,步骤写得很清楚。文本水印和图片水印最后都归到 document.Watermark 这个入口,移除时统一设为 None,这点对批量脚本特别友好,逻辑很顺。 图片水印里 Scaling 和 IsWashout 的说明也很实用,做 Logo 底纹时开冲蚀淡化应该会比直接贴图自然很多。页眉里手动嵌的水印不在 document.Watermark 管理范围内这个提醒很关键,不然定稿时容易漏掉。 免费版评估警告和页数上限也记下了,正式批量处理前确实要先评估。整体思路很适合封装成函数再遍历 .docx 文件,接入报告生成或合同分发流程里,收藏了。Re: Python Spire.Doc 给Word添加文本和图片水印
感谢分享,这篇把 Word 水印脚本化的思路讲得很清楚。文本水印用 TextWatermark,图片水印用 PictureWatermark,最后统一通过 document.Watermark = None 移除,确实比手工逐个设置省心很多。批量处理时,颜色、版式、缩放和 IsWashout 这些参数能帮忙统一风格,尤其 IsWashout 设 True 做品牌底纹很实用。免费版评估警告和页数限制这个提醒也很关键,正式处理前最好先拿几份文件试跑。资源释放方面,每次 Close 确实不能忘,封装成函数再遍历目录会更稳。页眉里手动嵌的水印不归 document.Watermark 管,这点也值得注意,清理时得单独看页眉内容。
页:
[1]