PDFViewer for WPF/Silverlight
暗号化されたファイル

PdfViewer では、暗号化されたファイルをパスワードを使用して読み取って表示することができます。このトピックでは、PDF ファイルのパスワードに関する基本的な情報、および暗号化された PDF ファイルを C1PdfViewer を使用して読み込む方法について説明します。

PDF ファイルのパスワード

C1PDFViewer では、PDF ファイルは、ユーザーパスワードを使用して、暗号化されたファイルを読み取ることができます。一方、C1PDF では、PDF ファイルは、ユーザーおよび所有者パスワードを使用して、暗号化されたファイルを読み書きすることができます。

所有者パスワードは、ユーザーが PDF ファイルの印刷、コピー、テキストの変更、ページの追加または削除を行うことができないようにする場合に使用します。所有者パスワードが適用されている場合は、ユーザーは印刷、コンテンツのコピー、およびページの抽出を実行することはできません。

ユーザーパスワードは、ユーザーが PDF を開いたり表示することを防止する場合に、暗号化された PDF の表示に LoadDocument(pdfStream, password) メソッドを使用することにより、所有者およびユーザーパスワードを使用します。

パスワード保護されたファイルの作成

パスワード保護されたファイルを作成するには、次のコードを使用します。

Visual Basic でコードを書く場合

  Private Sub _btnCreate_Click(sender As Object, e As RoutedEventArgs)
 Dim dlg = New SaveFileDialog()
 dlg.Filter = "Pdf files (*.pdf)|*.pdf"
 If dlg.ShowDialog().Value Then
  Using stream = dlg.OpenFile()
   Dim pdf = New C1.Silverlight.Pdf.C1PdfDocument()
   pdf.Security.UserPassword = "thePassword"
   pdf.DrawElement(_contentGrid, pdf.PageRectangle, C1.Silverlight.Pdf.ContentAlignment.MiddleCenter, Stretch.Uniform)
   pdf.Save(stream)
   MessageBox.Show("Protected pdf saved. Password is 'thePassword'.")
  End Using
 End If
End Sub

 

C# でコードを書く場合

  void _btnCreate_Click(object sender, RoutedEventArgs e)
        {
            var dlg = new SaveFileDialog();
            dlg.Filter = "Pdf files (*.pdf)|*.pdf";
            if (dlg.ShowDialog().Value)
            {
                using (var stream = dlg.OpenFile())
                {
                    var pdf = new C1.Silverlight.Pdf.C1PdfDocument();
                    pdf.Security.UserPassword = "thePassword";
                    pdf.DrawElement(_contentGrid, pdf.PageRectangle, C1.Silverlight.Pdf.ContentAlignment.MiddleCenter, Stretch.Uniform);
                    pdf.Save(stream);
                    MessageBox.Show("Protected pdf saved. Password is 'thePassword'.");
                }
            }
        }

 

既存の PDF ファイルを開く

既存の PDF ファイルを開くには、次の手順に従います。

Visual Basic でコードを書く場合

 ' 既存の PDF ファイルを開きます
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# でコードを書く場合

  // 既存の PDF ファイルを開きます
        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);
            }
        }

パスワード保護された PDF ドキュメントのロード

パスワード保護された PDF ドキュメントをロードするには、次のように、LoadDocument および LoadProtectedDocument メソッドを使用します。

Visual Basic でコードを書く場合

  ' パスワード保護された PDF ドキュメントを読み込みます。
' パスワードを null にしてこのメソッドを呼び出すと、保護されていない PDF ファイルが開きます。
' PDF ファイルがパスワード保護されている場合は、例外がスローされてキャッチされます。
' ユーザーは、実際のパスワードの入力を要求され、メソッドが
' 自分自身を再帰的に呼び出します。
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 = "このファイルは、パスワード保護されているようです。" & vbCr & vbLf & "パスワードを入力してから再度実行してください。"
  C1.Silverlight.C1PromptBox.Show(msg, "Enter Password", Function(text, result)
  If result = MessageBoxResult.OK Then
   ' ユーザーが指定したパスワードを使用して、もう一度試してください
   LoadProtectedDocument(stream, text)
  End If

   '}
   'else
   '{
   '    throw;
   '}
End Function)
 End Try
End Sub

 

C# でコードを書く場合

  // パスワード保護された PDF ドキュメントを読み込みます。
        // パスワードを null にしてこのメソッドを呼び出すと、保護されていない PDF ファイルが開きます。
        // PDF ファイルがパスワード保護されている場合は、例外がスローされてキャッチされます。
        // ユーザーは、実際のパスワードの入力を要求され、メソッドが
        // 自分自身を再帰的に呼び出します。
        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\nパスワードを入力してから、再度実行してください。";
                    C1.Silverlight.C1PromptBox.Show(msg, "Enter Password", (text, result) =>
                        {
                            if (result == MessageBoxResult.OK)
                            {
                                // ユーザーが指定したパスワードを使用して、もう一度試してください
                                LoadProtectedDocument(stream, text);
                            }
                        });
                //}
                //else
                //{
                //    throw;
                //}
            }
        }