NoPassAddAnnotation.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.Pdf.Annotations; namespace DsPdfWeb.Demos { // This example shows how to load a password protected PDF without specifying the password, // and add a square annotation (a red border along the sides of the page) to the first page of the PDF. // The modified PDF is saved and re-opened with the password so that we can show it in the demo. public class NoPassAddAnnotation { public int CreatePDF(Stream stream) { using var fsSrc = File.OpenRead(Path.Combine("Resources", "PDFs", "Wetlands-password-user.pdf")); // Set up DecryptionOptions to allow loading password protected PDFs without password: var dopt = new DecryptionOptions() { ThrowExceptionIfInvalidPassword = false }; var docSrc = new GcPdfDocument(); docSrc.Load(fsSrc, dopt); // Add a square annotation to the first page of the PDF: var page = docSrc.Pages[0]; var pageSize = page.Size; var sa = new SquareAnnotation() { Page = page, Rect = new RectangleF(36, 36, pageSize.Width - 72, pageSize.Height - 72), Color = Color.Red, }; // Note: we must remove the UserName, as it is initialized by default which will cause an exception // when the document is saved, because strings cannot be encrypted: sa.UserName = null; // Demo site specific: // We save the modified password protected document to a temp file, // and load it again with the password, so that the demo site can show it // without asking the user for a password (the block is to delete the temp file): var fn = Path.GetTempFileName(); { docSrc.Save(fn); var doc = new GcPdfDocument(); using var fs = File.OpenRead(fn); doc.Load(fs, "user"); doc.Save(stream); } File.Delete(fn); return docSrc.Pages.Count; } } }