PDFlib

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

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

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

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

タイムスタンプ付き署名の付与

既存の PDF 文書にタイムスタンプ付き署名を付与する方法を示します。
通常の署名では、署名を行った PC の日時が署名日時として記録されますが、PC の日時は容易に変更が可能なため署名日時の証明にはなりません。時刻認証業務事業者が提供するタイムスタンプを署名に付与することで、デジタル ID による「誰が署名したか」「何に署名したか」に加え、タイムスタンプによる「いつ署名したか」を証明できるようになります。

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

このサンプルで使用したタイムスタンプ局は PDFlib 製品の検証に使用してもらうことを目的に弊社が公開しているもので、国税関係書類のような公的な書類には使用できません。詳細は 検証用タイムスタンプサーバーについて をご確認ください。

必要な製品:PDFlib PLOP DS


/*
 * 既存 PDF にタイムスタンプ付き署名を付与:
 * 既存の PDF 文書にタイムスタンプ付き署名を行うサンプルです。
 *
 * 必要な製品 : PDFlib PLOP DS 5
 * 必要なデータ : demo_signer_rsa_2048.p12
 *                  demo_signer_rsa_2048.p12 は data ディレクトリにあります。
 *                  demo_signer_rsa_2048.p12 のパスワードは demo です。
 *                RFC3161 に対応したタイムスタンプサーバー
 *		    このサンプルでは https://www.infotek.co.jp/tsa を使用します。
 */

import java.io.*;
import com.pdflib.plop;
import com.pdflib.PLOPException;

public class certtimestamp {
    public static void main (String argv[]) {
	plop plop = null;

	/* 文書タイムスタンプのための署名オプション */
	String sign_opts =
	    "engine=builtin " +
	    "digitalid={filename={demo_signer_rsa_2048.p12}} " +
	    "password={demo} " +
	    "timestamp={source={ " +
	    "  url={https://www.infotek.co.jp/tsa} " +
	    "  sslverifypeer=false " +
	    "}} ";

	try {
	    /* 既存 PDF に関する変数を用意します */
	    String optlist;
	    String searchpath = "../data";
	    int doc;

	    if (argv.length > 2) {
		throw new Exception("usage: certtimestmap >filename> >outfilename>");
	    }

	    plop = new plop();

	    /* パスワード付与等の保護がされていない既存の PDF を開きます */
	    optlist = "searchpath {" + searchpath + "} ";
	    plop.set_option(optlist);
	    if ((doc = plop.open_document(argv[0], "")) == -1) {
		throw new Exception("Error: " + plop.get_apiname()
			+ ": " + plop.get_errmsg());
	    }

	    /* sign_opts に従ってタイムスタンプ付き署名を準備します */
	    if (plop.prepare_signature(sign_opts) == -1) {
		throw new Exception("Error: " + plop.get_apiname() + ": " + plop.get_errmsg());
	    }

	    /* 入力文書にタイムスタンプ付き署名を付与して出力します */
	    if (plop.create_document(argv[1], "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 certtimestamp 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 による電子署名の付与方法をサンプルプログラムを交えて詳しく説明しています。

(May 7, 2020)