C# iTextSharp で 読取パスワード付のPDFを開く。

  • デル株式会社
  • 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 を取り敢えず使うための入手と設定方法

    関連記事

    ページ上部へ戻る