在 Python 中使用智能卡签署 PDF 文档
Contents
[
Hide
]
Aspose.PDF 提供强大的功能,用于集成可视化和加密签名组件,确保数字签名 PDF 文档的真实性和专业呈现。
当您的签名过程依赖于存储在硬件支持设备(如智能卡、USB 令牌或受管理的证书存储)中的证书时,请使用此工作流。
使用签名字段进行智能卡签名
本示例演示如何使用 Aspose.PDF for Python 通过外部证书对 PDF 文档进行数字签名,并应用自定义签名外观图像:
- 打开 PDF 文档。
- 创建 PdfFileSignature 对象并将其绑定到文档。
- 使用自定义方法检索本地数字证书
get_local_certificate(). - 基于所选证书设置 ExternalSignature。
- 应用自定义签名外观图像(例如,公司徽标或手写签名)。
- 在文档的首页进行数字签名,并附加指定的元数据(原因、联系方式、位置)。
- 将已签名的文档保存到新的输出文件。
此方法非常适用于需要通过外部证书以编程方式进行签名的情况——例如硬件令牌、证书存储或受信任的提供者——并以个性化的视觉布局呈现。
以下是使用智能卡签署 PDF 文档的代码片段:
import sys
from os import path
import aspose.pdf as ap
import aspose.pydrawing as drawing
def sign_with_smart_card(infile: str, outfile: str, pngfile: str) -> None:
"""Sign a PDF document using a smart-card certificate."""
with ap.Document(infile) as document:
with ap.facades.PdfFileSignature() as pdf_signature:
pdf_signature.bind_pdf(document)
external_signature = ap.forms.ExternalSignature(get_local_certificate())
pdf_signature.signature_appearance = pngfile
pdf_signature.sign(
1,
"Reason",
"Contact",
"Location",
True,
drawing.Rectangle(100, 100, 200, 200),
external_signature,
)
pdf_signature.save(outfile)
验证数字签名
此代码片段演示了如何使用 Aspose.PDF for Python 验证 PDF 文档中的数字签名:
- 打开 PDF 文件。
- 创建一个 ‘PdfFileSignature object’ 并将其绑定到文档。
- 使用 ‘get_signature_names()’ 检索所有签名字段名称的列表。
- 通过 ‘verify_signature()’ 遍历每个签名并验证其有效性。
- 如果任何签名验证失败,则抛出异常。
import sys
from os import path
import aspose.pdf as ap
import aspose.pydrawing as drawing
def verify_external_signature(infile: str) -> None:
"""Verify an external signature in a PDF document."""
with ap.Document(infile) as document:
with ap.facades.PdfFileSignature(document) as pdf_signature:
for signature_name in pdf_signature.get_signature_names(True):
if not pdf_signature.verify_signature(signature_name):
raise Exception("Not verified")
使用外部证书签名
此代码片段演示了如何使用 Aspose.PDF for Python 并结合外部证书,在 PDF 文档中添加并签署数字签名字段:
- 以二进制流打开 PDF 文件。
- 创建 SignatureField 并将其放置在文档的第一页的指定位置。
- 使用自定义方法检索本地数字证书
get_local_certificate(). - 设置 ExternalSignature,并提供权限、原因和联系信息等元数据。
- 为签名字段分配唯一的字段名称 (partial_name = “sig1”).
- 在 PDF 的表单字段中添加签名字段。
- 使用外部证书对字段进行签名。
- 将已签名的文档保存到输出文件。
import sys
from os import path
import aspose.pdf as ap
import aspose.pydrawing as drawing
def get_signature_info_using_signature_field(infile: str, outfile: str) -> None:
"""Create a signature field and sign it with an external certificate."""
with open(infile, "rb+") as file_stream:
document = ap.Document(file_stream)
signature_field = ap.forms.SignatureField(
document.pages[1],
ap.Rectangle(100, 400, 10, 10, True),
)
selected_certificate = get_local_certificate()
external_signature = ap.forms.ExternalSignature(selected_certificate)
external_signature.authority = "Me"
external_signature.reason = "Reason"
external_signature.contact_info = "Contact"
signature_field.partial_name = "sig1"
document.form.add(signature_field, 1)
signature_field.sign(external_signature)
document.save(outfile)