Some test text!

menu
search
chevron_right .NET Framework samples

Encrypt and decrypt PDF files in VB

Sample VB code for using PDFTron SDK to read encrypted (password protected) documents, secure a document with encryption, or remove encryption.

To run this sample, get started with a free trial of PDFTron SDK.

'---------------------------------------------------------------------------------------
' Copyright (c) 2001-2019 by PDFTron Systems Inc. All Rights Reserved.
' Consult legal.txt regarding legal and license information.
'---------------------------------------------------------------------------------------
Imports System

Imports pdftron
Imports pdftron.Common
Imports pdftron.Filters
Imports pdftron.SDF
Imports pdftron.PDF

'---------------------------------------------------------------------------------------
' This sample shows encryption support in PDFNet. The sample reads an encrypted document and 
' sets a new SecurityHandler. The sample also illustrates how password protection can 
' be removed from an existing PDF document.
'---------------------------------------------------------------------------------------
Module EncTestVB
	Dim pdfNetLoader As PDFNetLoader
	Sub New()
		pdfNetLoader = pdftron.PDFNetLoader.Instance()
	End Sub

	' A custom security handler used to obtain document password dynamically via user feedback. 
	Public Class MySecurityHandler
		Inherits StdSecurityHandler

		Sub New(ByVal key_len As Int32, ByVal enc_code As Int32)
			MyBase.New(key_len, enc_code)
		End Sub

		Sub New(ByVal s As MySecurityHandler)
			MyBase.New(s)
		End Sub

		' In this callback ask the user for password/authorization data. 
		' This may invlove a dialog box used to collect authorization data or something else.
		Public Overrides Function GetAuthorizationData(ByVal p As SecurityHandler.Permission) As Boolean
			Console.WriteLine("The input file requires user password.")
			Console.WriteLine("Please enter the password:")
			Dim pass As String = Console.ReadLine()
			InitPassword(pass)
			Return True
		End Function

		' This callback could be used to customize security handler preferences.
        Public Overloads Function EditSecurityData(ByVal doc As SDFDoc) As Boolean
            Return False
        End Function

        ' This callback is used when authorization process fails. 
        Public Overloads Sub AuthorizeFailed()
            Console.WriteLine("Authorize failed...")
        End Sub

        Public Shared Function Create(ByVal name As String, ByVal key_len As Int32, ByVal enc_code As Int32) As SecurityHandler
            Return New MySecurityHandler(key_len, enc_code)
        End Function

        Public Overloads Function Clone() As SecurityHandler
            Return New MySecurityHandler(Me)
        End Function

    End Class


	Sub Main()

		PDFNet.Initialize()

		' Relative path to the folder containing test files.
		Dim input_path As String = "../../../../TestFiles/"
		Dim output_path As String = "../../../../TestFiles/Output/"

		' Example 1: Securing a document with password protection and adjusting permissions 
		' on the document.
		Try
			' Open the test file
			Console.WriteLine("-------------------------------------------------")
			Console.WriteLine("Securing an existing document...")
			Using doc As PDFDoc = New PDFDoc(input_path + "fish.pdf")
				If Not doc.InitSecurityHandler() Then
					Console.WriteLine("Document authentication error...")
					Return
				End If

				' Perform some operation on the document. In this case we use low level SDF API
				' to replace the content stream of the first page with contents of file 'my_stream.txt'
				If (True) Then			  ' Optional
					Console.WriteLine("Replacing the content stream, use flate compression...")

					' Get the page dictionary using the following path: trailer/Root/Pages/Kids/0
					Dim page_dict As Obj = doc.GetTrailer().Get("Root").Value(). _
					 Get("Pages").Value(). _
					 Get("Kids").Value(). _
					 GetAt(0)

					' Embed a custom stream (file mystream.txt) using Flate compression.
					Dim embed_file As MappedFile = New MappedFile(input_path + "my_stream.txt")
					Dim mystm As FilterReader = New FilterReader(embed_file)
					page_dict.Put("Contents", doc.CreateIndirectStream(mystm))
					embed_file.Close()
				End If

				' Apply a new security handler with given security settings. 
				' In order to open saved PDF you will need a user password 'test'.
				Dim new_handler As StdSecurityHandler = New StdSecurityHandler

				' Set a new password required to open a document
				Dim my_password As String = "test"
				new_handler.ChangeUserPassword(my_password)

				' Set Permissions
				new_handler.SetPermission(SecurityHandler.Permission.e_print, True)
				new_handler.SetPermission(SecurityHandler.Permission.e_extract_content, False)

				' Note: document takes the ownership of new_handler.
				doc.SetSecurityHandler(new_handler)

				' Save the changes.
				Console.WriteLine("Saving modified file...")
				doc.Save(output_path + "secured.pdf", 0)
			End Using
			Console.WriteLine("Done. Result saved in secured.pdf...")
		Catch e As PDFNetException
			Console.WriteLine(e.Message)
		End Try

        ' Example 2: Reading password protected document without user feedback.
        Try
            ' In this sample case we will open an encrypted document that 
            ' requires a user password in order to access the content.
            Console.WriteLine("-------------------------------------------------")
            Console.WriteLine("Open the password protected document from the first example...")
			Using doc As PDFDoc = New PDFDoc(output_path + "secured.pdf")	 ' Open the encrypted document that we saved in the first example. 
				Console.WriteLine("Initializing security handler without any user interaction...")

				' At this point MySecurityHandler callbacks will be invoked. 
				' MySecurityHandler.GetAuthorizationData() should collect the password and 
				' AuthorizeFailed() is called if user repeatedly enters a wrong password.
				If Not doc.InitStdSecurityHandler("test") Then
					Console.WriteLine("Document authentication error...")
					Console.WriteLine("The password is not valid.")
					Return
				Else
					Console.WriteLine("The password is correct! Document can now be used for reading and editing")

					' Remove the password security and save the changes to a new file.
					doc.SetSecurityHandler(Nothing)
					doc.Save(output_path + "secured_nomore1.pdf", 0)
					Console.WriteLine("Done. Result saved in secured_nomore1.pdf")
				End If
			End Using
        Catch e As PDFNetException
            Console.WriteLine(e.Message)
        End Try

        ' Example 3: Reading password protected document with user feedback.
        Try
            ' Register standard security. Reguired only once per application session.
            Dim del As CreateDelegate = New CreateDelegate(AddressOf MySecurityHandler.Create)
            SecurityManagerSingleton.Instance().RegisterSecurityHandler("Standard", _
             New SecurityDescriptor("Standard Security", del))

            Console.WriteLine("-------------------------------------------------")
            Console.WriteLine("Open the password protected document from the first example...")
			Using doc As PDFDoc = New PDFDoc(output_path + "secured.pdf")	 ' Open the encrypted document that we saved in the first example.
				Console.WriteLine("Initializing security handler. The password will now be collected from the user")
				Console.WriteLine("Enter 'test' as the password.")

				' At this point MySecurityHandler callbacks will be invoked. 
				' MySecurityHandler.GetAuthorizationData() should collect the password and 
				' AuthorizeFailed() is called if user repeatedly enters a wrong password.
				If Not doc.InitSecurityHandler() Then
					Console.WriteLine("Document authentication error...")
					Console.WriteLine("The password is not valid.")
					Return
				Else
					Console.WriteLine("The password is correct! Document can now be used for reading and editing")

					' Remove the password security and save the changes to a new file.
					doc.SetSecurityHandler(Nothing)
					doc.Save(output_path + "secured_nomore2.pdf", 0)
					Console.WriteLine("Done. Result saved in secured_nomore2.pdf")
				End If
			End Using
		Catch e As PDFNetException
			Console.WriteLine(e.Message)
		End Try

	End Sub
End Module
close

Free Trial

Get unlimited trial usage of PDFTron SDK to bring accurate, reliable, and fast document processing capabilities to any application or workflow.

Select a platform to get started with your free trial.

Unlimited usage. No email address required.

PDFTron Receives USD$71 Million Growth Investment Led By Silversmith Capital Partners

Learn more
close