<?php /* * 生成した PDF に電子署名を付与: * PDFlib を用いてメモリ内に生成した動的な文書に対して、PLOP DS を使って電子署名を付与します。 * このサンプルには、PLOP DS の他、PDF の生成を行う PDFlib が必要です。 * * 必要な製品 : PDFlib PLOP DS 5 及び PDFlib * 必要なデータ : demo_signer_rsa_2048.p12 * demo_signer_rsa_2048.p12 は data ディレクトリにあります。 * demo_signer_rsa_2048.p12 のパスワードは demo です。 */ /* 本サンプルに必要なデータが保存されているディレクトリを指定する */ $searchpath = "{../data} {../../data}"; $out_filename = "hellosign.pdf"; /* 基本的な署名オプション */ $sign_opts = /* ltv オプション:長期検証(LTV)をするかどうかを指定する。 LTV を行う場合は full を指定する(デフォルト:try) */ "ltv=try " . /* engine オプション:電子署名を作成するための暗号化エンジンを指定(デフォルト:builtin) digitalid オプション:使用するデジタル ID を指定する password オプション:デジタル ID に対するパスワード等を指定する */ "engine=builtin digitalid={filename=demo_signer_rsa_2048.p12} password={demo} "; /* ----------- ステップ1: PDFlib を用いてメモリ内に動的に文書を生成する ---------- */ try { /* PDFlib オブジェクトを作成する */ $p = new PDFlib(); # create a new PDF document in memory /* ①メモリ内に新規PDF文書を生成 */ $p->begin_document("", ""); /* 文書の作成者やタイトル等、文書情報フィールドを設定する */ $p->set_info("Creator", "hellosign.php"); $p->set_info("Author", "Rainer Plockl"); $p->set_info("Title", "Hello, world/signed (PHP)!"); /* ②フォントをロードする */ $font = $p->load_font("Helvetica-Bold", "host", ""); /* ③PDF 文書ページを開く */ $p->begin_page_ext(595, 842, ""); /* ④位置決めをして文字列を出力する */ $p->setfont($font, 24); $p->set_text_pos(50, 700); $p->show("Hello, world/signed!"); $p->continue_text("(says PHP)"); /* ⑤PDF ページを閉じる ⑥PDF 文書を閉じる */ $p->end_page_ext(""); $p->end_document(""); /* ⑦メモリ内にある PDF 文書データを取得 */ $contents = $p->get_buffer(); /* ----------- ステップ2 : PLOP DS を用いて文書に署名する ---------- */ /* PLOP オブジェクトを作成する */ $plop = new PLOP(); /* 読み込みたいファイルの入ったディレクトリを指定する */ $plop->set_option("searchpath={{$searchpath}}"); /* ⑧PVF(PDFlib Virtual File System)ファイルを生成する */ $plop->create_pvf("/pvf/hello.pdf", $contents, ""); /* ⑨PVF ファイルから PDFlib で作った文書を開く */ if (($doc = $plop->open_document("/pvf/hello.pdf", "")) == 0) { die("Error: " . $plop->get_apiname() . ": " . $plop->get_errmsg() . "\n"); } /* ⑩電子署名を作成する */ if ($plop->prepare_signature( $sign_opts) == 0) { die("Error: " . $plop->get_apiname() . ": " . $plop->get_errmsg() . "\n"); } /* ⑪電子署名を PDF に付与して出力する */ if ($plop->create_document($out_filename, "input=" . $doc) == 0) { die("Error: " . $plop->get_apiname() . ": " . $plop->get_errmsg() . "\n"); } /* ⑫PDF文書を閉じる */ $plop->close_document($doc, ""); /* ⑬PVFファイルを削除する */ if ($plop->delete_pvf("/pvf/hello.pdf") == 0) { die("Error: %s\n" . $plop->get_errmsg()); } } catch (PLOPException $e) { die("PLOP exception occurred in hellosign sample:\n" . "[" . $e->get_errnum() . "] " . $e->get_apiname() . ": " . $e->get_errmsg() . "\n"); } catch (Exception $e) { die($e); } $p = 0; header("text/html"); print "<a href=\"$out_filename\">click here</a> to open the signed PDF file"; ?>