数字签名在确保 pdf 文档的真实性和完整性方面发挥着至关重要的作用。它们不仅能可靠地验证签署人的身份,还能确保文档在签名后未被篡改。利用数字签名,你可以显著提升文档的安全性和可信度。在本文中,我们将介绍如何使用 和 python 在 pdf 文件中添加和删除数字签名。
安装 spire.pdf for python
本教程需要 spire.pdf for python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 windows 中。
pip install spire.pdf
如果您不确定如何安装,请参考此教程: 如何在 windows 中安装 spire.pdf for python
python 给 pdf 添加数字签名
你可以使用 spire.pdf for python 提供的 pdfordinarysignaturemaker.makesignature(sigfieldname: str, page: pdfpagebase, x: float, y: float, width: float, height: float, signatureappearance: ipdfsignatureappearance) 方法给 pdf 文档的特定页面添加可见数字签名。详细步骤如下:
- 创建 pdfdocument 类的实例。
- 使用 pdfdocument.loadfromfile() 方法加载 pdf 文档。
- 创建 pdfordinarysignaturemaker 实例,并将 pdfdocument 对象、证书(.pfx)文件路径和证书密码作为参数传递给该类的构造函数。
- 使用 pdfordinarysignaturemaker 类的属性设置签名详细信息,如签署人的姓名、联系信息、位置和签名原因。
- 为签名创建 pdfsignatureappearance 实例,然后自定义签名标签并设置签名图片。
- 使用 pdfdocument.pages[] 属性获取 pdf 文档中的特定页面。
- 使用 pdfordinarysignaturemaker.makesignature(sigfieldname: str, page: pdfpagebase, x: float, y: float, width: float, height: float, signatureappearance: ipdfsignatureappearance) 方法,将数字签名添加到页面的指定位置。
- 使用 pdfdocument.savetofile() 方法保存结果文档。
- python
from spire.pdf.common import *
from spire.pdf import *
# 创建 pdfdocument 实例
doc = pdfdocument()
# 加载pdf文件
doc.loadfromfile("测试.pdf")
# 创建 pdfordinarysignaturemaker 实例
signaturemaker = pdfordinarysignaturemaker(doc, "gary.pfx", "e-iceblue")
# 设置签名属性,如签署人的姓名、联系信息、位置和签名原因
signature = signaturemaker.signature
signature.name = "gary"
signature.contactinfo = " 86 12345678"
signature.location = "中国"
signature.reason = "我是文档作者"
# 创建 pdfsignatureappearance 实例
appearance = pdfsignatureappearance(signature)
# 为“签署人姓名”设置标签
appearance.namelabel = "签署人:"
# 为“联系信息”设置标签
appearance.contactinfolabel = "电话:"
# 为“位置”设置标签
appearance.locationlabel = "地址:"
# 为“签名原因”设置标签
appearance.reasonlabel = "原因:"
# 设置签名图片
appearance.signatureimage = pdfimage.fromfile("sigimg.png")
# 设置签名的图形渲染/显示模式(仅显示签名图片)
appearance.graphicmode = graphicmode.signimageonly
# 设置签名图片的布局
appearance.signimagelayout = signimagelayout.none
# 获取第一页
page = doc.pages[0]
# 将签名添加到页面的指定位置
signaturemaker.makesignature("签名", page, 90.0, 650.0, 260.0, 100.0, appearance)
# 保存已签名的文档
doc.savetofile("数字签名.pdf")
doc.close()
python 给 pdf 添加不可见数字签名
pdf 中的不可见签名是一种特殊的数字签名,它提供了与可见数字签名相同的安全性,但在文档本身中不可见。使用 spire.pdf for python 的 pdfordinarysignaturemaker.makesignature(sigfieldname: str) 方法,你可以将不可见数字签名添加到 pdf 文档中。详细步骤如下:
- 创建 pdfdocument 类的实例。
- 使用 pdfdocument.loadfromfile() 方法加载 pdf 文档。
- 创建 pdfordinarysignaturemaker 实例,并将 pdfdocument 对象、证书(.pfx)文件路径和密码作为参数传递给该类的构造函数。
- 使用 pdfordinarysignaturemaker.makesignature(sigfieldname: str) 方法将不可见数字签名添加到 pdf 文档中。
- 使用 pdfdocument.savetofile() 方法保存结果文档。
- python
from spire.pdf.common import *
from spire.pdf import *
# 创建 pdfdocument 实例
doc = pdfdocument()
# 加载pdf文档
doc.loadfromfile("测试.pdf")
# 创建 pdfordinarysignaturemaker 实例
signaturemaker = pdfordinarysignaturemaker(doc, "gary.pfx", "e-iceblue")
# 给文档添加不可见数字签名
signaturemaker.makesignature("签名")
# 保存已签名的文档
doc.savetofile("不可见签名.pdf")
doc.close()
python 删除 pdf 中的数字签名
要从 pdf 文档中删除数字签名,你需要遍历文档中的所有表单域,找到类型为 pdfsignaturefieldwidget 的表单域,然后将其从文档中删除。详细步骤如下:
- 创建 pdfdocument 类的实例。
- 使用 pdfdocument.loadfromfile() 方法加载 pdf 文档。
- 使用 pdfdocument.form 属性获取文档的表单域集合。
- 从后往前遍历表单域集合。
- 判断域是否为 pdfsignaturefieldwidget 对象。
- 如果结果为真,则使用 pdfformfieldwidgetcollection.fieldswidget.removeat(index) 方法从文档中删除该域。
- 使用 pdfdocument.savetofile() 方法保存结果文档。
- python
from spire.pdf.common import *
from spire.pdf import *
# 创建 pdfdocument 实例
doc = pdfdocument()
# 加载pdf文档
doc.loadfromfile("数字签名.pdf")
# 获取文档中的表单域集合
pdfform = doc.form
formwidget = pdfformwidget(pdfform)
# 检查集合中是否有表单域
if formwidget.fieldswidget.count > 0:
# 从后往前遍历所有表单域
for i in range(formwidget.fieldswidget.count - 1, -1, -1):
field = formwidget.fieldswidget[i]
# 检查域是否为pdfsignaturefieldwidget
if isinstance(field, pdfsignaturefieldwidget):
# 删除域
formwidget.fieldswidget.removeat(i)
# 保存文档
doc.savetofile("删除签名.pdf")
doc.close()
申请临时 license
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用javascript。获取有效期 30 天的临时许可证。