Password protected PDF using C#

后端 未结 3 1543
陌清茗
陌清茗 2020-12-03 03:40

I am creating a pdf document using C# code in my process. I need to protect the docuemnt with some standard password like \"123456\" or some account number. I need to do th

相关标签:
3条回答
  • 2020-12-03 04:01

    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);
    }
    
    0 讨论(0)
  • 2020-12-03 04:02

    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.

    0 讨论(0)
  • 2020-12-03 04:13

    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
            }               
    } 
    
    0 讨论(0)
提交回复
热议问题