Password protected PDF using C#

人盡茶涼 提交于 2019-11-27 13:40:11

I am creating a pdf document using C# code in my process

Are you using some library to create this document? The pdf specification (8.6MB) is quite big and all tasks involving pdf manipulation could be difficult without using a third party library. Password protecting and encrypting your pdf files with the free and open source itextsharp library is quite easy:

using (Stream input = new FileStream("test.pdf", FileMode.Open, FileAccess.Read, FileShare.Read))
using (Stream output = new FileStream("test_encrypted.pdf", FileMode.Create, FileAccess.Write, FileShare.None))
{
    PdfReader reader = new PdfReader(input);
    PdfEncryptor.Encrypt(reader, output, true, "secret", "secret", PdfWriter.ALLOW_PRINTING);
}

It would be very difficult to do this without using a PDF library. Basically, you'll need to develop such library yourselves.

With help of a PDF library everything is much simpler. Here is a sample that shows how a document can easily be protected using Docotic.Pdf library:

public static void protectWithPassword(string input, string output)
{
    using (PdfDocument doc = new PdfDocument(input))
    {
        // set owner password (a password required to change permissions)
        doc.OwnerPassword = "pass";

        // set empty user password (this will allow anyone to
        // view document without need to enter password)
        doc.UserPassword = "";

        // setup encryption algorithm
        doc.Encryption = PdfEncryptionAlgorithm.Aes128Bit;

        // [optionally] setup permissions
        doc.Permissions.CopyContents = false;
        doc.Permissions.ExtractContents = false;

        doc.Save(output);
    }
}

Disclaimer: I work for the vendor of the library.

If anyone is looking for a IText7 reference.

    private string password = "@d45235fewf";
    private const string pdfFile = @"C:\Temp\Old.pdf";
    private const string pdfFileOut = @"C:\Temp\New.pdf";

public void DecryptPdf()
{
        //Set reader properties and password
        ReaderProperties rp = new ReaderProperties();
        rp.SetPassword(new System.Text.UTF8Encoding().GetBytes(password));

        //Read the PDF and write to new pdf
        using (PdfReader reader = new PdfReader(pdfFile, rp))
        {
            reader.SetUnethicalReading(true);
            PdfDocument pdf = new PdfDocument(reader, new PdfWriter(pdfFileOut));
            pdf.GetFirstPage(); // Get at the very least the first page
        }               
} 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!