- 2017-2-28
- Visual C#
前回、iTextSharpの使用準備をしたので、
iTextSharp で PDFへパスワードを設定してみる。
プログラム流れ
1.パスワードを設定したいPDFをPdfReaderに設定
2.元PDFファイルデータを新しいPDFとして作成しパスワードも設定。
Encryptメソッドへ与えるパスワードは、byte[]で渡す。
PdfWriter.SetEncryption の場合は、string なんだけども。
PDFファイルのセキュリティ関連は、下記のページでざっくり記載がある。
PDFの標準セキュリティ機能
3.元のPDFを削除し、パスワード設定後のPDFを元のファイル名へ
色々検索したり、ソースいじってみたりしたんだけど、
元のPDFへ直接パスワードをかける方法が見つからなかった。。。。
誰か知ってたら教えて欲しいっす。。
ソース
using iTextSharp.text.pdf;
/// <summary>
/// PDFファイルへパスワードを設定する
/// </summary>
/// <param name="sPdfPath">
/// パスワードを設定するPDF
/// </param>
/// <param name="sPass1">
/// ユーザパスワード
/// </param>
/// <param name="sPass2">
/// オーナーパスワード
/// </param>
/// <returns>
/// true:正常
/// false:異常
/// </returns>
private bool SetPdfPassword( string sPdfPath,
string sPass1,
string sPass2)
{
bool bRet = true;
DateTime dtNow = DateTime.Now;
string sLoclTm = String.Format( "{0}{1:D2}{2:D2}{3:D2}{4:D2}{5:D2}{6}",
dtNow.Year,
dtNow.Month,
dtNow.Day,
dtNow.Hour,
dtNow.Minute,
dtNow.Second,
dtNow.Millisecond );
string sFilePath_PW = sPdfPath + "_" + sLoclTm + "_temp_pw.pdf";
PdfReader objPdfReader = null;
try
{
byte[] byteUSER = Encoding.ASCII.GetBytes( sPass1 ); // ユーザパスワード
byte[] byteOWNER = Encoding.ASCII.GetBytes( sPass2 ); // オーナーパスワード
// 元のファイルが存在するか?
if( File.Exists( sPdfPath ) == false )
{
return false;
}
// PDFリーダに元ファイル設定
objPdfReader = new PdfReader( sPdfPath );
// パスワード設定対象のPDFを作成
using ( Stream objStreamOutput = new FileStream( sFilePath_PW,
FileMode.Create,
FileAccess.Write,
FileShare.None ) )
{
// 元PDFファイルデータを新しいPDFとして作成しパスワードも設定する
PdfEncryptor.Encrypt( objPdfReader,
objStreamOutput,
byteUSER,
byteOWNER,
PdfWriter.ALLOW_COPY | PdfWriter.ALLOW_PRINTING,
PdfWriter.STRENGTH128BITS );
}
objPdfReader.Close();
objPdfReader = null;
// 元のファイルを消してパスワード設定したファイルを元のファイル名へ
// 元のファイルを残す場合は、下記2行をコメント
File.Delete(sPdfPath);
File.Move(sFilePath_PW, sPdfPath);
}
catch ( Exception exp )
{
Debug.WriteLine(exp.Message);
bRet = false;
}
finally
{
if( objPdfReader != null )
{
objPdfReader.Close();
}
}
return bRet;
}
注意:元のファイルにパスワードが設定されている場合は、エラーになります。










