在折腾电子合同或正式报告时,给 Word 文档加上数字签名几乎是刚需------既能证明文档没被篡改,又能确认是谁签的。今天分享一个用C#快速搞定这件事的小办法,主角是 Free Spire.Doc for .NET 这个免费库,代码量很少,几分钟就能跑起来。
准备工作
- 安装 Free Spire.Doc
通过 NuGet 包管理器搜索 FreeSpire.Doc 并安装,或直接下载 DLL 引用。
- 准备数字证书
你需要一个有效的 .pfx 格式数字证书文件及对应的密码。certificate.pfx 是什么东西呢?简单说,它就是你的"数字身份证"。里面包含了你的公钥、私钥以及身份信息。.pfx 格式通常带有密码保护,你用这个文件给 Word 文档盖章,别人打开文档就能看到是谁签的,同时还能检验文档是否被改过。
你可以从 CA 机构(比如沃通、DigiCert 等)申请一个真正的商用证书,也可以本地自己生成一个测试用的------开发阶段用 makecert 或 OpenSSL 随便搞一个就行,只不过正式给别人看的时候 Word 会提示"签名无效"。
代码实现
下面是一个完整的控制台程序示例,演示加载 Word 文档、加载证书并签名保存。
using Spire.Doc;
namespace DigitallySignWord
{
class Program
{
static void Main(string[] args)
{
// 创建 Document 对象
Document doc = new Document();
// 加载需要签名的 Word 文件
doc.LoadFromFile("Input.docx");
// 指定证书路径和密码
string certificatePath = "certificate.pfx";
string password = "password";
// 数字签名并保存为 Docx2013 格式
doc.SaveToFile("DigitallySigned.docx", FileFormat.Docx2013, certificatePath, password);
}
}
}
代码解析
- 加载文档 :通过
Document.LoadFromFile载入待签名的.docx文件。 - 证书配置 :
certificatePath和password分别指向证书文件路径和密码。 - 保存签名 :
SaveToFile方法重载中指定输出格式(如 Docx2013)、证书路径和密码,即可在保存时完成签名。
签名完成后,用 Word 打开 DigitallySigned.docx,文档顶部会显示"签名行",状态栏提示"已签名的文档",签名详细信息可查阅"文件"->"信息"->"查看签名"。
重要提示
- 免费版限制 :免费版 Spire.Doc 对文档大小有限制:支持处理的 Word 文档 不超过 500 个段落或 25 个表格 (以先达到者为准)。对于大多数小型办公文档和合同,这一限制已足够使用。
- 证书有效性 :生产环境中请使用由受信任CA颁发的证书,否则Word会提示签名无效。
- 支持格式 :
SaveToFile的FileFormat参数可选Docx2010、Docx2013、Docx2016等,请根据实际需要选择。 - 仅对新文件生效 :数字签名是在保存新文件时附加的,原文件不受影响。
总结
借助 Free Spire.Doc for .NET,只需几行代码即可在 C# 中为 Word 文档添加数字签名,非常适合批量处理合同、报告等文件的自动化场景。但务必关注免费版的段落/表格数量限制,避免运行时异常。如果需求超出限制,可评估商业许可或采用分治法。希望本文能帮助你快速上手文档签名功能!