'''' This code is part of Document Solutions for PDF .NET demos.'' Copyright (c) MESCIUS inc. All rights reserved.''ImportsSystem.IOImportsSystem.DrawingImportsGrapeCity.Documents.PdfImportsGrapeCity.Documents.Pdf.SecurityImportsGrapeCity.Documents.Text '' 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'.PublicClassNoPassGetMetadataPublicFunctionCreatePDF(ByVal stream AsStream) AsIntegerUsing fs = File.OpenRead(Path.Combine("Resources", "PDFs", "Wetlands-password-user.pdf"))'' Set up DecryptionOptions to allow loading password protected PDFs without password:Dim dopt = NewDecryptionOptions() With {.ThrowExceptionIfInvalidPassword = False}Dim docSrc = NewGcPdfDocument() docSrc.Load(fs, dopt) '' The PDF to hold the results:Dim doc = NewGcPdfDocument()Dim page = doc.NewPage()' Set up a TextLayout to format the results:Dim 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.ResolutionDim captionFmt = NewTextFormat(tl.DefaultFormat) With {.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:Dim metadataIsEncrypted AsBoolean = TrueIfTypeOf docSrc.Security.EncryptHandlerIsStandardSecurityHandlerRev4ThenDim ssh = DirectCast(docSrc.Security.EncryptHandler, StandardSecurityHandlerRev4) metadataIsEncrypted = ssh.EncryptMetadataEndIf IfNot metadataIsEncrypted ThenDim m AsMetadata = docSrc.Metadata tl.AppendLine("The PDF has unencrypted metadata:", captionFmt) tl.AppendLine($" Copyright: {m.Copyright}") tl.AppendLine($" CreatorTool: {m.CreatorTool}")If m.CreateDate.HasValueThen tl.AppendLine($" CreateDate: {m.CreateDate.Value.ToUniversalTime():R}")EndIf tl.AppendLine($" Description: {m.Description}")If m.ModifyDate.HasValueThen tl.AppendLine($" ModifyDate: {m.ModifyDate.Value.ToUniversalTime():R}")EndIf tl.AppendLine($" Producer: {m.Producer}") tl.AppendLine($" Title: {m.Title}")Else tl.AppendLine("Cannot read metadata because the PDF metadata is encrypted.", captionFmt)EndIf '' Render the results: tl.PerformLayout(True)WhileTrueDim rest AsTextLayout = NothingDim splitResult = tl.Split(Nothing, rest) page.Graphics.DrawTextLayout(tl, PointF.Empty)If splitResult <> SplitResult.SplitThenExitWhileEndIf tl = rest tl.MarginTop = tl.Resolution page = doc.Pages.Add()EndWhile '' Done: doc.Save(stream)Return doc.Pages.CountEndUsingEndFunctionEndClass