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;
- }
- }
- }
-