在人力资源、财务与法务场景中,PDF 常被用来承载薪酬单、工资条、劳动合同、对账单等敏感信息,而"把一批 PDF 分发给不同的人"是每个月都会发生的操作。直接发送明文 PDF 存在泄露风险——文件一旦被转发,任何收到的人都可随意打开查看。传统做法是借助专用工具逐份设置打开密码再分发,几十上百份文件要手动重复操作,既耗时又容易漏设密码;收到方需要查看时,又往往要另外寻求工具解除密码,来回切换效率很低。
Spire.Agent.Office 的 PDF AI 能力可以直接用自然语言描述需求,AI 智能体理解后自动完成"批量加密 → 分发清单 → 按需解密"的整个流程。
对比传统SDK API处理
| 传统 Spire.Office for .NET API | Spire.Agent.Office 处理 | |
|---|---|---|
| 驱动方式 | 编写循环遍历文件 + 密码设置 + 权限配置代码,控制每一步 | 用自然语言描述目标,AI 理解后自动编排执行路径 |
| 代码量 | 批量加密/解密通常需要 200-400 行 C# 代码(含文件枚举、加密参数、异常处理等) | 约 10 行调用代码 + 1 条自然语言指令 |
| 密码策略 | 逐份硬编码密码或自行设计生成规则并写代码维护 | 在指令中用一句话说明密码规则(如按工号生成),AI 自动套用 |
| 分发清单 | 需额外编写生成清单/表格的逻辑 | 同一条指令可顺带输出 PDF 版分发密码对照表 |
| 格式处理 | 需手动处理加密算法、权限标志、文档结构等底层细节 | AI 自动识别并保留原文档的布局、样式和字体 |
| 需求变更 | 改动密码规则/目标路径 → 改代码 → 编译 → 重新部署 | 修改指令,即刻生效 |
本文介绍如何使用 Spire.Agent.Office PDF AI 能力,先为一批 PDF 批量设置打开密码并输出加密分发清单,再按需批量解除密码保护。全文通过两个案例展示加密分发与解密还原两种典型用法:
有关产品安装和 SpireToken 配置,请参考 在 .NET 项目中集成 Spire.Agent.Office。以下示例默认已安装 Spire.Agent.Office 并完成 SpireToken 配置。
PDF 批量加密分发与解密
该功能的核心思路是:以一份或多份待处理的 PDF 作为输入,让 AI 智能体按自然语言指令逐份设置打开密码加密保存,或在已知密码的情况下解除保护,并保持原文档版式不变。整个"文件读取 → 密码规则套用 → 加密/解密 → 结果输出"过程由 AI 自动完成,无需针对每份文件编写处理代码。下面通过案例一演示面向收件人的批量加密与分发,通过案例二演示管理员收回文件后的批量解密归档。
案例一:批量加密 PDF 并生成分发清单
批量加密最常见的场景,是把多份敏感 PDF(如员工工资条)在发送前逐份加上打开密码。其特点是文件数量多、每份文件的收件人不同,密码如果全部相同则形同虚设,如果各不相同又难以记忆和传达。
以下示例使用 Spire.Agent.Office 智能体,通过自然语言指令把附件文件夹(即指定文件夹下的全部 PDF)作为待加密文档,按"员工生日+随机生成的四位数字+ 固定后缀"的规则为每一份设置独立打开密码,将加密后的文档逐份保存为 PDF,并同时生成一份 PDF 格式的加密分发清单,逐行列明原文件名、加密文件名与打开密码:
using Spire.Agent.Office.AI;
using Spire.Agent.Office.Extensions;
using Spire.Pdf;
// 待批量加密的 PDF 所在文件夹:将该文件夹下的全部 PDF 文件作为附件处理(每份对应一位收件人)
string attachmentDir = @"E:\pdfs"; // 待加密 PDF 所在文件夹
string[] attachmentPaths = Directory.GetFiles(attachmentDir, "*.pdf");
// PDF 处理相关配置
string inputPath = null;
string savePath = null; // 结果文档路径(此处为null,将使用下面设置的输出文件夹路径)
string OutDir = @"E:\output"; // 输出目录(加密后文档与分发清单将保存到此目录)
string key = "**************************"; // SpireToken Key
string instruction =
"读取附件中的全部 PDF 文档,为每一份设置打开密码后加密保存:" +
"1. 密码生成规则为'员工生日+随机生成的四位数字@2026'(例如 salary-1001.pdf 对应密码 199805083354@2026),该打开密码仅用于限制文档的打开,不影响打印、复制、编辑等其他原有功能;" +
"2. 将加密后的每一份 PDF 保存到输出目录,文件名在原文件名后追加后缀'-加密',保持与原文档一致的布局、字体和页面设置;" +
"3. 在输出目录生成一份 excel格式的《加密分发清单》,逐行列出原文件名、加密文件名与对应的打开密码;" ;
// 调用PDF文档处理函数
AIResult result = ExecuteDemoPDF(instruction, inputPath, savePath, key, OutDir, attachmentPaths);
// 执行PDF文档AI处理
static AIResult ExecuteDemoPDF(string instruction, string inputPath, string savePath, string key, string output, string[] attachmentPaths)
{
// 创建AIOptions选项配置对象
AIOptions options = new AIOptions();
options.WorkDir = output; // 设置工作目录为输出目录
options.SpireToken = key; // 设置SpireToken Key
// 使用PdfDocument对象处理PDF文档
using (PdfDocument pdf = new PdfDocument())
{
// 从文件加载PDF文档
if (!string.IsNullOrEmpty(inputPath) && File.Exists(inputPath))
{
pdf.LoadFromFile(inputPath);
}
// 创建AI文档处理器
AIDocumentProcessor processor = pdf.AI(options);
// 执行AI指令
return processor.ExecuteInstruction(pdf, instruction, savePath, attachmentPaths);
}
}
待加密的原始 PDF 文档

