Python 在PDF中添加数字签名

在数字化时代,文件的安全性和可信度变得尤为重要。无论是商业文件、法律文件还是个人文件,都可能需要证明其来源的真实性和完整性。PDF数字签名就是解决这些问题的关键工具。PDF数字签名不仅能够确保文件的安全性,还能提高工作效率,减少纸质文件处理,从而为企业和个人带来巨大的便利和保障。本文将提供以下两示例来介绍如何使用 Python 为PDF文档添加数字签名

文章目录

    • [Python 在PDF中添加可见签名](#Python 在PDF中添加可见签名)
    • [Python 在PDF中添加不可见签名](#Python 在PDF中添加不可见签名)

安装所需Python 库
Spire.PDF for Python 库现已支持在PDF数字签名,可以通过以下以下 pip 命令安装该库:

复制代码
pip install Spire.PDF

更新库可以使用:

复制代码
pip install --upgrade Spire.PDF

Python 在PDF中添加可见签名

使用Spire.PDF for Python库在PDF文档中添加包含图片和签名细节信息的数字签名的主要步骤如下:

  1. 加载PDF文档。
  2. 创建 PdfOrdinarySignatureMaker 对象,并传入PDF文档, pfx 证书和证书密码作为参数。
  3. 使用 PdfOrdinarySignatureMaker 类的属性设置签名细节,如签名者姓名、联系方式、地点和签名原因。
  4. 为签名创建一个 PdfSignatureAppearance 实例,然后自定义签名标签并设置签名图像。
  5. 使用 PdfDocument.Pages[] 属性获取PDF文档中的特定页面。
  6. 调用 PdfOrdinarySignatureMaker.MakeSignature(sigFieldName: str, page: PdfPageBase,x: float,y: float,width: float,height: float,signatureAppearance: IPdfSignatureAppearance) 方法将数字签名添加到页面的特定位置。
  7. 保存签名后的PDF文档。

Python 代码:

python 复制代码
from spire.pdf.common import *
from spire.pdf import *

# 加载PDF文档
pdf = PdfDocument()
pdf.LoadFromFile("考核.pdf")

# 创建PdfOrdinarySignatureMaker对象
signatureMaker = PdfOrdinarySignatureMaker(pdf, "gary.pfx", "e-iceblue")

# 设置签名属性
signature = signatureMaker.Signature
signature.Name = "Gary"
signature.ContactInfo = "+86 12345678"
signature.Location = "China"
signature.Reason = "Document creator"

# 自定义可见签名标签
appearance = PdfSignatureAppearance(signature)
appearance.NameLabel = "Signer: "
appearance.ContactInfoLabel = "Phone: "
appearance.LocationLabel = "Location: "
appearance.ReasonLabel = "Reason: "
# 设置签名图片
appearance.SignatureImage = PdfImage.FromFile("C:\\Users\\Administrator\\Desktop\\签名.jpg")
appearance.SignImageLayout = SignImageLayout.Stretch
# 将显示模式设置为同时显示图片和签名信息
appearance.GraphicMode = GraphicMode.SignImageAndSignDetail

# 获取PDF文档第一页
page = pdf.Pages[0]

# 将签名添加到页面的指定位置
signatureMaker.MakeSignature("Gary签名", page, 150.0, 720.0, 260.0, 100.0, appearance)

# 保存PDF文档
pdf.SaveToFile("PDF可见签名.pdf")
pdf.Close()

Python 在PDF中添加不可见签名

可见数字签名会在文档页面上显示签名图片或签名细节,因此有时可能会对文档的外观产生影响,而不可见签名则能保持文档的外观整洁。在PDF中添加不可见签名的步骤相对简单一些,具体如下:

  1. 加载PDF文档。
  2. 创建 PdfOrdinarySignatureMaker 对象,并传入PDF文档, pfx 证书和证书密码作为参数。
  3. 使用 PdfOrdinarySignatureMaker.MakeSignature(sigFieldName: str) 方法为PDF文档添加不可见的数字签名。
  4. 保存签名后的PDF文档。

Python 代码:

python 复制代码
from spire.pdf.common import *
from spire.pdf import *

# 加载PDF文档
pdf = PdfDocument()
pdf.LoadFromFile("考核.pdf")

# 创建PdfOrdinarySignatureMaker对象
signatureMaker = PdfOrdinarySignatureMaker(pdf, "gary.pfx", "e-iceblue")

# 在文档中添加不可见签名
signatureMaker.MakeSignature("Gary签名")

# 保存文档
pdf.SaveToFile("PDF签名.pdf")
pdf.Close()

通过以上两个示例,我们可以在不同的场合采用最佳签名方式,确保文档的安全性和真实性 。对于生成文档中的红色水印可以申请试用授权移除:
https://www.e-iceblue.cn/misc/temporary-license.html

相关推荐
北凉军5 分钟前
java连接达梦数据库,用户名是其他库的名称无法指定库,所有mapper查询的都是以用户名相同的库内的表
java·开发语言·数据库
沛沛老爹22 分钟前
Web转AI架构篇 Agent Skills vs MCP:工具箱与标准接口的本质区别
java·开发语言·前端·人工智能·架构·企业开发
avi911130 分钟前
Unity 天命6源码- 商业游戏说明分析
开发语言·unity·c#·游戏开发·游戏源码
黎雁·泠崖31 分钟前
吃透Java操作符进阶:算术+移位操作符 全解析(Java&C区别+完整案例+避坑指南)
java·c语言·python
低频电磁之道1 小时前
编译C++的几种方式(MSVC编译器)
开发语言·c++
Zsy_0510031 小时前
【C++】类和对象(一)
开发语言·c++
用针戳左手中指指头2 小时前
AI小白搞AI之目标检测:王者荣耀画面识别
人工智能·python·yolo·目标检测·王者荣耀
星火开发设计2 小时前
Java面向对象三大特性:封装、继承与多态的深度解析及实战
java·开发语言·microsoft·多态·继承·面向对象·封装
大学生毕业题目2 小时前
毕业项目推荐:105-基于yolov8/yolov5/yolo11的烟草等级检测识别系统(Python+卷积神经网络)
人工智能·python·yolo·目标检测·cnn·pyqt·烟草等级
旅途中的宽~2 小时前
【Python】pip install -v e .命令不想自动更新torch版本
开发语言·python·pip