PDF Security(暗号化・電子署名) Javaサンプル
「PDF Security」ソフトは、PDF文書への電子署名と暗号化の機能をアプリケーションに追加します。
電子署名 ・ タイムスタンプ
PDF Securityは、電子署名の様々なタイプを適用します。PDF Securityは、PDF/Aに準拠した電子証明書失効情報(CRLやOCSPのデータ)の埋め込みや、RFC3161タイムスタンプを追加します。
PDF Securityは、証明書のルート(CA、中間)証明書や失効情報をチェックすることで電子署名の有効性を検証します。また、タイムスタンプによる検証も行います。
電子署名しないでタイムスタンプだけを埋め込めます。
PDF Securityは、証明書のルート(CA、中間)証明書や失効情報をチェックすることで電子署名の有効性を検証します。また、タイムスタンプによる検証も行います。
電子署名しないでタイムスタンプだけを埋め込めます。
暗号化・セキュリティ フラグ
PDF文書は、それが重要な場面で利用される場合、データの不正なアクセスや改竄から保護するために、暗号化やセキュリティ(アクセス許可)フラグなどを設定します。
機能概要はこちらです。
無償評価版のダウンロードとインストール
ライブラリ(評価版API)は無償でダウンロード(試用)できますので、PDF Security ダウンロード手順を参照してダウンロードください。
ファイルをダウンロードしてから、インストールもしくは適当なフォルダーに解凍します。以下のようなフォルダーができあがりますので、適宜ご利用ください。
サンプルのコンパイルおよび実行前に、jar/SECA.jarをCLASSPATHにコピーし、
bin/PdfSecureAPI.dllをPATHまたはjava.library.pathにコピーしてください。
また、無償評価版と共にダウンロードしたライセンスキーをbin/LicenseManager.exeを使って登録してください。 ライセンスキーの登録方法はこちらです。
ファイルをダウンロードしてから、インストールもしくは適当なフォルダーに解凍します。以下のようなフォルダーができあがりますので、適宜ご利用ください。
bin | ライブラリやライセンスマネージャーなど |
doc | 使用説明書やjavadocなど |
include | C/C++用のヘッダー(.h)ファイル |
jar | SECA.jar(Javaのラッパー) |
lib | C/C++用のlibファイル |
samples | 各種開発言語のサンプル |
また、無償評価版と共にダウンロードしたライセンスキーをbin/LicenseManager.exeを使って登録してください。 ライセンスキーの登録方法はこちらです。
Javaのサンプルと解説
PDF/A規格に準拠していて、変更ができません。 (署名前のPDF/A文書、署名後のPDF/A文書) |
PDF Tools 「PDF Security」電子署名クラスを使って、左のようにPDF/A文書に電子署名を適用します。 |
電子署名はAdobe Acrobat(無償版)リーダーで検証できます。検証の方法はこちらです。
「PDF Security」では印影が追加された電子署名やタイムスタンプを適用できます。なお、背景の署名者や理由の文字を非表示にできます。
PDF Securityで複数の電子署名を適用するには、こちらを参照してください。
PDF文書からPDF/A文書への変換や、簡単にPDF/A文書に電子署名やタイムスタンプを追加するには、「PDF to PDF/A Converter」を利用してください。
PDF文書への電子署名
PDFまたは、PDF/A文書に指定の電子証明書で電子署名します。
PDF文書に電子署名した場合は、署名されたPDF文書が生成されます。同様にPDF/A文書に電子署名すると、署名されたPDF/Aが生成されます。
結果は、以下のようになります。
「PDF Security」電子署名ライブラリ(API)では、開く文書がPDFの場合は、結果がPDF文書になります。PDF/A文書を開けば、結果もPDF/A文書になります。
PDF文書をPDF/Aに変換する場合は、「PDF to PDF/A Converter」ライブラリを使います。
PDF文書に電子署名した場合は、署名されたPDF文書が生成されます。同様にPDF/A文書に電子署名すると、署名されたPDF/Aが生成されます。
import com.pdftools.seca.*; public class Sig { public static void main(String[] args) { try{ //インスタンス生成 //入力ファイルを開く Secure doc = new Secure("input.pdf",""); //電子署名 //インスタンス生成 Signature sig = new Signature(); //指定フォント sig.setFontName1("C:\\Windows\\Fonts\\msgothic.ttc"); sig.setFontName2("C:\\Windows\\Fonts\\msmincho.ttc"); //電子証明書情報(電子証明書検索情報) sig.setName("Taro Yamada"); sig.setIssuer("CA21-5"); sig.setSerialNumber(pSignature, "15 A3"); //電子署名表示内容 sig.setReason("受領済"); //省略可 sig.setLocation("東京"); //省略可 //電子署名追加 doc.addSignature(sig); //署名したPDFを格納 doc.saveAs("output.pdf",null,null,0, 128,"V2","V2"); //生成したインスタンスを開放 sig.destroyObject(); doc.close(); doc.destroyObject(); Secure.terminate(); }catch(Throwable e){ e.printStackTrace(); } } }
doc = new Secure | PDF文書を扱うインスタンスを生成し署名されるPDFを開く (インターネット上のPDF文書を開く場合) 以下のようにインスタンス生成と、ファイルのオープンを別々に実施することもできます。 //インスタンス生成 Secure doc = new Secure(); //入力ファイルを開く doc.open("input.pdf","");このときOpenは、成功するとTrueを戻します。 |
||||||||||||||
sig = new Signature | 電子署名を施すためのインスタンスを生成 | ||||||||||||||
sig.setFontName1 | 署名領域1のフォントを指定 フォントファイル名を指定します。日本語を表示させるには、日本語フォントを指定しなければなりません。 |
||||||||||||||
sig.setFontName2 | 署名領域2のフォントを指定 フォントファイル名を指定します。日本語を表示させるには、日本語フォントを指定しなければなりません。 |
||||||||||||||
sig.setName | 署名者の名前(CN:CommonName)を指定 電子証明書がこの名称で検索されます。なお、証明書を発行者とシリアル番号で指定する場合は、署名者としてPDFに挿入されるのみとなります。そのため、この場合は任意の名称を指定できます。 |
||||||||||||||
sig.setReason | 署名の「理由」を指定 [省略可] | ||||||||||||||
sig.addSignature | 指定の署名をPDFインスタンスに追加 このメソッドを実行することで、指定した署名(引数に指定したもの)がPDFに追加されます。 |
||||||||||||||
sig.saveAs | 署名したPDFインスタンス(データ)をファイルに出力 以下の値を指定します。
|
||||||||||||||
sig.destroyObject | 署名のインスタンスを開放 | ||||||||||||||
doc.close | 入力用に開いているPDF文書を閉じる | ||||||||||||||
doc.destroyObject | PDFデータのインスタンスを開放 | ||||||||||||||
Secure.terminate | PDF Securityを終了 |
結果は、以下のようになります。
署名したPDF文書はこちらです。 |
署名時にWeb上のファイルを指定する方法
入力のPDFファイル指定では以下の形式で指定すると、インターネット上のPDFファイルを直接変換できます。
http://[username:password@]domain[:port][/resource]"username"および"password"は基本認証(Basic Authentication)のユーザー名とパスワード指定です。
先のサンプルで"new Secure( )"のコードを以下のように変更すると、Web上のPDF文書に署名してローカルにファイルを作成します。
//入力ファイルを開く Secure doc = new Secure("http://www.pdf-tools.trustss.jp/data/Receipt2a.pdf","");
電子署名領域への印影追加
印影を追加する場合は、印影の画像ファイル名を署名インスタンスに指定してから、電子署名を適用します。以下のコードをsig.addSignature( )を実行する前に追加します。(この印影は、「電子印鑑」や「電子押印」などと同じ意味です。)
sig.setImageFileName("hanko.png");
タイムスタンプ追加
タイムスタンプを追加する場合は、タイムスタンプのURLを署名インスタンスに指定してから、電子署名を実施します。以下のコードをsig.addSignature( )の前に実行します。
指定したタイムスタンプのURLは、テスト用のタイムスタンプを発行するTSAです。このTSAは無償・無登録で自由に使えますが、負荷によってはレスポンスが低下します。
結果は、以下のようになります。
sig.setTimeStampURL("http://tsa.trustss.jp/tsa/");タイムスタンプ局(TSA)のURLを指定します。
指定したタイムスタンプのURLは、テスト用のタイムスタンプを発行するTSAです。このTSAは無償・無登録で自由に使えますが、負荷によってはレスポンスが低下します。
結果は、以下のようになります。
署名したPDF文書はこちらです。 |
署名領域の名前や時刻などを非表示にする
名前や時刻などを非表示にするには、電子署名を適用する前にその部分にNULL文字を指定します。以下のコードをsig.addSignature( )を実行する前に追加します。
結果は、以下のようになります。
sig.setText1("\t0,0 ");sig.setText1で署名者情報を、sig.setText2で理由や署名場所及び署名時刻の文字列にNULL文字を指定して表示しないようにします。 特定の文字を指定する場合は、以下の形式で指定します。
sig.setText2("\t0,0 ");
<署名領域内のX座標><署名領域内のY座標><空白><表示する文字列>
結果は、以下のようになります。
署名したPDF文書はこちらです。 |
PDF文書に複数の署名を追加する
複数の署名をPDFに追加するためには、まず署名を指定したPDFのインスタンスをメモリ上に出力します。次にそのメモリ上のPDFから新たなPDFインスタンスを作成し、追加する署名を指定します。
さらに署名が必要であれば、メモリへの出力→PDFインスタンス作成→署名指定を繰り返します。
最後に、PDFインスタンスを指定のファイル名で出力することで複数の署名が施されたPDF文書ファイルが作成されます。
詳細は、「PDFに複数の署名を適用する」を参照してください。
最後に、PDFインスタンスを指定のファイル名で出力することで複数の署名が施されたPDF文書ファイルが作成されます。
詳細は、「PDFに複数の署名を適用する」を参照してください。
ご質問、お問い合わせ
(記載の会社名および製品名は、各社の登録商標および商標です。)