C# 如何向PDF文件添加密码保护

C# 如何向PDF文件添加密码保护,c#,itextsharp,C#,Itextsharp,我使用以下代码: string WorkingFolder = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); string InputFile = Path.Combine(WorkingFolder, "PSNOs.pdf"); string OutputFile = Path.Combine(WorkingFolder, "PSNOs_enc.pdf"); using (Stream input = new Fil

我使用以下代码:

string WorkingFolder = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string InputFile = Path.Combine(WorkingFolder, "PSNOs.pdf");
string OutputFile = Path.Combine(WorkingFolder, "PSNOs_enc.pdf");
using (Stream input = new FileStream(InputFile, FileMode.Open, FileAccess.Read, FileShare.Read))
{
    using (Stream output = new FileStream(OutputFile, FileMode.Create, FileAccess.Write, FileShare.None))
    {
        PdfReader reader = new PdfReader(input);
        PdfEncryptor.Encrypt(reader, output, true, null, "secret", PdfWriter.ALLOW_SCREENREADERS);
    }
} 
但它正在创建另一个文件并向输出文件添加密码。
但是我不想像上面那样创建两个文件。我想在不创建其他文件的情况下,为输入文件
PSNOs.pdf
提供密码

不幸的是,必须这样做

我建议你:

  • 在系统临时文件夹中创建未签名的PDF
  • 签名,输出到所需的位置和文件名
  • 清理-删除临时文件
  • 根据文档,它可以在新创建的pdf中设置密码。它无法为现有pdf文件提供密码。

    因此,您希望在不创建新文件的情况下进行密码保护,这是不可能的。要制作受密码保护的pdf,您必须使用输出文件(由PdfEncryptor.Encrypt()方法创建的受密码保护的文件)并删除输入pdf


    您还可以看到使用iTextSharp创建受密码保护的PDF

       string sourcePdf = @"D:\unsecuredfolder\unsecuredPage.pdf";
            using (Stream input = new FileStream(sourcePdf , FileMode.Open, FileAccess.Read, FileShare.Read))
                   //Passowrd the pwd for PDF security                 
    
       string destPdf = @"D:\securedfolder\securedPage.pdf";
    
             /sourcePdf  unsecured PDF file
           //destPdf secured PDF file
    
            {
                using (Stream output = new FileStream(destPdf , FileMode.Create, FileAccess.Write, FileShare.None))
                {
                    PdfReader reader = new PdfReader(input);
    
                    string Password="abc@123";
                    PdfEncryptor.Encrypt(reader, output, true, Password, Password, PdfWriter.ALLOW_PRINTING);
                }
            }
    

    请详细说明此代码如何回答此问题。