PDFlib

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

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

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

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

受信者の証明書に対する PDF 文書の暗号化

1 個ないし複数の受信者の証明書に対する PDF 文書を暗号化します。

サンプル受信者証明書群がパッケージに含まれています。

パッケージは、 この暗号化された文書を PLOP を用いて復号したり、Acrobat で開いたりするために必要となる、 照応するデジタル ID ファイル群も含んでいます。

すべてのデジ タル ID ファイル(demo_recipient_1.p12 等)に対するパスワードは demo です。

証明書 (*.pem)は、受信者に向けた PDF 文書の暗号化を行うために必要なファイルです。 公開鍵のみを含むため、証明書は自由に配布することができます。 暗号化されている文書を開くには、暗号化のために使用された証明書に照応する、デジタル ID を必要とします。 PDFlib PLOP DS はこのファイルを使用して PDF 文書を暗号化します。

デジタルID (*.p12) は、証明書と照応する秘密鍵を含むファイルです。 保護された文書を開くのに必要です。デモプログラムのため PLOP DS ではパッケージに同梱していますが、 通常は受信者の Adobe Acrobat (または Windows) の証明書ストアにのみ存在し、受信者に配布するものではありません。

今回のデモプログラムで暗号化した PDF 文書を開くには、PLOP パッケージに同梱されている demo_recipient_1.p12 等が必要です。 ダウンロードしたファイルをダブルクリックして、「証明書のインポートウェイザード」に従ってインストールします。 保存場所は「現在のユーザー」を選択し、パスワードは「demo」を入力します。

必要な製品:PDFlib PLOP 又は PDFlib PLOP DS

 
/*
 * 受信者の証明書に対する PDF 文書の暗号化:
 * 1 個ないし複数の受信者証明書に対して PDF 文書を暗号化します。
 * サンプル受信者証明書群がパッケージに含まれています。 
 * パッケージは、 この暗号化された文書を PLOP を用いて復号したり、Acrobat で開いたりするために必要となる
 * 照応するデジタル ID ファイル群も含んでいます。 
 * すべてのデジ タル ID ファイル(demo_recipient_1.p12 等)に対するパスワードは demo です。
 *
 * 必要な製品 : PDFlib PLOP 5 又は 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 certsec {
     public static void main (String argv[]) {
         plop plop = null;
         
         /* 本サンプルに必要なデータが保存されているディレクトリを指定します
          * 宜変更してください. 
          */
         String searchpath = "../data";
         
         /* 受信者の証明書とアクセス許可を設定します*/
         
         String[][] recipients = {
             /* 権限制限なし */
             { "../data/demo_recipient_1.pem", "" },
             
             /* フォームの入力及び署名のアクセス権限を付与し、 他の権限は制限します */
             { "../data/demo_recipient_2.pem", "nomodify nocopy noannots noassemble" },
             { "../data/demo_recipient_3.pem", "nomodify nocopy noannots noassemble" },
         };
         
         try {
             int doc;
             int r;
             String optlist;
             
             if (argv.length < 2) {
                 throw new Exception("usage: certsec  <infile> <outfile>");
             }
             
             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_errmsg());
             }
             
             for (r = 0; r < recipients.length; r++) {
                 optlist = "certificate={filename={" + recipients[r][0] +
                                   "}} permissions={" + recipients[r][1] + "}";
                 
                 if (plop.add_recipient(optlist) == -1) {
                     /* 警告を出して、処理を続行します */
                     System.err.println("Warning: " + plop.get_errmsg());
                 }
             }
             
             /* 保護された PDF 文書を生成します */
             optlist = "input=" + doc;
             if (plop.create_document(argv[1], optlist) == -1) {
                 throw new Exception("Error: "+ plop.get_errmsg());
             }
             
             /* 文書ファイルを閉じます */
             plop.close_document(doc, "");
         } catch (PLOPException e) {
             System.err.println("PLOP exception occurred in certsec 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 の製品情報

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

(Apr 30, 2020)