PDFlib

高度なPDFアプリケーションの開発を支援する定番プログラムライブラリー Supported by インフォテック株式会社

PLOP / PLOP DS サンプル集(クックブック)

本サンプルプログラムは、PDF の権限やパスワードの追加、ウェブ最適化を行う PLOP、 PDF に電子署名、タイムスタンプを付与する PLOP DS の基本的な機能を実際のプログラムで紹介したものです。

本サイトでダウンロードした PLOP、PLOP DS は、一部機能の制限を除き、評価版として無償でお使いいただけます。

複数の PDF 文書に PKCS#11 で署名を付与

複数の PDF 文書に電子署名を行う方法を示し、PKCS#11 トークンのためのセッション処理を演示します。

このサンプルで使用した電子署名は信頼された認証局で発行されたものではないため、Adobe Acorbat 等で開くと「少なくとも 1 つの署名に問題があります。」と表示されますが、信頼された認証局で発行された電子署名を使うと「署名済みであり、すべての署名が有効です。」と表示されます。

必要な製品:PDFlib PLOP DS

 
/*
 * 複数の PDF 文書に PKCS#11 で署名を付与:
 * 複数の PDF 文書に電子署名を行う方法を示し、PKCS#11 トークンのためのセッション処理を演示します。
 *
 * 必要な製品 : PDFlib PLOP DS 5
 * 必要なデータ : demo_signer_rsa_2048.p12
 *                demo_signer_rsa_2048.p12 は data ディレクトリにあります。
 *                demo_signer_rsa_2048.p12 のパスワードは demo です。
 */

 import java.io.*;
 import com.pdflib.plop;
 import com.pdflib.PLOPException;
 
 public class multisign {
     public static void main (String argv[]) {
         plop plop = null;
         
         /* 基本的な署名オプション */
         String sign_opts =
         "ltv=try " + /* 長期検証(LTV)を保証するためには ltv=full を使います */
         /* PKCS11 を使用する場合は 
          * "engine=pkcs#11 digitalid={filename=cryptoki.dll}" を設定します
          */
         "engine=builtin digitalid={filename=demo_signer_rsa_2048.p12} password={demo} ";
         boolean PKCS11 = false;
         
         try {
             /* 既存 PDF に関する変数を用意します */
             String optlist;
             String signed_name = "";
             String searchpath = "../data";
             
             int doc;
             int i;
             
             if (argv.length < 1) {
                 throw new Exception("usage: sign  <infile> ...");
             }
             
             plop = new plop();
             
             /* パスワード付与等の保護がされていない既存の PDF を開きます */
             optlist = "searchpath {" + searchpath + "} ";
             plop.set_option(optlist);
             
             if (plop.prepare_signature(sign_opts) == -1) {
                 throw new Exception("Error: " + plop.get_apiname() + ": " + plop.get_errmsg());
             }
             for (i = 0; i < argv.length; i++){
             
             System.out.println("Signing '" + argv[i] + "'");
             
             if ((doc = plop.open_document(argv[i], "")) == -1) {
                 System.err.println("Error: " + plop.get_apiname() + ": " + plop.get_errmsg());
                 continue;
             }
             signed_name = argv[i] + "-signed.pdf"; 
             
             if (plop.create_document(signed_name, "input=" + doc) == -1) {
                 System.err.println("Error: " + plop.get_apiname() + ": " + plop.get_errmsg());
                 if (PKCS11){
                     if (plop.prepare_signature(optlist) == -1) {
                         throw new Exception("Error: " + plop.get_apiname()
                                         + ": " + plop.get_errmsg());
                     }
                     
                     if (plop.create_document(signed_name, "input=" + doc) == -1) {
                         throw new Exception("Error: " + plop.get_apiname()
                                         + ": " + plop.get_errmsg());
                     }
                 }
             }
             /* 文書ファイルを閉じます */
             plop.close_document(doc, "");
             }
             
         } catch (PLOPException e) {
             System.err.println("PLOP exception occurred in multisign 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();
         }
     }
 }

関連ページ

  • PLOP DS の製品情報

    PLOP DS の機能、対応する PDF バージョン、利用用途等、製品情報について紹介しています。

  • PLOP DS 入門

    PLOP DS による電子署名の付与方法をサンプルプログラムを交えて詳しく説明しています。

(Apr 30, 2020)