当前位置: 首页 > news >正文

解密prompt系列. Agent Memory一览 - MATTS CFGM MIRIX

砂诼寻坛一、前置准备

1. 安装 .NET 库

通过 NuGet 包管理器快速安装:

Install-Package Spire.PDF

2. 核心依赖说明

实现电子签名需依赖 .pfx 格式的数字证书(包含私钥):

测试场景:可通过 OpenSSL、Windows 证书管理器生成自签名证书;

生产场景:需使用 CA 机构颁发的合规证书(符合《电子签名法》要求);

证书加载:通过 System.Security.Cryptography.X509Certificates.X509Certificate2 类解析 .pfx 文件,是本次实现的核心依赖。

二、核心实现逻辑

PdfOrdinarySignatureMaker 是 Spire.PDF 中面向普通电子签名的核心类,其核心流程为:

加载 PDF 文档 → 解析 X.509 证书→ 初始化签名器 → 执行签名 → 保存文档。

以下基于该类实现基础签名功能,并扩展添加可见签名等进阶示例。

1. 基础版:添加基础电子签名(默认不可见)

适用于仅需验签、无需视觉标识的场景,核心代码附带详细注释:

using Spire.Pdf;

using Spire.Pdf.Interactive.DigitalSignatures;

using System;

using System.Security.Cryptography.X509Certificates;

namespace PdfDigitalSignature

{

class BasicSignatureDemo

{

static void Main(string[] args)

{

try

{

// 1. 加载待签名的 PDF 文档

using (PdfDocument pdfDoc = new PdfDocument())

{

pdfDoc.LoadFromFile("Input.pdf"); // 替换为实际文件路径

// 2. 加载数字证书(指定密钥存储策略,适配服务器/客户端环境)

string certPath = "certificate.pfx"; // 替换为证书实际路径

string certPassword = "abc123"; // 替换为证书密码

X509Certificate2 cert = new X509Certificate2(

certPath,

certPassword,

// 关键标志:适配服务器环境+避免密钥持久化,提升安全性

X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.EphemeralKeySet

);

// 3. 初始化签名器并执行签名

PdfOrdinarySignatureMaker signMaker = new PdfOrdinarySignatureMaker(pdfDoc, cert);

// 签名名称:用于后续识别/验证签名,建议唯一

signMaker.MakeSignature("Basic_Signature_001");

// 4. 保存签名后的文档

pdfDoc.SaveToFile("Signed_Basic.pdf");

Console.WriteLine("不可见签名添加成功!");

}

}

catch (Exception ex)

{

Console.WriteLine($"签名失败:{ex.Message}");

// 进阶:记录异常详情(如堆栈)便于排查

Console.WriteLine($"异常详情:{ex.StackTrace}");

}

}

}

}

2. 进阶版:添加可见签名

在基础签名上扩展视觉标识(含签名图片、文本信息),适用于需要直观展示签名的场景:

using Spire.Pdf;

using Spire.Pdf.Interactive.DigitalSignatures;

using System;

using System.Drawing;

using System.Security.Cryptography.X509Certificates;

namespace PdfDigitalSignature

{

class AdvancedSignatureDemo

{

static void Main(string[] args)

{

try

{

// 1. 加载 PDF 文档(using 自动释放资源)

using (PdfDocument pdfDoc = new PdfDocument())

{

pdfDoc.LoadFromFile("Input.pdf");

// 2. 加载数字证书

string certPath = "certificate.pfx";

string certPassword = "abc123";

X509Certificate2 cert = new X509Certificate2(

certPath,

certPassword,

X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.EphemeralKeySet

);

// 3. 初始化签名器

PdfOrdinarySignatureMaker signMaker = new PdfOrdinarySignatureMaker(pdfDoc, cert);

PdfSignature signature = signMaker.Signature;

// 4. 配置签名元信息(将显示在签名外观中)

signature.Name = "XX科技有限公司"; // 签名者名称

signature.ContactInfo = "010-12345678"; // 联系信息

signature.Location = "中国·北京"; // 签名地点

signature.Reason = "确认文档内容合规有效";// 签名原因

// 5. 配置签名可视化外观

PdfSignatureAppearance appearance = new PdfSignatureAppearance(signature);

// 自定义标签文本

appearance.NameLabel = "签名主体:";

appearance.ContactInfoLabel = "联系电话:";

appearance.LocationLabel = "签署地点:";

appearance.ReasonLabel = "签署原因:";

// 添加签名图片(支持 PNG/JPG 等格式)

PdfImage signImage = PdfImage.FromFile("signature.png"); // 替换为签名图片路径

appearance.SignatureImage = signImage;

// 布局模式:图片 + 文本(可选:SignImageOnly/仅图片;SignDetailOnly/仅文本)

appearance.GraphicMode = GraphicMode.SignImageAndSignDetail;

// 6. 绑定外观并添加到指定位置

signMaker.SignatureAppearance = appearance;

// 获取目标页面(示例:最后一页)

PdfPageBase targetPage = pdfDoc.Pages[pdfDoc.Pages.Count - 1];

// MakeSignature 参数说明:签名名称、目标页面、X坐标、Y坐标、宽度、高度、外观

signMaker.MakeSignature("Advanced_Signature_001", targetPage,

54.0f, 330.0f, 280.0f, 90.0f, appearance);

// 7. 保存文档

pdfDoc.SaveToFile("Signed_Advanced.pdf");

Console.WriteLine("可视化签名添加成功!");

}

}

catch (Exception ex)

{

Console.WriteLine($"签名失败:{ex.Message}");

Console.WriteLine($"异常详情:{ex.StackTrace}");

}

}

}

}

