You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 01:27:25