我目前正在用Python开发一个数字签名项目,它可以在PDF文档上创建数字签名并对其进行验证。我能够使用以下代码向PDF文件中添加一个数字签名:
PDFNet.Initialize()
doc = PDFDoc(pdf_path)
page1 = doc.GetPage(1)
# Create signature field
sign_field = doc.CreateDigitalSignatureField("Signature")
widgetAnnot = SignatureWidget.Create(doc, Rect(0, 0, 100, 100), sign_field)
page1.AnnotPushBack(widgetAnnot)
sign_field.SignOnNextSave(pkcs12_path, "")
# Save file
output_path = get_only_path(pdf_path) + "output.pdf"
doc.Save(output_path, SDFDoc.e_incremental)
PDFNet.Terminate()
我还能够用以下代码验证文档:
# Get certificate
dsfield_iter = doc.GetDigitalSignatureFieldIterator()
while dsfield_iter.HasNext():
sign_field = dsfield_iter.Current()
cert = sign_field.GetSignerCertFromCMS()
dsfield_iter.Next()
# Save certificate for verification
cert_path = get_only_path(pdf_path) + "certificate.cer"
with open(cert_path, "wb") as cer:
# cert.GetData() return DER format
cer.write(cert.GetData())
# Verifying signature
opts = VerificationOptions(VerificationOptions.e_compatibility_and_archiving)
opts.AddTrustedCertificate(cert_path)
result = doc.VerifySignedDigitalSignatures(opts)
不过,我有个问题。我希望多个人能够在同一文档上签名,并在不同的签名字段中使用自己签名的证书进行签名,同时也能够验证该文档。我在同一个过程中使用了我的代码,但是在不止一个人在上面签名之后,我无法验证签名。我想在这方面寻求帮助,请分享你的想法:
发布于 2022-01-20 19:17:39
是的,您可以添加多个签名字段并使用PDFTron SDK对它们进行签名。只需重复上面的SignOnNextSave
代码,始终确保使用e_incremental
保存。
注意,如果添加了两个或多个签名,当前的PDFTron验证将失败,因为这将严格违反PDF规范描述的默认行为。尽管我至少向Acrobat查询过,而且2+签名也很好,但至少Acrobat似乎在做一些专有的、不符合标准的事情。我不能说其他供应商,如果这对你来说很重要的话。
https://stackoverflow.com/questions/70767892
复制相似问题