批量加密后的 PDF 与加密分发清单

每一份 PDF 都被设置上独立的打开密码并原样保留了原文档的版式,加密分发清单则把每份文件与收件人密码一一对应,供发送方随附件安全送达收件人。后续新增收件人时,只需把新文件加入附件并调整指令中的文件清单,即可完成新一轮加密分发。
案例二:批量解密受密码保护的 PDF
收件人完成查看后,管理员通常需要把文件收回并归档,此时需要批量解除之前设置的打开密码,还原为可检索、可合并处理的明文 PDF。本案例的输入文件为空,待解密的加密 PDF 与一张记录了"文件名、文件密码"映射的 Excel 对照表一并作为附件提供,解密的关键是 AI 从 Excel 中读取每份文件对应的打开密码,再用该密码打开文档。
以下示例使用 Spire.Agent.Office 智能体,输入文件为空,通过自然语言指令读取附件中的密码对照表 Excel 与已加密的 PDF,使用表中对应密码打开文档并解除密码保护,将无密码的文档逐份保存为 PDF:
using Spire.Agent.Office.AI;
using Spire.Agent.Office.Extensions;
using Spire.Pdf;
// 附件为该文件夹下的全部文件(内含'文件名、文件密码'对照表Excel 与待解密的已加密PDF)
string attachmentDir = @"E:\pdfs"; // 存放密码对照表Excel与已加密PDF的文件夹
string[] attachmentPaths = Directory.GetFiles(attachmentDir);
// PDF 处理相关配置
string inputPath = ""; // 输入文件为空,所有待解密文件均位于附件中
string savePath = null; // 结果文档路径
string OutDir = @"E:\output-decrypted"; // 输出目录(解密后的文档将保存到此目录)
string key = "**************************"; // SpireToken Key
string instruction =
"读取附件中密码对照表Excel中'文件名、文件密码'的映射,批量解密附件中对应的加密PDF:" +
"1. 从Excel中读取每一行的文件名及其对应的打开密码;" +
"2. 在附件中定位与该行文件名相同的PDF文档,使用该行密码打开文档并解除密码保护;" +
"3. 将解密后的无密码PDF逐份保存到输出目录,文件名去除'-加密'后缀,保持与原文档一致的布局、字体和页面设置;" +
"最终输出保存为PDF文件";
// 调用PDF文档处理函数
AIResult result = ExecuteDemoPDF(instruction, inputPath, savePath, key, OutDir, attachmentPaths);
// 执行PDF文档AI处理
static AIResult ExecuteDemoPDF(string instruction, string inputPath, string savePath, string key, string output, string[] attachmentPaths)
{
// 创建AIOptions选项配置对象
AIOptions options = new AIOptions();
options.WorkDir = output; // 设置工作目录为输出目录
options.SpireToken = key; // 设置SpireToken Key
// 使用PdfDocument对象处理PDF文档
using (PdfDocument pdf = new PdfDocument())
{
// 输入文件为空时不加载文档,全部处理对象来自附件(密码对照表Excel + 已加密PDF)
if (!string.IsNullOrEmpty(inputPath) && File.Exists(inputPath))
{
pdf.LoadFromFile(inputPath);
}
// 创建AI文档处理器
AIDocumentProcessor processor = pdf.AI(options);
// 执行AI指令
return processor.ExecuteInstruction(pdf, instruction, savePath, attachmentPaths);
}
}
密码对照表 Excel 与待解密的加密 PDF 文档
解密还原后的无密码 PDF 文档

常见问题
设置"打开密码"后,除了打开需要密码,打印/复制/编辑会受影响吗?
原因:打开密码与文档权限是两回事。本文示例仅为文档设置打开密码,不施加"禁止打印""禁止复制"等权限限制。
解决:加密后除打开文档需要密码外,打印、复制、编辑等其他原有功能均不受影响。若出于安全要求需要限制打印或复制,可在指令中追加权限说明(如"仅允许查看,禁止打印与复制"),AI 会按描述一并配置对应权限。
设置打开密码后,加密 PDF 的版式会改变吗?
原因:加密本身只影响文档的打开与权限校验,不涉及页面内容的重排。
解决:Spire.Agent.Office 加密处理会自动保留原文档的布局、字体与页面设置。如担心个别样式变化,可在指令中补充"保持与原文档一致的布局、字体和页面设置"。
获取SpireToken Key
- 联系 该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。或访问 https://www.e-iceblue.com/TemLicense.html获得试用/商业 API 密钥
在代码中配置:
AIOptions options = new AIOptions();options.SpireToken = key;









