我使用以下代码:
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
提供密码而不创建其他文件。
答案 0 :(得分:1)
不幸的是,必须以这种方式完成。
我建议你:
答案 1 :(得分:1)
根据itextsharp文档,它可以在新创建的pdf中设置密码。它无法为现有的pdf文件提供密码。
因此,使用itextsharp无法在不创建新文件的情况下保护密码。要使密码保护pdf你必须使用输出文件(由PdfEncryptor.Encrypt()方法保护创建密码)并删除输入pdf。
您还可以看到此link
答案 2 :(得分:0)
使用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);
}
}