如何基于.NET 6 Web API实现已知密码的PDF解锁功能?
.NET 6 Web API 实现PDF密码移除功能(已知密码)
基于你现有的PDF加密代码,用同样的PdfSharp库就能快速实现密码移除功能,核心是打开加密PDF时传入正确密码,然后清空安全设置即可。
完整实现代码
using PdfSharp.Pdf; using PdfSharp.Pdf.IO; using PdfSharp.Pdf.Security; public async Task<CustomFile> RemovePasswordFromPdf(RemovePasswordFromPdfDto file) { if (file.PdfUrl == null || file.PdfUrl.Length == 0) { return null; } string originalFileName = Path.GetFileNameWithoutExtension(file.PdfUrl.FileName); using var memoryStream = new MemoryStream(); await file.PdfUrl.CopyToAsync(memoryStream); memoryStream.Seek(0, SeekOrigin.Begin); // 传入已知密码打开加密PDF,指定修改模式 PdfDocument pdfDocument = PdfReader.Open(memoryStream, file.Password, PdfDocumentOpenMode.Modify); PdfSecuritySettings securitySettings = pdfDocument.SecuritySettings; // 清空密码,移除加密保护 securitySettings.UserPassword = string.Empty; securitySettings.OwnerPassword = string.Empty; // 重置权限为开放状态(可按需调整) securitySettings.PermitAccessibilityExtractContent = true; securitySettings.PermitPrint = PdfPrintingPermission.Allowed; MemoryStream unprotectedPdfStream = new MemoryStream(); pdfDocument.Save(unprotectedPdfStream, closeStream: false); unprotectedPdfStream.Seek(0, SeekOrigin.Begin); return new CustomFile(unprotectedPdfStream.ToArray(), "application/pdf", $"{originalFileName}-NoPassword.pdf"); }
关键逻辑说明
- 解密打开PDF:调用
PdfReader.Open时传入密码参数,确保能正常访问加密文档 - 移除加密设置:将用户/所有者密码设为空字符串,PDF保存时就会生成无加密版本
- 权限调整:按需重置文档权限,无加密PDF默认是全开放权限,可根据业务需求修改
- 异步适配:用
CopyToAsync替代同步方法,贴合Web API的异步编程规范
额外提示
- 若密码错误,
PdfReader.Open会抛出异常,建议添加异常捕获逻辑处理错误场景 - 大文件处理时,可考虑用临时文件替代内存流,减少内存占用
- 确保项目中PdfSharp的版本和加密功能一致,避免版本兼容问题
内容的提问来源于stack exchange,提问作者denimPapi
相关产品推荐
相关产品推荐

