PLOP 4 からの移行
PLOP の最新バージョンである PLOP 5 / PLOP DS 5 (以下 PLOP 5) がリリースされました。PLOP 5 では、電子署名の長期検証やタイムスタンプに対応するなどの新たな機能が多数追加されています。これらの機能を利用したいと思いながらも、過去に蓄えられたプログラム資産を捨てるわけにはいかない。こんなお悩みをお持ちのお客様のために、PLOP 4 を使用するアプリケーションを、どのように PLOP 5 へ移行するか、具体的なプログラムを交えて解説します。
PLOP 5 では、関数名や関数のオプションが一部変更されています。順を追って見ていきましょう。
PLOP、PLOP DS に関する変更
1. PLOP_create_file() の削除
既存の PDF に PLOP で処理を行った結果の PDF を作成する関数 PLOP_create_file() は削除され、PLOP 5 では使用できません。代わりに、PLOP 5 では PLOP_create_document() を使用します。また PLOP_create_document() では、input オプションで処理を行う PDF のドキュメントハンドルを明示的に指定する必要があります。
$p = new PLOP();
$doc = p->open_document("infile.pdf", "");
$p->create_document("outfile.pdf", "input=$doc");
…
PHP 5 / PLOP 5
2. PLOP_close_document() の引数の追加
PLOP 4 の PLOP_close_document() では、PLOP オブジェクトと PDF ドキュメントハンドルを引数にしていました。PLOP 5 の PLOP_close_document() では、この他に文字列型の optlist を引数に与える必要があります。引数が足りない場合は他の関数と同様にエラーになりますので、オプションを使用しない場合でも空文字 ("") を与える必要があります。
$p = new PLOP();
$doc = $p->open_document("infile.pdf", "");
…
$p->close_document($doc, "");
PHP 5 / PLOP 5
PLOP_close_document() の optlist では "lastinthread" オプションを使用することができます。
3. PLOP_create_file() の compatibility オプションの廃止
PLOP 4 の PLOP_create_file() には compatibility オプションがあり、出力する PDF のバージョンを指定することができました。PLOP 5 では PLOP_create_file() の代わりに PLOP_create_document() を使用しますが、PLOP_create_document() には compatibility オプションはありません。出力する PDF のバージョンは、常に元になった PDF のバージョンと同じになります。
4. optimize オプションのデフォルト値の変更
PLOP 4 の PLOP_create_file() には optimize オプションがあり、このデフォルトは "all" (PLOP で実行可能なすべての最適化処理を実行) でした。PLOP 5 で PLOP_create_file() を置き換える PLOP_create_document() にも optimize オプションはありますが、デフォルトは "none" (最適化処理を行わない) になっています。optimize による PDF の最適化 (冗長なオブジェクトの削除) を行う場合、明示的に "optimize=all" を指定する必要があります。
$p = new PLOP();
$doc = $p->open_document("infile.pdf", "");
$p->create_document("outfile.pdf", "indoc=$doc optimize=all");
…
PHP 5 / PLOP 5
optimize を使用すると PDF 文書内に同じ画像ファイルが複数含まれるといった冗長性が排除され、ファイルサイズの縮小が期待できます。一方、最適化を行う分だけ処理に時間がかかります。
PHP 5 / PLOP 5
5. pdfa1 サブオプションの非推奨化
PLOP_create_file の sacrifice オプションのサブオプション pdfa1 は、PLOP 5 の PLOP_create_document() では非推奨になります。代わりに pdfa サブプションを使用します。
$p = new PLOP();
$doc = $p->open_document("infile.pdf", "");
$p->create_document("outfile.pdf", "indoc=$doc sacrifile={pdfa}");
…
PHP 5 / PLOP 5
6. 非推奨関数の廃止
PLOP 4.1 までに非推奨になっていた下記の関数が削除されています。
- PLOP_utf16_to_utf32()、PLOP_utf8_to_utf16()、PLOP_utf8_to_utf32()
→ PLOP_convert_to_unicode() を使用
- PLOP_open_document_mem()
→ PVF でメモリ上に仮想ファイルを作成して PLOP_open_document() する
- PLOP_get_value()、PLOP_set_value()、PLOP_get_parameter()、PLOP_set_parameter()
→ PLOP_get_option()、PLOP_set_option() を使用
- PLOP_open_file()、PLOP_close()、PLOP_open_mem()、PLOP_open_callback()
→ PLOP_open_document()、PLOP_close_document() を使用
PLOP DS のみに関わる変更
1. sign オプションの削除
電子署名を行う際、PLOP DS 4 では PLOP_create_file() の sign オプションを使用していましたが、PLOP DS 5 の PLOP_create_document() では sign オプションが削除されています。代わりに、新たに追加された関数 PLOP_prepare_signature() を PLOP_create_document() より前で呼び出します。
$p = new PLOP();
$doc = $p->open_document("infile.pdf", "");
$p->create_document("outfile", "");
$p->prepare_signature("engine=builtin ".
"digitalid={filename=demorsa2048.p12}".
"password={demo}");
…
PHP 5 / PLOP DS 5
PLOP_prepare_signature() で使用可能なオプションは、PLOP 4 までの PLOP_create_document() の sign オプションの内容とほとんど同じです。以下に変更があったものを記載します。
- appearance → field
- fieldname → name
詳細については PLOP Manual をご覧ください。
2. signatures サブオプションの廃止
PLOP DS 4 の PLOP_create_file() には、sacrifice オプションのサブプションとしてインポート元の電子署名を破棄する signatures がありましたが、PLOP DS 5 の PLOP_create_document() には存在しません。インポート元の電子署名をどのように扱うかは PLOP_prepare_signature() の update オプションによって決まり、update=true (デフォルト) の場合は保持し、udpate=false の場合は破棄します。
$p = new PLOP();
$doc = $p->open_document("infile.pdf", "");
$p->prepare_signature("engine=builtin ".
"digitalid={filename=demorsa2048.p12}".
"password={demo}".
"update=false");
$p->create_document("outfile.pdf", "");
…
PHP 5 / PLOP DS 5
3. certstore サブオプションの廃止
PLOP DS 4 では PLOP_create_file() の digitalid オプションでサブオプション engine=mscapi を指定した場合に certstore サブオプションを指定する必要がありましたが、PLOP DS 5 の PLOP_prepare_signature() では不要になりました。また、PLOP_prepare_signature() には certstore サブオプションが存在しません。
4. keyusage サブオプションの廃止
スマートカードなどの暗号トークン 1 個に複数のデジタル ID が存在する場合に、PLOP DS 4 では PLOP_create_file() の digitalid オプションのサブオプション keyusage でターゲット ID を指定していましたが、PLOP DS 5 では選択アルゴリズムの変更により不要になりました。そのため PLOP DS 5 では keyusage サブオプションは存在しません。
6) おわりに
いかがでしたでしょうか。PLOP 4 からの移行に少しでもお役に立てればと思います。
PLOP 5 の互換性については、インストールフォルダの doc/compatibility.txt をご覧ください。
疑問点やリクエストなどがあれば、
お問い合わせフォームからお問合せ下さい。
(Dec 9, 2014 - Jan 29, 2015)