PDFlib

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

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

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

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

文書タイムスタンプの付与

既存の PDF 文書に文書タイムスタンプを付与する方法を示します。
文書タイムスタンプでは、その文書がいつから存在するかを時刻認証業務事業者が発行するタイムスタンプにより証明し、その後変更されていないことを Adobe Acrobat で検証することができます。

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

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

必要な製品:PDFlib PLOP DS


/*
 * 既存 PDF に文書タイムスタンプを付与:
 * 既存の PDF 文書に文書タイムスタンプを行うサンプルです。
 *
 * 必要な製品 : PDFlib PLOP DS 5
 * 必要なデータ : RFC3161 に対応したタイムスタンプサーバー
 *                このサンプルでは https://www.infotek.co.jp/tsa を使用します。
 */

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

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

        /* 文書タイムスタンプのための署名オプション */
        String sign_opts =
            "engine=builtin " +
            "doctimestamp={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: doctimestmap >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 doctimestamp 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)