ComponentOne PdfViewer for WPF and Silverlight
PdfViewer for WPF and Silverlight Overview / Task-Based Help / Opening Potentially Protected Files
In This Topic
    Opening Potentially Protected Files
    In This Topic

    When giving the end-user the ability to open a PDF file, sometimes you can’t predict whether or not the file will be password protected or not. The following sample method demonstrates how to perform this check and open the document accordingly.

    Visual Basic
    Copy Code
    Private Sub _btnOpen_Click(sender As Object, e As RoutedEventArgs)
    
            Dim dlg = New OpenFileDialog()
    
            dlg.Filter = "Pdf files (*.pdf)|*.pdf"
    
            If dlg.ShowDialog().Value Then
    
                Dim ms = New System.IO.MemoryStream()
    
                Using stream = dlg.File.OpenRead()
                  
                  stream.CopyTo(ms)
    
                End Using
    
                LoadProtectedDocument(ms, Nothing)
          
                End If
    
        End Sub
    

     

    C#
    Copy Code
    void _btnOpen_Click(object sender, RoutedEventArgs e)
    
            {
                var dlg = new OpenFileDialog();
    
                dlg.Filter = "Pdf files (*.pdf)|*.pdf";
    
                if (dlg.ShowDialog().Value)
    
                {
                    var ms = new System.IO.MemoryStream();
    
                    using (var stream = dlg.File.OpenRead())
                    {
    
                        stream.CopyTo(ms);
                    }
    
                    LoadProtectedDocument(ms, null);
    
                }
            }
    

    If a protected file is attempted to be read, then we will call the LoadProtectedDocument method. Calling this method with null for a password will open unprotected files. If the file is password-protected (encrypted), an Exception will be thrown and caught. The user will then be prompted for the actual password and the method will call itself recursively.

    Visual Basic
    Copy Code
     ' loads password-protected Pdf documents.
        Private Sub LoadProtectedDocument(stream As System.IO.MemoryStream, password As String)
            Try
                stream.Position = 0
                _viewer.LoadDocument(stream, password)
            Catch x As Exception
                'if (x.Message.IndexOf("password") > -1)
                '{
                Dim msg = "This file seems to be password-protected." & vbCr & vbLf & "Please provide the password and try again."
                C1.Silverlight.C1PromptBox.Show(msg, "Enter Password", Function(text, result)
                        If result = MessageBoxResult.OK Then
                            ' try again using the password provided by the user
                            LoadProtectedDocument(stream, text)
                        End If
                '}
                        'else
                        '{
                           '    throw;
                        '}
                        End Function)
            End Try
        End Sub
    

     

    C#
    Copy Code
     // loads password-protected Pdf documents.
            void LoadProtectedDocument(System.IO.MemoryStream stream, string password)
            {
                try
                {
                    stream.Position = 0;
                    _viewer.LoadDocument(stream, password);
                }
                catch (Exception x)
                {
                    //if (x.Message.IndexOf("password") > -1)
                    //{
                    var msg = "This file seems to be password-protected.\r\nPlease provide the password and try again.";
                    C1.Silverlight.C1PromptBox.Show(msg, "Enter Password", (text, result) =>
                    {
                        if (result == MessageBoxResult.OK)
                        {
                            // try again using the password provided by the user
                            LoadProtectedDocument(stream, text);
                        }
                    });
                    //}
                    //else
                    //{
                    //    throw;
                    //}
                }
            }