VintaSoft Imaging .NET SDK v8.7
In This Topic
    PDF: Protect PDF document
    In This Topic

    VintaSoft PDF .NET Plug-in:



    Encryption system of PDF document

    EncryptionSystem class is intended for storing all necessary cryptosystem parameters. The class contains following cryptosystem parameters:

    An instance of EncryptionSystem class can be created using the constructor:

    For detailed information about encryption parameters, difference between user and owner password please refer to PDF Reference sections: 3.5.Encryption, 3.5.2.Standard Security Handler.



    Create secured PDF document

    New encrypted PDF document can be created using one of the following constructors of PdfDocument class:

    Here is an example, that demonstrates how to create a new secured PDF document.
    ' The project, which uses this code, must have references to the following assemblies:
    ' - Vintasoft.Imaging
    ' - Vintasoft.Imaging.Pdf
    
    Namespace UserGuide.Programming.Pdf.Encryption
            Class CreateEncryptedPdfDocument
                    Public Shared Sub CreateDocument(filename As String, userPassword As String, ownerPassword As String)
                            ' specifies user access permissions
                            Dim userPermissions As Vintasoft.Imaging.Pdf.Security.UserAccessPermissions = Vintasoft.Imaging.Pdf.Security.UserAccessPermissions.PrintDocumentInHighResolution Or Vintasoft.Imaging.Pdf.Security.UserAccessPermissions.PrintDocumentInLowResolution
                            ' create encryption system
                            Dim documentEncryption As New Vintasoft.Imaging.Pdf.Security.EncryptionSystem(Vintasoft.Imaging.Pdf.Security.EncryptionAlgorithm.RC4, 40, userPassword, ownerPassword, userPermissions)
                            ' create document
                            Using document As New Vintasoft.Imaging.Pdf.PdfDocument(Vintasoft.Imaging.Pdf.PdfFormat.Pdf_14, documentEncryption)
                                    ' add empty page
                                    Dim page As Vintasoft.Imaging.Pdf.Tree.PdfPage = document.Pages.Add(Vintasoft.Imaging.PaperSizeKind.A4)
                                    ' draw text on page
                                    Using g As Vintasoft.Imaging.Pdf.Drawing.PdfGraphics = page.GetGraphics()
                                            Dim font As Vintasoft.Imaging.Pdf.Tree.Fonts.PdfFont = document.FontManager.GetStandardFont(Vintasoft.Imaging.Pdf.Tree.Fonts.PdfStandardFontType.TimesBold)
                                            Dim location As New System.Drawing.PointF(0, page.MediaBox.Height / 2)
                                            Dim text As String = document.EncryptionSystem.ToString()
                                            g.DrawString(text, font, 16, New Vintasoft.Imaging.Pdf.Drawing.PdfBrush(System.Drawing.Color.Black), location)
                                    End Using
                                    ' save document
                                    document.SaveChanges(filename)
                            End Using
                    End Sub
            End Class
    End Namespace
                  
    
    // The project, which uses this code, must have references to the following assemblies:
    // - Vintasoft.Imaging
    // - Vintasoft.Imaging.Pdf
    
    namespace UserGuide.Programming.Pdf.Encryption
    {
        class CreateEncryptedPdfDocument
        {
            public static void CreateDocument(string filename, string userPassword, string ownerPassword)
            {
                // specifies user access permissions
                Vintasoft.Imaging.Pdf.Security.UserAccessPermissions userPermissions = 
                    Vintasoft.Imaging.Pdf.Security.UserAccessPermissions.PrintDocumentInHighResolution | 
                    Vintasoft.Imaging.Pdf.Security.UserAccessPermissions.PrintDocumentInLowResolution;
                // create encryption system
                Vintasoft.Imaging.Pdf.Security.EncryptionSystem documentEncryption =
                    new Vintasoft.Imaging.Pdf.Security.EncryptionSystem(
                        Vintasoft.Imaging.Pdf.Security.EncryptionAlgorithm.RC4, 40, 
                        userPassword, ownerPassword, userPermissions);
                // create document
                using (Vintasoft.Imaging.Pdf.PdfDocument document = 
                    new Vintasoft.Imaging.Pdf.PdfDocument(
                        Vintasoft.Imaging.Pdf.PdfFormat.Pdf_14, documentEncryption))
                {
                    // add empty page
                    Vintasoft.Imaging.Pdf.Tree.PdfPage page = 
                        document.Pages.Add(Vintasoft.Imaging.PaperSizeKind.A4);
                    // draw text on page
                    using (Vintasoft.Imaging.Pdf.Drawing.PdfGraphics g = page.GetGraphics())
                    {
                        Vintasoft.Imaging.Pdf.Tree.Fonts.PdfFont font = document.FontManager.GetStandardFont(
                            Vintasoft.Imaging.Pdf.Tree.Fonts.PdfStandardFontType.TimesBold);
                        System.Drawing.PointF location = new System.Drawing.PointF(0, page.MediaBox.Height / 2);
                        string text = document.EncryptionSystem.ToString();
                        g.DrawString(text, font, 16, 
                            new Vintasoft.Imaging.Pdf.Drawing.PdfBrush(System.Drawing.Color.Black), location);
                    }
                    // save document
                    document.SaveChanges(filename);
                }
            }
        }
    }
                    
    


    Load secured PDF document

    Secured PDF document can be loaded by 2 ways:

    Here is an example, that demonstrates how to load a PDF document using ImageCollection class.
    ' The project, which uses this code, must have references to the following assemblies:
    ' - Vintasoft.Imaging
    ' - Vintasoft.Imaging.Pdf
    
    Namespace UserGuide.Programming.Pdf.Encryption
            Class OpenUsingImageCollection
                    Public Shared Sub AddPdfDocumentToImageCollection(filename As String, images As Vintasoft.Imaging.ImageCollection)
                            AddHandler Vintasoft.Imaging.Pdf.PdfDocumentController.AuthenticateRequest, New System.EventHandler(Of Vintasoft.Imaging.Pdf.PdfDocumentEventArgs)(AddressOf PdfDocumentController_AuthenticateRequest)
                            images.Add(filename)
                    End Sub
    
                    Private Shared Sub PdfDocumentController_AuthenticateRequest(sender As Object, e As Vintasoft.Imaging.Pdf.PdfDocumentEventArgs)
                            Dim document As Vintasoft.Imaging.Pdf.PdfDocument = e.Document
                            While True
                                    System.Console.Write("Enter password: ")
                                    ' get password string
                                    Dim password As String = System.Console.ReadLine()
                                    ' performs authentication
                                    Dim authorization As Vintasoft.Imaging.Pdf.Security.AuthorizationResult = document.Authenticate(password)
                                    ' check authorization result
                                    If authorization = Vintasoft.Imaging.Pdf.Security.AuthorizationResult.IncorrectPassword Then
                                            System.Console.WriteLine("The password is incorrect.")
                                    Else
                                            System.Console.WriteLine(authorization.ToString())
                                            Return
                                    End If
                            End While
                    End Sub
            End Class
    End Namespace
                  
    
    // The project, which uses this code, must have references to the following assemblies:
    // - Vintasoft.Imaging
    // - Vintasoft.Imaging.Pdf
    
    namespace UserGuide.Programming.Pdf.Encryption
    {
        class OpenUsingImageCollection
        {
            public static void AddPdfDocumentToImageCollection(
                string filename, Vintasoft.Imaging.ImageCollection images)
            {
                Vintasoft.Imaging.Pdf.PdfDocumentController.AuthenticateRequest += 
                    new System.EventHandler<Vintasoft.Imaging.Pdf.PdfDocumentEventArgs>(PdfDocumentController_AuthenticateRequest);
                images.Add(filename);
            }
    
            static void PdfDocumentController_AuthenticateRequest(
                object sender, Vintasoft.Imaging.Pdf.PdfDocumentEventArgs e)
            {
                Vintasoft.Imaging.Pdf.PdfDocument document = e.Document;
                while (true)
                {
                    System.Console.Write("Enter password: ");
                    // get password string
                    string password = System.Console.ReadLine();
                    // performs authentication
                    Vintasoft.Imaging.Pdf.Security.AuthorizationResult authorization = 
                        document.Authenticate(password);
                    // check authorization result
                    if (authorization == 
                        Vintasoft.Imaging.Pdf.Security.AuthorizationResult.IncorrectPassword)
                    {
                        System.Console.WriteLine("The password is incorrect.");
                    }
                    else
                    {
                        System.Console.WriteLine(authorization.ToString());
                        return;
                    }
                }
            }
        }
    }
                    
    


    Here is an example, that demonstrates how to load a PDF document using PdfDocument class, for case, when it is known beforehand that the PDF document is secured.
    ' The project, which uses this code, must have references to the following assemblies:
    ' - Vintasoft.Imaging.Pdf
    
    Namespace UserGuide.Programming.Pdf.Encryption
            Class OpenEncryptedPdfDocument
                    Public Shared Function Open(filename As String) As Vintasoft.Imaging.Pdf.PdfDocument
                            Dim document As New Vintasoft.Imaging.Pdf.PdfDocument(filename)
                            While True
                                    System.Console.Write("Enter password: ")
                                    ' get password string
                                    Dim password As String = System.Console.ReadLine()
                                    ' performs authentication
                                    Dim authorization As Vintasoft.Imaging.Pdf.Security.AuthorizationResult = document.Authenticate(password)
                                    ' check authorization result
                                    If authorization = Vintasoft.Imaging.Pdf.Security.AuthorizationResult.IncorrectPassword Then
                                            System.Console.WriteLine("The password is incorrect.")
                                    Else
                                            System.Console.WriteLine(authorization.ToString())
                                            Exit While
                                    End If
                            End While
                            Return document
                    End Function
            End Class
    End Namespace
                  
    
    // The project, which uses this code, must have references to the following assemblies:
    // - Vintasoft.Imaging.Pdf
    
    namespace UserGuide.Programming.Pdf.Encryption
    {
        class OpenEncryptedPdfDocument
        {
            public static Vintasoft.Imaging.Pdf.PdfDocument Open(string filename)
            {
                Vintasoft.Imaging.Pdf.PdfDocument document = 
                    new Vintasoft.Imaging.Pdf.PdfDocument(filename);
                while (true)
                {
                    System.Console.Write("Enter password: ");
                    // get password string
                    string password = System.Console.ReadLine();
                    // performs authentication
                    Vintasoft.Imaging.Pdf.Security.AuthorizationResult authorization = 
                        document.Authenticate(password);
                    // check authorization result
                    if (authorization == 
                        Vintasoft.Imaging.Pdf.Security.AuthorizationResult.IncorrectPassword)
                    {
                        System.Console.WriteLine("The password is incorrect.");
                    }
                    else
                    {
                        System.Console.WriteLine(authorization.ToString());
                        break;
                    }
                }
                return document;
            }
        }
    }
                    
    


    Here is an example, that demonstrates how to load a PDF document using PdfDocument class, for case, when it is not known beforehand that the PDF document is secured.
    ' The project, which uses this code, must have references to the following assemblies:
    ' - Vintasoft.Imaging.Pdf
    
    Namespace UserGuide.Programming.Pdf.Encryption
            Class OpenPdfDocument
                    Public Shared Function Open(filename As String) As Vintasoft.Imaging.Pdf.PdfDocument
                            Dim document As New Vintasoft.Imaging.Pdf.PdfDocument(filename)
                            If document.IsEncrypted Then
                                    While True
                                            System.Console.Write("Enter password: ")
                                            ' get password string
                                            Dim password As String = System.Console.ReadLine()
                                            ' performs authentication
                                            Dim authorization As Vintasoft.Imaging.Pdf.Security.AuthorizationResult = document.Authenticate(password)
                                            ' check authorization result
                                            If authorization = Vintasoft.Imaging.Pdf.Security.AuthorizationResult.IncorrectPassword Then
                                                    System.Console.WriteLine("The password is incorrect.")
                                            Else
                                                    System.Console.WriteLine(authorization.ToString())
                                                    Exit While
                                            End If
                                    End While
                            End If
                            Return document
                    End Function
            End Class
    End Namespace
                  
    
    // The project, which uses this code, must have references to the following assemblies:
    // - Vintasoft.Imaging.Pdf
    
    namespace UserGuide.Programming.Pdf.Encryption
    {
        class OpenPdfDocument
        {
            public static Vintasoft.Imaging.Pdf.PdfDocument Open(string filename)
            {
                Vintasoft.Imaging.Pdf.PdfDocument document = 
                    new Vintasoft.Imaging.Pdf.PdfDocument(filename);
                if (document.IsEncrypted)
                {
                    while (true)
                    {
                        System.Console.Write("Enter password: ");
                        // get password string
                        string password = System.Console.ReadLine();
                        // performs authentication
                        Vintasoft.Imaging.Pdf.Security.AuthorizationResult authorization = 
                            document.Authenticate(password);
                        // check authorization result
                        if (authorization == Vintasoft.Imaging.Pdf.Security.AuthorizationResult.IncorrectPassword)
                        {
                            System.Console.WriteLine("The password is incorrect.");
                        }
                        else
                        {
                            System.Console.WriteLine(authorization.ToString());
                            break;
                        }
                    }
                }
                return document;
            }
        }
    }
                    
    


    Secure an existing PDF document

    For securing an existing PDF document the document must be packed using cryptosystem. This can be done using one of the following PdfDocument.Pack methods:

    Here is an example, that demonstrates how to secure an existing PDF document.
    ' The project, which uses this code, must have references to the following assemblies:
    ' - Vintasoft.Imaging.Pdf
    
    Namespace UserGuide.Programming.Pdf.Encryption
            Class EncryptExistingPdfDocument
                    Public Shared Sub Encrypt(filename As String, userPassword As String, ownerPassword As String)
                            ' specifies user access permissions
                            Dim userPermissions As Vintasoft.Imaging.Pdf.Security.UserAccessPermissions = Vintasoft.Imaging.Pdf.Security.UserAccessPermissions.PrintDocumentInHighResolution Or Vintasoft.Imaging.Pdf.Security.UserAccessPermissions.PrintDocumentInLowResolution
                            ' create encryption system
                            Dim documentEncryption As New Vintasoft.Imaging.Pdf.Security.EncryptionSystem(Vintasoft.Imaging.Pdf.Security.EncryptionAlgorithm.RC4, 40, userPassword, ownerPassword, userPermissions)
                            ' open PDF document
                            Using document As New Vintasoft.Imaging.Pdf.PdfDocument(filename)
                                    ' encrypt PDF document
                                    document.Pack(Vintasoft.Imaging.Pdf.PdfFormat.Pdf_14, documentEncryption)
                            End Using
                    End Sub
            End Class
    End Namespace
                  
    
    // The project, which uses this code, must have references to the following assemblies:
    // - Vintasoft.Imaging.Pdf
    
    namespace UserGuide.Programming.Pdf.Encryption
    {
        class EncryptExistingPdfDocument
        {
            public static void Encrypt(string filename, string userPassword, string ownerPassword)
            {
                // specifies user access permissions
                Vintasoft.Imaging.Pdf.Security.UserAccessPermissions userPermissions =
                    Vintasoft.Imaging.Pdf.Security.UserAccessPermissions.PrintDocumentInHighResolution |
                    Vintasoft.Imaging.Pdf.Security.UserAccessPermissions.PrintDocumentInLowResolution;
                // create encryption system
                Vintasoft.Imaging.Pdf.Security.EncryptionSystem documentEncryption =
                    new Vintasoft.Imaging.Pdf.Security.EncryptionSystem(
                        Vintasoft.Imaging.Pdf.Security.EncryptionAlgorithm.RC4, 40, 
                        userPassword, ownerPassword, userPermissions);
                // open PDF document
                using (Vintasoft.Imaging.Pdf.PdfDocument document =
                    new Vintasoft.Imaging.Pdf.PdfDocument(filename))
                {
                    // encrypt PDF document
                    document.Pack(Vintasoft.Imaging.Pdf.PdfFormat.Pdf_14, documentEncryption);
                }
            }
        }
    }
                    
    



    Decode an existing secured PDF document

    For decoding an existing secured PDF document the document must be packed without the use of cryptosystem.

    Here is an example, that demonstrates how to decode an existing secured PDF document.
    ' The project, which uses this code, must have references to the following assemblies:
    ' - Vintasoft.Imaging.Pdf
    
    Namespace UserGuide.Programming.Pdf.Encryption
            Class DecryptPdfDocument
                    Public Shared Sub Decrypt(filename As String, password As String)
                            ' open document
                            Using document As New Vintasoft.Imaging.Pdf.PdfDocument(filename)
                                    ' authenticate
                                    If document.Authenticate(password) = Vintasoft.Imaging.Pdf.Security.AuthorizationResult.IncorrectPassword Then
                                            Throw New System.Exception("Incorrect password.")
                                    End If
                                    ' decrypt document
                                    Dim newEncryption As Vintasoft.Imaging.Pdf.Security.EncryptionSystem = Nothing
                                    document.Pack(document.Format, newEncryption)
                            End Using
                    End Sub
            End Class
    End Namespace
                  
    
    // The project, which uses this code, must have references to the following assemblies:
    // - Vintasoft.Imaging.Pdf
    
    namespace UserGuide.Programming.Pdf.Encryption
    {
        class DecryptPdfDocument
        {
            public static void Decrypt(string filename, string password)
            {
                // open document
                using (Vintasoft.Imaging.Pdf.PdfDocument document = 
                    new Vintasoft.Imaging.Pdf.PdfDocument(filename))
                {
                    // authenticate
                    if (document.Authenticate(password) == Vintasoft.Imaging.Pdf.Security.AuthorizationResult.IncorrectPassword)
                        throw new System.Exception("Incorrect password.");
                    // decrypt document
                    Vintasoft.Imaging.Pdf.Security.EncryptionSystem newEncryption = null;
                    document.Pack(document.Format, newEncryption);
                }
            }
        }
    }
                    
    



    Change the security parameters and access permission rights of PDF document

    For changing PDF document security parameter (encryption type, password, access permissions) the document must packed using cryptosystem. This can be done using one of the following PdfDocument.Pack methods:

    Here is an example, that demonstrates how to change the user access permission parameters of PDF document.
    ' The project, which uses this code, must have references to the following assemblies:
    ' - Vintasoft.Imaging.Pdf
    
    Namespace UserGuide.Programming.Pdf.Encryption
            Class ChangeUserAccessPermissions
                    Public Shared Sub Change(filename As String, userPassword As String, ownerPassword As String, newUserPermissions As Vintasoft.Imaging.Pdf.Security.UserAccessPermissions)
                            Using document As New Vintasoft.Imaging.Pdf.PdfDocument(filename)
                                    If document.IsEncrypted Then
                                            document.Authenticate(ownerPassword)
                                            If document.AuthorizationResult = Vintasoft.Imaging.Pdf.Security.AuthorizationResult.IncorrectPassword Then
                                                    document.Authenticate(userPassword)
                                            End If
                                            If document.AuthorizationResult = Vintasoft.Imaging.Pdf.Security.AuthorizationResult.IncorrectPassword Then
                                                    Throw New System.Exception("Incorrect password.")
                                            End If
                                    End If
                                    Dim newEnctyptionSystem As New Vintasoft.Imaging.Pdf.Security.EncryptionSystem(Vintasoft.Imaging.Pdf.Security.EncryptionAlgorithm.RC4, 40, userPassword, ownerPassword, newUserPermissions)
                                    document.Pack(document.Format, newEnctyptionSystem)
                            End Using
                    End Sub
            End Class
    End Namespace
                  
    
    // The project, which uses this code, must have references to the following assemblies:
    // - Vintasoft.Imaging.Pdf
    
    namespace UserGuide.Programming.Pdf.Encryption
    {
        class ChangeUserAccessPermissions
        {
            public static void Change(string filename, 
                string userPassword, string ownerPassword, 
                Vintasoft.Imaging.Pdf.Security.UserAccessPermissions newUserPermissions)
            {
                using(Vintasoft.Imaging.Pdf.PdfDocument document = 
                    new Vintasoft.Imaging.Pdf.PdfDocument(filename))
                {
                    if (document.IsEncrypted)
                    {
                        document.Authenticate(ownerPassword);
                        if (document.AuthorizationResult == Vintasoft.Imaging.Pdf.Security.AuthorizationResult.IncorrectPassword)
                            document.Authenticate(userPassword);
                        if (document.AuthorizationResult == Vintasoft.Imaging.Pdf.Security.AuthorizationResult.IncorrectPassword)
                            throw new System.Exception("Incorrect password.");
                    }
                    Vintasoft.Imaging.Pdf.Security.EncryptionSystem newEnctyptionSystem = 
                        new Vintasoft.Imaging.Pdf.Security.EncryptionSystem(
                            Vintasoft.Imaging.Pdf.Security.EncryptionAlgorithm.RC4, 
                            40, userPassword, ownerPassword, newUserPermissions);
                    document.Pack(document.Format, newEnctyptionSystem);
                }
            }
        }
    }
                    
    


    Edit and save secured PDF document

    The secured PDF document can be saved using PdfDocument.Save and PdfDocument.SaveChanges methods.

    Here is an example, that demonstrates how to add a page into an existing secured PDF document.
    ' The project, which uses this code, must have references to the following assemblies:
    ' - Vintasoft.Imaging
    ' - Vintasoft.Imaging.Pdf
    
    Namespace UserGuide.Programming.Pdf.Encryption
            Class AddPageToEncryptedPdfDocument
                    Public Shared Sub AddPage(documentFilename As String, newPageImageFilename As String)
                            ' open PDF document
                            Using document As Vintasoft.Imaging.Pdf.PdfDocument = Open(documentFilename)
                                    ' add page
                                    Using image As New Vintasoft.Imaging.VintasoftImage(newPageImageFilename)
                                            document.Pages.Add(image)
                                    End Using
                                    ' save changes
                                    document.SaveChanges()
                            End Using
                    End Sub
    
                    Private Shared Function Open(filename As String) As Vintasoft.Imaging.Pdf.PdfDocument
                            Dim document As New Vintasoft.Imaging.Pdf.PdfDocument(filename)
                            If document.IsEncrypted Then
                                    While True
                                            System.Console.Write("Enter password: ")
                                            ' get password string
                                            Dim password As String = System.Console.ReadLine()
                                            ' performs authentication
                                            Dim authorization As Vintasoft.Imaging.Pdf.Security.AuthorizationResult = document.Authenticate(password)
                                            ' check authorization result
                                            If authorization = Vintasoft.Imaging.Pdf.Security.AuthorizationResult.IncorrectPassword Then
                                                    System.Console.WriteLine("The password is incorrect.")
                                            Else
                                                    Exit While
                                            End If
                                    End While
                            End If
                            Return document
                    End Function
    
            End Class
    End Namespace
                  
    
    // The project, which uses this code, must have references to the following assemblies:
    // - Vintasoft.Imaging
    // - Vintasoft.Imaging.Pdf
    
    namespace UserGuide.Programming.Pdf.Encryption
    {
        class AddPageToEncryptedPdfDocument
        {
            public static void AddPage(string documentFilename, string newPageImageFilename)
            {
                // open PDF document
                using (Vintasoft.Imaging.Pdf.PdfDocument document = Open(documentFilename))
                {
                    // add page
                    using (Vintasoft.Imaging.VintasoftImage image = 
                        new Vintasoft.Imaging.VintasoftImage(newPageImageFilename))
                        document.Pages.Add(image);
                    // save changes
                    document.SaveChanges();
                }
            }
    
            private static Vintasoft.Imaging.Pdf.PdfDocument Open(string filename)
            {
                Vintasoft.Imaging.Pdf.PdfDocument document = 
                    new Vintasoft.Imaging.Pdf.PdfDocument(filename);
                if (document.IsEncrypted)
                {
                    while (true)
                    {
                        System.Console.Write("Enter password: ");
                        // get password string
                        string password = System.Console.ReadLine();
                        // performs authentication
                        Vintasoft.Imaging.Pdf.Security.AuthorizationResult authorization = 
                            document.Authenticate(password);
                        // check authorization result
                        if (authorization == Vintasoft.Imaging.Pdf.Security.AuthorizationResult.IncorrectPassword)
                        {
                            System.Console.WriteLine("The password is incorrect.");
                        }
                        else
                        {
                            break;
                        }
                    }
                }
                return document;
            }
    
        }
    }