国产化PDF处理控件Spire.PDF教程:如何使用 Python 添加水印到 PDF
<p><img src="https://image.evget.com/attachment/keditor/image/20250820/140440_0.png"></p><p>水印技术是保护文档安全、声明所有权及防止未经授权复制的关键手段。无论是分发草稿还是为最终交付成果添加品牌标识,使用水印都能有效保护您的内容。<strong>E</strong><strong>-iceblue</strong>旗下<strong><em>Spire系列产品</em></strong>是国产文档处理领域的优秀产品,<strong><em>支持国产化信创</em></strong>,帮助企业高效构建文档处理的应用程序。<strong><em>本教程将指导您如何使用 </em></strong><strong><em>Spire.PDF for Python</em></strong><strong><em> </em></strong><strong><em>在 Python 中为 PDF 文件添加水印</em></strong><strong><em> 。</em></strong></p>
<p>我们将逐步演示如何插入文字水印与图片水印、调整透明度与定位,并解决常见问题——所有步骤均配有清晰且注释完善的代码示例。</p>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong>Spire.PDF for Python免费试用下载 ,请联系Spire官方授权代理商<span style="text-decoration: underline"><span style="color: rgba(35, 111, 161, 1)">慧都科技</span></span></strong></span></p>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong><em>加入Spire技术交流QQ群(125237868),与更多开发者一起提升文档开发技能。</em></strong></span></p>
<h2>Python PDF 水印处理库</h2>
<p><strong><u>Spire.PDF for Python</u></strong> 是一款功能强大的 PDF 处理库,特别针对水印功能提供以下特性:</p>
<ul>
<li><strong>精准定位</strong> :支持高精度水印定位与旋转</li>
<li><strong>透明度调节</strong> :灵活的透明度控制选项</li>
<li><strong>多格式支持</strong> :可添加文字或图片水印</li>
<li><strong>灵活应用</strong> :支持单页或整份文档的水印添加</li>
<li><strong>无损质量</strong> :保持原始 PDF 文件质量</li>
</ul>
<p>开始前请确保已通过以下命令安装库:</p>
<pre class="prettyprint lang-js highlighter-hljs"><code>pip install spire.pdf</code></pre>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong>Spire.PDF for Python免费试用下载 ,请联系Spire官方授权代理商<span style="text-decoration: underline"><span style="color: rgba(35, 111, 161, 1)">慧都科技</span></span></strong></span></p>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong><em>加入Spire技术交流QQ群(125237868),与更多开发者一起提升文档开发技能。</em></strong></span></p>
<h2>添加文字水印到 PDF</h2>
<p>以下代码演示如何为 PDF 每页添加倾斜的"禁止复制"文字水印,包含字号、颜色、位置、旋转角度及透明度的专业级设置:</p>
<pre class="prettyprint lang-py highlighter-hljs"><code>from spire.pdf import *
from spire.pdf.common import *
import math
# 创建PdfDocument类的对象
doc = PdfDocument()
# 从指定路径加载PDF文档
doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf")
# 为水印字体创建PdfTrueTypeFont类的对象
font = PdfTrueTypeFont("黑体", 48.0, 0, True)
# 指定水印文本
text = "禁 止 复 制"
# 测量文本的尺寸以确保正确定位
text_width = font.MeasureString(text).Width
text_height = font.MeasureString(text).Height
# 循环遍历文档中的每一页
for i in range(doc.Pages.Count):
# 获取当前页面
page = doc.Pages.get_Item(i)
# 保存当前画布状态
state = page.Canvas.Save()
# 计算页面的中心坐标
x = page.Canvas.Size.Width/ 2
y = page.Canvas.Size.Height / 2
# 将坐标系平移到中心,使页面的中心成为原点(0, 0)
page.Canvas.TranslateTransform(x, y)
# 将画布逆时针旋转45度以显示水印
page.Canvas.RotateTransform(-45.0)
# 设置水印的透明度
page.Canvas.SetTransparency(0.4)
# 使用负偏移量在中心位置绘制水印文本
page.Canvas.DrawString(text, font, PdfBrushes.get_Blue(), PointF(-text_width / 2, -text_height / 2))
# 恢复画布状态,以防止变换影响后续绘图
page.Canvas.Restore(state)
# 将修改后的文档保存到新的PDF文件
doc.SaveToFile("output/TextWatermark.pdf")
# 释放资源
doc.Dispose()</code></pre>
<p><strong>代码解析:</strong></p>
<ol>
<li><strong>加载 PDF 文档</strong> :通过 PdfDocument 类从指定路径加载待处理的 PDF 文件。</li>
<li><strong>配置水印文本</strong> :设置水印文字内容("禁 止 复 制"),并指定字体(黑体,48磅字号),同时测量文本尺寸以实现精准定位。</li>
<li><strong>应用图形变换</strong> :针对每个页面执行以下操作:
<ul>
<li>将坐标系原点移至页面中心</li>
<li>画布逆时针旋转45度</li>
<li>设置水印透明度为40%</li>
</ul>
</li>
<li><strong>绘制水印</strong> :在坐标(-text_width/2, -text_height/2)处绘制文本,该计算确保无论画布如何旋转,文字始终以页面中心为基准对称分布。</li>
<li><strong>保存文档</strong> :将处理后的文档另存为新 PDF 文件。</li>
</ol>
<p><strong>效果图:</strong></p>
<p><img src="https://image.evget.com/attachment/keditor/image/20250820/140946_9.png"></p>
<h2>添加图片水印到 PDF</h2>
<p>以下代码演示如何为PDF每一页添加半透明图片水印,确保精准定位并呈现专业视觉效果。</p>
<pre class="prettyprint lang-py highlighter-hljs"><code>from spire.pdf import *
from spire.pdf.common import *
# 创建PdfDocument类的对象
doc = PdfDocument()
# 从指定路径加载PDF文档
doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf")
# 从指定路径加载水印图像
image = PdfImage.FromFile("C:\\Users\\Administrator\\Desktop\\logo.png")
# 获取加载的图像的宽度和高度以进行定位
imageWidth = float(image.Width)
imageHeight = float(image.Height)
# 循环遍历文档中的每一页以应用水印
for i in range(doc.Pages.Count):
# 获取当前页面
page = doc.Pages.get_Item(i)
# 将水印的透明度设置为50%
page.Canvas.SetTransparency(0.5)
# 获取当前页面的尺寸
pageWidth = page.ActualSize.Width
pageHeight = page.ActualSize.Height
# 计算x和y坐标以将图像居中放置在页面上
x = (pageWidth - imageWidth) / 2
y = (pageHeight - imageHeight) / 2
# 在计算出的中心位置绘制图像
page.Canvas.DrawImage(image, x, y, imageWidth, imageHeight)
# 将修改后的文档保存到新的PDF文件
doc.SaveToFile("output/ImageWatermark.pdf")
# 释放资源
doc.Dispose()</code></pre>
<p><strong>代码解析:</strong></p>
<ol>
<li><strong>加载 PDF</strong> <strong>文档</strong> :通过PdfDocument类从指定路径加载需要添加水印的PDF文件。</li>
<li><strong>配置水印图片:</strong> 从指定路径加载水印图片文件,并获取图片尺寸参数以实现精确定位。</li>
<li><strong>应用图像处理</strong> :对每个页面执行以下操作:
<ul>
<li>设置水印透明度为50%</li>
<li>计算页面中心坐标作为水印位置基准</li>
</ul>
</li>
<li><strong>绘制水印图像</strong> :根据计算出的中心坐标绘制水印图片,确保在每页居中显示。</li>
<li><strong>保存文档</strong> :将添加水印后的文档另存为新的PDF文件。</li>
</ol>
<p><strong>效果图:</strong></p>
<p><img src="https://image.evget.com/attachment/keditor/image/20250820/141337_2.png"></p>
<p>除了水印之外,您还可以为 PDF 添加图章。与水印固定位置不同,图章可以自由移动或删除,为文档批注提供了更大的灵活性。</p>
<h2>常见问题排查</h2>
<ol>
<li>水印未显示:
<ul>
<li>检查文件路径是否正确</li>
<li>确认透明度未设置为0(完全透明)</li>
<li>确保水印坐标位于页面边界内</li>
</ul>
</li>
<li>质量问题:
<ul>
<li>文字水印建议使用更高质量的字体</li>
<li>图片水印需确保足够的分辨率</li>
</ul>
</li>
<li>旋转异常:
<ul>
<li>注意旋转是围绕当前原点进行的</li>
<li>变换顺序很重要(先平移后旋转)</li>
</ul>
</li>
</ol>
<h2>总结</h2>
<p>借助 <strong><u>Spire.PDF for Python</u></strong> 库,为 PDF 文档添加水印既简单便捷又功能强大。您既可以批量添加醒目的"机密"警示水印,也能嵌入品牌 Logo 作为优雅的背景标识。该库支持灵活的坐标定位、透明度调节、旋转等高级功能,让您能够根据文档类型和使用场景,轻松打造专业级的水印解决方案。</p>
<h2>问答集锦</h2>
<h3>Q1. 能否在同一个PDF中同时添加文字和图片水印?</h3>
<p>可以,您只需在遍历PDF页面的循环中结合使用两种水印添加方法即可。</p>
<h3>Q2. 如何旋转图片水印?</h3>
<p>与文字水印示例类似,在绘制图片前使用 <strong>Canvas.RotateTransform(</strong> <strong>角度)</strong> 方法即可实现旋转。</p>
<h3>Q3. Spire.PDF是否支持透明PNG作为水印?</h3>
<p>支持。当使用PNG图片作为水印时,Spire.PDF会保留其原有的透明度。</p>
<h3>Q4. 能否为不同页面添加不同的水印?</h3>
<p>完全可以。您可以在页面循环中添加条件判断逻辑,根据页码或其他标准为不同页面应用不同的水印。</p>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong>Spire.PDF for Python免费试用下载 ,请联系Spire官方授权代理商<span style="text-decoration: underline"><span style="color: rgba(35, 111, 161, 1)">慧都科技</span></span></strong></span></p>
<p style="text-align: center"><span style="color: rgba(230, 126, 35, 1)"><strong><em>加入Spire技术交流QQ群(125237868),与更多开发者一起提升文档开发技能。</em></strong></span></p><br><br>
来源:https://www.cnblogs.com/software-Development/p/19049092
頁:
[1]