C# iTextSharp で パスワード付のPDFを開く。
iTextSharp で パスワード付のPDFを開く。
パスワード入力画面は、VBのInputBox使ってみた。
プログラムの流れ
1.パスワード無しで開く
2.1.でエラーとなったら、InputBoxを表示しパスワード入力を促す
3.2.のInputBoxで[キャンセル]ボタンを押下された場合は、
戻り値を確認し対象ファイルの読取りをキャンセルする。
4.2.のInputBoxで[OK]ボタンを押下された場合は、取得したパスワードをUTF8でbyte配列へ変換する。
5.4.のbyteをパスワードの引数にし、PDFファイルを開く。
な感じで進める。
ソース
いつものように、実行結果には責任とりません。
ソース
// ********************************** // 実行結果には、責任取りません。 // 使用時は自己責任でお願いします。 // ********************************** using iTextSharp.text.exceptions; using iTextSharp.text.pdf; using Microsoft.VisualBasic; using System; using System.Diagnostics; using System.Text; using System.Windows.Forms; namespace PdfPwTest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } // ボタン押下でPDF読取開始 private void button1_Click(object sender, EventArgs e) { PdfReader objPdfReader = null; bool bPwop = false; string sPdfPath = @"E:\tese.pdf"; // PDFファイルパス while (true) { try { // throw new FormatException(); // 初回は、パスワード無しでオープン if ( bPwop == false ) { // PDFファイル読込 objPdfReader = new PdfReader( sPdfPath ); break; } // 初回オープンで失敗した場合は、パスワード入力ダイアログを表示する else { byte[] bytOwnPass; // パスワード入力 string sPassword = Interaction.InputBox( "パスワードを入力してください。\nキャンセルの場合は、スキップされます。", "パスワード入力", "", -1, -1 ); // キャンセルボタンが押下されたか? if ( string.IsNullOrEmpty( sPassword ) == true) { // キャンセルが押下された場合 // ファイル読取キャンセル break; } else { // OKがクリックされた場合 bytOwnPass = Encoding.UTF8.GetBytes( sPassword ); } // PDFファイル読取 objPdfReader = new PdfReader( sPdfPath, // PDFファイルパス bytOwnPass ); // パスワード break; } } // パスワード関連エラー // iTextSharp.text.exceptions; catch (BadPasswordException exp) { // Bad user password Debug.WriteLine(exp.Message); bPwop = true; } // パスワード以外の例外 catch (Exception exp) { Debug.WriteLine(exp.Message); // 例外処理して終了 return; } }// END while // --------------------------------------- // PDF 色々処理 // --------------------------------------- // クローズ if (objPdfReader != null) { objPdfReader.Close(); } } } }
iTextSharpで、事前にパスワードの有り無しがわかれば、
ループしなくて良いんだが。。。
よくわからん。。
実行画面
実行画面。
iTextSharp のセットアップとかは、下記参考。
ちょっと古いなぁ。。
C# iTextSharp を取り敢えず使うための入手と設定方法