SecurityHandlerRev6.cs
// // This code is part of Document Solutions for PDF demos. // Copyright (c) MESCIUS inc. All rights reserved. // using System; using System.IO; using System.Drawing; using GrapeCity.Documents.Pdf; using GrapeCity.Documents.Text; using GrapeCity.Documents.Pdf.Security; namespace DsPdfWeb.Demos { // This sample demonstrates how to create an encrypted PDF // using the Standard Security Handler Revision 6. // // Standard Security Handler Revision 6 was added in PDF 2.0. // It uses AES 256 encryption, same as the Standard Security Handler Revision 5 // described in "Adobe Supplement to the ISO 32000 BaseVersion: 1.7 ExtensionLevel: 3", // but a new more complex algorithm is used to generate an encryption key. // // See SecurityHandlers for examples of using other security handlers. public class SecurityHandlerRev6 { public int CreatePDF(Stream stream) { // Sample passwords: const string ownerPassword = "I'm the owner"; const string userPassword = "I'm a user"; // Step 1: Generate a document with some security attributes: var doc0 = new GcPdfDocument(); var rc0 = Common.Util.AddNote( "Demonstrating the use of the Standard Security Handler Revision 6.", doc0.NewPage()); // Create a Rev6 security handler and set security properties: var ssh6 = new StandardSecurityHandlerRev6() { OwnerPassword = ownerPassword, UserPassword = userPassword, CopyContent = false, PrintingPermissions = PrintingPermissions.Disabled, EncryptStrings = true, }; // Assign the handler we created to the document so that it is used when saving the PDF: doc0.Security.EncryptHandler = ssh6; // Save the PDF in a temp file. It will be loaded and examined in the next step: var fn = Path.GetTempFileName(); doc0.Save(fn); // Step 2: Load the generated PDF and examine its security attributes: var doc = new GcPdfDocument(); using (var fs = File.OpenRead(fn)) { // User password is needed to load the document: doc.Load(fs, userPassword); // At this point we can examine doc.Security.DecryptHandler if it exists, // but there is NO Security.EncryptHandler: if (doc.Security.EncryptHandler != null) throw new Exception("This should not happen."); var dh = doc.Security.DecryptHandler; if (dh is StandardSecurityHandlerRev6 dh_ssh6) { // Print out some of the permissions in the loaded PDF that was generated in Step 1: var txt = $"Some of the security attributes found in the PDF " + $"that was generated using StandardSecurityHandlerRev6:\n" + $"- EncryptionAlgorithm: {dh_ssh6.EncryptionAlgorithm}\n" + $"- EncryptionKeyLength: {dh_ssh6.EncryptionKeyLength}\n" + $"- CopyContent: {dh_ssh6.CopyContent}\n" + $"- PrintingPermissions: {dh_ssh6.PrintingPermissions}\n" + $"- EncryptStrings: {dh_ssh6.EncryptStrings}\n" + $""; Common.Util.AddNote( txt, doc.Pages[0], new RectangleF(72, rc0.Bottom + 36, 72 * 6, 72 * 2)); // This won't work, sorry: var noway = dh_ssh6.OwnerPassword; if (noway != null) throw new Exception("This should not happen."); } // Save the new PDF. Please note that because we did not set the Security.EncryptHandler // on this PDF, this document (unlike the one that was generated in Step 1) has no security: doc.Save(stream); } // Clean up the temp file: File.Delete(fn); // Done: return doc.Pages.Count; } } }