// 完毕:
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;
}
}
}