使用 Python 轻松添加文本水印到 PDF

在现代办公环境中,PDF 文档的安全性变得愈发重要。添加水印是确保资料安全,防止未授权复制的一种有效手段。本文将介绍如何使用 Python 的 Spire.PDF 库为 PDF 文档添加文本水印。

Spire.PDF 简介

Spire.PDF 是一个功能强大的 PDF 处理库,支持多种 PDF 操作,包括创建、编辑、转换和打印 PDF 文档。对于想要在 Python 中实现 PDF 操作的开发者而言,Spire.PDF 提供了简洁的 API,让用户能够轻松访问和操作 PDF 文件。

安装 Spire.PDF

在使用 Spire.PDF 之前,需要先进行安装。可以通过以下命令在命令行中使用 pip 安装该库:

bash 复制代码
pip install spire-pdf

确保在执行上述命令之前,已经安装了 Python 环境和 pip。

为 PDF 文档添加水印的示例代码

接下来,我们将通过一个示例代码来演示如何为 PDF 文档添加文本水印。以下是简化后的代码示例:

python 复制代码
from spire.pdf import PdfDocument
from spire.pdf.common import PdfTrueTypeFont, PdfBrushes, PointF

# 创建 PdfDocument 类的对象并加载 PDF
doc = PdfDocument()
doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf")

# 创建水印字体
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

    # 调整坐标系,使页面中心成为原点
    page.Canvas.TranslateTransform(x, y)
    page.Canvas.RotateTransform(-45.0)  # 逆时针旋转45度
    
    page.Canvas.SetTransparency(0.4)  # 设置透明度
    
    # 绘制水印文本
    page.Canvas.DrawString(text, font, PdfBrushes.get_Blue(), PointF(-text_width / 2, -text_height / 2))
    
    page.Canvas.Restore(state)  # 恢复画布状态

# 保存修改后的文档
doc.SaveToFile("output/TextWatermark.pdf")
doc.Dispose()  # 释放资源

代码解析

  1. 加载 PDF 文档 :首先,我们通过 PdfDocument 类加载指定路径的 PDF 文档。
  2. 设置水印字体和文本 :接着,我们创建一个 PdfTrueTypeFont 对象,指定字体、大小和样式,并定义水印文本。
  3. 计算文本尺寸 :使用 MeasureString 方法获取文本的宽度和高度,以便正确定位水印。
  4. 遍历文档的每一页 :使用 for 循环遍历文档中的每一页,在每一页上绘制水印。
  5. 保存和释放资源 :最后,将修改后的文档保存到新的 PDF 文件,并释放资源。

总结

通过上述代码,开发者可以轻松地为 PDF 文档添加文本水印。这不仅提高了文档的安全性,还增强了其专业性。Spire.PDF 库提供了丰富的功能,极大地方便了 PDF 文件的处理。无论是个人项目还是企业级解决方案,Spire.PDF 都是一个值得考虑的选择。

希望本文能帮助您快速熟悉如何使用 Python 为 PDF 添加水印。待您自己试验时,请确保您有权限对相关 PDF 文档进行修改!

相关推荐
德思特10 小时前
2026 低空经济无人机与 eVTOL GNSS 模拟器选型指南:四大硬核标准与设备推荐
经验分享·gnss
恒锐丰科技林技术员11 小时前
EG2103 高压 MOS/IGBT 驱动芯片解析:半桥驱动的高性价比之选
经验分享·嵌入式硬件·硬件工程
知产xiao_xin11 小时前
专利主体及权利归属
经验分享·笔记·知识产权
2601_9653842612 小时前
从微生态与流体力学视角看:“口水臭”的系统级成因与清洁边界
经验分享·笔记
火眼金睛记单词13 小时前
背单词总记不住不妨换条路子走
经验分享
Simon_lca13 小时前
ZARA、H&M、SHEIN验厂差异全对比:一套底层记录,三套接口输出
大数据·人工智能·经验分享·科技·制造
疯狂奔跑华丽跌倒13 小时前
医药行业数据治理工具选型,需匹配业务与AI落地需求
大数据·人工智能·经验分享
lazy H14 小时前
【计算机网络】第 2 篇:一条数据如何穿过网络?彻底理解数据封装与解封装
网络·经验分享·后端·学习·计算机网络
波力海苔夹心脆67514 小时前
VisionMaster 两级位置修正实战:塑料外壳与金属件装配角度检测
经验分享·计算机视觉·c#·visionmaster·海康机器人·位置修正
上海广测检测科技有限公司15 小时前
无线鼠标出口欧盟CE认证准备要点:RED指令下的射频、安全与电池义务梳理
经验分享·安全