PdfViewer for WPF/Silverlightの概要 > タスク別ヘルプ > 保護されている可能性のあるファイルを開く |
エンドユーザーが 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 |
コードのコピー
|
|
---|---|
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); } } |
保護されたファイルを読み取る場合は、LoadProtectedDocument メソッドを呼び出します。パスワードを null にしてこのメソッドを呼び出すと、保護されていないファイルが開きます。ファイルがパスワード保護(暗号化)されている場合は、例外が生成され、キャッチされます。次に、ユーザーは、実際のパスワードの入力を要求され、メソッドが自分自身を再帰的に呼び出します。
コードのコピー
|
|
---|---|
' パスワード保護された 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 = "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 ' ユーザーが指定したパスワードを使用して、もう一度試してください LoadProtectedDocument(stream, text) End If '} 'else '{ ' throw; '} End Function) End Try End Sub |
コードのコピー
|
|
---|---|
// パスワード保護された 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\nPlease provide the password and try again."; C1.Silverlight.C1PromptBox.Show(msg, "Enter Password", (text, result) => { if (result == MessageBoxResult.OK) { // ユーザーが指定したパスワードを使用して、もう一度試してください LoadProtectedDocument(stream, text); } }); //} //else //{ // throw; //} } } |