从 Aspose PDF 迁移到 IronPDF
"签名"在IronPDF中意味着三件不同的事情,它们不可互换:由证书支持的防篡改数字签名、一种手写图像的视觉印章,以及供用户稍后签名的交互式字段。 他们的安全属性不同,因此用例沿此线分裂。加密核心是PdfSignature类,它使用从.pfx或.p12文件加载的X509Certificate2,并通过pdf.Sign(...)应用。 这样就将身份绑定到内容,因此任何后续编辑都会破坏签名。
防篡改合同和协议
大多数团队先会选择这一项。证书签名证明文档是自创且未更改,并让您嵌入审计跟踪(理由、位置、联系人、日期)和经过信任的时间戳:
using IronPdf;
using IronPdf.Signing;
using System;
var pdf = PdfDocument.FromFile("contract.pdf");
var signature = new PdfSignature("certificate.pfx", "password")
{
SigningReason = "Contractual Agreement",
SigningLocation = "Chicago, USA",
SignatureDate = DateTime.Now,
TimeStampUrl = new Uri("http://timestamp.digicert.com"),
TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256
};
pdf.Sign(signature);
pdf.SaveAs("contract-signed.pdf");
using IronPdf;
using IronPdf.Signing;
using System;
var pdf = PdfDocument.FromFile("contract.pdf");
var signature = new PdfSignature("certificate.pfx", "password")
{
SigningReason = "Contractual Agreement",
SigningLocation = "Chicago, USA",
SignatureDate = DateTime.Now,
TimeStampUrl = new Uri("http://timestamp.digicert.com"),
TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256
};
pdf.Sign(signature);
pdf.SaveAs("contract-signed.pdf");
Imports IronPdf
Imports IronPdf.Signing
Imports System
Dim pdf = PdfDocument.FromFile("contract.pdf")
Dim signature = New PdfSignature("certificate.pfx", "password") With {
.SigningReason = "Contractual Agreement",
.SigningLocation = "Chicago, USA",
.SignatureDate = DateTime.Now,
.TimeStampUrl = New Uri("http://timestamp.digicert.com"),
.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256
}
pdf.Sign(signature)
pdf.SaveAs("contract-signed.pdf")
来自可信授权的时间戳提供了何时文档被签署的密码验据,独立于本地时钟——这对于注册和受管要求至关重要。
签署后锁定文档
SignaturePermissions设置控制之后允许的操作:NoChangesAllowed锁定文档,FormFillingAllowed仅允许字段输入,AnnotationsAndFormFillingAllowed还允许注释。 任何不允许的操作都会使签名失效,这适用于颁发证书、已批准的政策和确定的声明。
多方审批工作流
因为PDF支持增量保存,因此签名适用于特定修订。 每个批准者签署他们自己的,而历史记录会记录谁签署了什么、何时和变更的内容。 这涵盖了共同签署和顺序签署。
验证和审核把关
管道可以拒绝任何未能验证的文档,然后回滚或剥离签名:
var pdf = PdfDocument.FromFile("signed-report.pdf");
bool valid = pdf.VerifySignatures();
if (!valid)
{
pdf.RemoveSignatures();
pdf.SaveAs("report-unsigned.pdf");
}
var pdf = PdfDocument.FromFile("signed-report.pdf");
bool valid = pdf.VerifySignatures();
if (!valid)
{
pdf.RemoveSignatures();
pdf.SaveAs("report-unsigned.pdf");
}
Dim pdf = PdfDocument.FromFile("signed-report.pdf")
Dim valid As Boolean = pdf.VerifySignatures()
If Not valid Then
pdf.RemoveSignatures()
pdf.SaveAs("report-unsigned.pdf")
End If
没有加密的可见批准
当您只需要签名的外观,而不是法律上的不可否认性时,用印章或水印功能加盖扫描的手写图像。 只要您明确它是什么,对于内部的批准,这种方法很好。
用印章或证书,以及两个陷阱
永远不要让盖上去的签章代替证书签名。 印章是页面上的像素:可复制、不可验证,不能保证文档未被更改。 证书签名是防篡改的,并使用密码术绑定身份与内容。 用印章表示外观,而用证书作为证明。
有两件事让人们出其不意。 使用X509KeyStorageFlags.Exportable加载证书,否则无法使用私钥并且签名失败。 如果查看器显示警告而非绿色勾号,则说明证书不在该查看器的信任存储中; 签名仍然有效,但必须以其他方式建立信任。
常见问题解答
IronPDF中的三种PDF签署类型是什么?
IronPDF支持: (1) 由X.509证书支持的加密数字签名,将身份与内容绑定,并在篡改时失效; (2) 将手写签名图像放置在页面上的视觉图章,无需加密证明; (3) 用户稍后在PDF查看器中签署的交互签名字段。
如何在C#中向PDF添加篡改证明数字签名?
从.pfx或.p12文件加载X.509证书到PdfSignature对象中,设置签名原因、位置、日期,并可选择添加可信时间戳URL,然后调用pdf.Sign(signature)并保存。
PDF数字签名与视觉图章有什么区别?
数字签名以加密方式将证书身份与文档内容绑定——任何后续编辑都会破坏它。视觉图章只是页面上的一个图像:可复制、不可验证,且不保证文档未被更改。使用图章用于外观;使用证书进行法律证明。
为什么IronPDF无法签署,提示“私钥不可访问”?
使用X509KeyStorageFlags.Exportable标志加载X.509证书。没有它,私钥无法用于签名。
如何在IronPDF中验证和移除PDF上的签名?
调用pdf.VerifySignatures()检查所有签名是否有效。如果结果为假,调用pdf.RemoveSignatures()在重新处理或重新签署前移除它们。