三、关键参数与类说明

PdfOrdinarySignatureMaker:核心签名器类,关联PDF文档与 X.509 证书,执行签名操作。

X509Certificate2:加载 .pfx 格式数字证书,解析私钥与公钥。

X509KeyStorageFlags:密钥存储标志,控制证书加载的存储区与密钥生命周期

MachineKeySet 适配服务器环境

EphemeralKeySet 提升安全性

PdfSignatureAppearance:配置可见签名的外观,包括签名框位置、文本信息等。

GraphicMode:可见签名布局样式 (参数: SignImageOnly (仅图片), SignDetailOnly (仅文本), SignImageAndSignDetail (图片+文本))

MakeSignature:执行签名方法。

四、注意事项

证书安全:.pfx 证书包含私钥,需加密存储,避免硬编码密码,建议通过配置文件/密钥管理服务管理;

权限适配:服务器环境下加载证书需赋予应用程序足够的密钥访问权限,避免 CryptographicException ;

兼容性测试:签名后的 PDF 需在 Adobe Acrobat、WPS、浏览器等主流阅读器中验证显示与签名有效性;

五、总结

基于 Spire.PDF for .NET 的 C# 实现方案,以 “轻量化、低门槛、易集成” 为核心优势,仅需数十行代码即可完成 PDF 电子签名的基础与

http://www.jsqmd.com/news/466350/

相关文章:

  • 好用的广告设计制作供应商
  • UFUN常用函数个人帮助表格
  • PHP 程序员为什么总是瞧不起 PHP ?
  • Python调用飞书Api处理多维数据表格——保姆教程3、通过飞书表格链接获取飞书表格内容的代码
  • 别人的热闹是真的,我的安静也是真的。别人的世界有万千灯火,我的世界,有我自己就足够完整
  • 基于 QT 的电力软件界面开发之旅
  • 四川本地AI业财一体化系统:统好AI的技术解析与优势
  • 基于CVaR的微网动态定价与调度策略:MATLAB代码探秘
  • NFT交易中的知识产权问题怎么处理?
  • 3天速通!斩获阿里产品经理Offer!年薪20W+,大模型方向
  • java面试:Spring是如何解决循环依赖问题的
  • 城市抢龙虾,大厂生龙虾,全民养龙虾!
  • 探讨2026年AI搜索推广公司排名,深圳光合道这类诚信公司选购要点 - 工业设备
  • 持相似性搜索和批量查询),结合增强生成技术(提示组装和参数调优)提升响应准确性。 MaxKB 支持本地模型存储(默认路径为 /... ...
  • dogonthemoon
  • AI 改造采购管理模块:四川本土数智化方案的技术实践与价值解
  • 打造高效易用的Agent Skill
  • AI「三阶段概率筛选流程」逆向适配结构
  • AI 改造 CRM 模块:四川本土数智化方案的技术创新与实践
  • 2026年评价高的水泥涵管品牌推荐:市政排水管水泥涵管优质供应商推荐 - 行业平台推荐
  • LVS TUN 模式
  • AI颠覆软件业,3000亿市值蒸发(附《华尔街日报》原文)
  • 探讨石材水景加工厂哪家更值得选,万磊石业好用不,费用多少? - 工业品牌热点
  • Sivers 的客户开始大规模量产 LiDAR 订单
  • 2026年正规的煤炭展会搭建公司推荐:教育展会搭建厂家选择指南 - 行业平台推荐
  • IO多路复用——select、poll与epoll
  • 自然语言录入销售合同:四川江油本土数智化的采购销售提效实
  • 2026年分析口碑好的水泥搅拌机,常州北奇机械优势凸显 - 工业推荐榜
  • 国内热处理设备生产厂家排名
  • CLI-Anything:一条命令把任意软件变成 AI Agent 原生工具,到底怎么做到的?