NoPassGetMetadata.cs
C# VB
//// This code is part of Document Solutions for PDF .NET demos.// Copyright (c) MESCIUS inc. All rights reserved.//using System.IO;using System.Drawing;using GrapeCity.Documents.Pdf;using GrapeCity.Documents.Pdf.Security;using GrapeCity.Documents.Text;
namespace DsPdfWeb.Demos{ // This example shows how to load a password protected PDF and try to read its metadata. // Keep in mind that in some cases metadata in a PDF may also be encrypted, in which case // reading it without the password is impossible. // For reference, the loaded PDF is protected with the owner password 'owner' and user password 'user'. public class NoPassGetMetadata { public int CreatePDF(Stream stream) { using var fs = 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(fs, dopt);
// The PDF to hold the results: var doc = new GcPdfDocument(); var page = doc.NewPage(); // Set up a TextLayout to format the results: var tl = page.Graphics.CreateTextLayout(); tl.DefaultFormat.Font = StandardFonts.Courier; tl.DefaultFormat.FontSize = 14; tl.MaxWidth = doc.PageSize.Width; tl.MaxHeight = doc.PageSize.Height; tl.MarginAll = tl.Resolution; var captionFmt = new TextFormat(tl.DefaultFormat) { Font = StandardFonts.CourierBold, FontSize = tl.DefaultFormat.FontSize + 2 };
// All security handlers before StandardSecurityHandlerRev4 always encrypted metadata, // the StandardSecurityHandlerRev4 has EncryptMetadata property which we need to check: bool metadataIsEncrypted = true; if (docSrc.Security.EncryptHandler is StandardSecurityHandlerRev4 ssh) metadataIsEncrypted = ssh.EncryptMetadata;
if (!metadataIsEncrypted) { Metadata m = docSrc.Metadata; tl.AppendLine("The PDF has unencrypted metadata:", captionFmt); tl.AppendLine($" Copyright: {m.Copyright}"); tl.AppendLine($" CreatorTool: {m.CreatorTool}"); if (m.CreateDate.HasValue) tl.AppendLine($" CreateDate: {m.CreateDate.Value.ToUniversalTime():R}"); tl.AppendLine($" Description: {m.Description}"); if (m.ModifyDate.HasValue) tl.AppendLine($" ModifyDate: {m.ModifyDate.Value.ToUniversalTime():R}"); tl.AppendLine($" Producer: {m.Producer}"); tl.AppendLine($" Title: {m.Title}"); } else { tl.AppendLine("Cannot read metadata because the PDF metadata is encrypted.", captionFmt); }
// Render the results: tl.PerformLayout(true); while (true) { var splitResult = tl.Split(null, out TextLayout rest); page.Graphics.DrawTextLayout(tl, PointF.Empty); if (splitResult != SplitResult.Split) break; tl = rest; tl.MarginTop = tl.Resolution; page = doc.Pages.Add(); }
// Done: doc.Save(stream); return doc.Pages.Count; } }}