/* * 既存 PDF に長期署名を付与: * 既存の PDF 文書に長期署名を行うサンプルです。 * * 必要な製品 : PDFlib PLOP DS 5 * 必要なデータ : demo_signer_rsa_2048.p12 * demo_signer_rsa_2048.p12 は data ディレクトリにあります。 * demo_signer_rsa_2048.p12 のパスワードは demo です。 * PDFlibDemoCA_G3.crl (証明書失効リスト) * demo_signer_rsa_2048.p12 のルート証明書の失効リストです。 * これも data ディレクトリにあります。 * RFC3161 に対応したタイムスタンプサーバー * このサンプルでは https://www.infotek.co.jp/tsa を使用します。 * cacert.pem (CA 証明書) * demo_signer_rsa_2048.p12 の CA 証明書 (PDFlibDemoCA_G3.pem) と * タイムスタンプサーバーの CA 証明書 を1ファイルにしたものです。 */ import java.io.*; import com.pdflib.plop; import com.pdflib.PLOPException; public class ltv { public static void main (String argv[]) { plop plop = null; /* 文書タイムスタンプのための署名オプション */ String sign_opts = "engine=builtin " + "digitalid={filename={demo_signer_rsa_2048.p12}} " + "password={demo} " + "timestamp={" + " critical " + " source={ " + " url={https://www.infotek.co.jp/tsa} " + " sslverifypeer=false " + " } " + "} " + "ltv=full " + "rootcertfile={./cacert.pem} " + "crlfile={../data/PDFlibDemoCA_G3.crl} " + "doctimestamp={source={ " + " url={https://www.infotek.co.jp/tsa} " + " sslverifypeer=false " + "}} "; try { /* 既存 PDF に関する変数を用意する */ String optlist; String searchpath = "../data"; int doc; /* 実行ファイルに渡す引数(取込む既存PDF名・出力するPDF名)のチェックを行う */ if (argv.length < 2) { throw new Exception("usage: ltv "); } /* PLOP オブジェクトを作成する */ plop = new plop(); /* 読み込みたいファイルの入ったディレクトリを指定する */ optlist = "searchpath {" + searchpath + "} "; plop.set_option(optlist); /* @既存の PDF 文書を開く */ if ((doc = plop.open_document(argv[0], "")) == -1) { throw new Exception("Error: " + plop.get_apiname() + ": " + plop.get_errmsg()); } /* A長期署名を作成する */ if (plop.prepare_signature(sign_opts) == -1) { throw new Exception("Error: " + plop.get_apiname() + ": " + plop.get_errmsg()); } /* B長期署名を PDF に付与して出力する */ if (plop.create_document(argv[1], "input=" + doc) == -1) { throw new Exception("Error: " + plop.get_apiname() + ": " + plop.get_errmsg()); } /* CPDF文書を閉じる */ plop.close_document(doc, ""); } catch (PLOPException e) { System.err.println("PLOP exception occurred in ltv sample:"); System.err.println("[" + e.get_errnum() + "] " + e.get_apiname() + ": " + e.get_errmsg()); } catch (Exception e) { System.err.println(e); } finally { /* PLOP オブジェクトを削除する */ if (plop != null) plop.delete(); } } }