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 を取り敢えず使うための入手と設定方法













