メニュー

東京・小金井市のWEB制作会社の豆知識

MEMORANDUM

「TCPDF」と「FPDI」を組み合わせてPDFで作成した契約書にサイン(署名)を追記する

リモート化が加速したあたりから紙(捺印)での契約書にかわりグローバルサイン等、WEBでの契約締結が多くなってきています。
弊社でもサービスの導入を考えましたが、制作会社であることから同じようなことができないかと考え、「TCPDF」と「FPDI」を組み合わせてPHPで実装した方法をメモ

実装手順

管理画面で受付番号付きURLを発行

契約ページにアクセスできる人を制限するため、受付番号付きのURLを作成して対象者にメールを送信。
弊社では専用の管理画面を用意してメールの送信(契約書の発行)を行っています。

契約ページでサインアップ

契約ページで受付番号のチェックを行い、同時に使用期限(発行から10日程度を想定)に達している番号の削除処理も行う。
内容に問題がなければ入力フォームに進む。

契約処理(PDF書き込み処理)

PHP

if(!empty($_POST['submit'])){

	foreach($_POST as $key => $value){
		$dt[$key] = mb_convert_kana($value, "KVa","UTF-8");	
	}

	//入力エラー処理省略

	if(empty($err_msg['error'])){

		//ライブラリ読み込み
		include '../vendor/tcpdf/tcpdf.php';
		include '../vendor/fpdi/autoload.php';
		
		$tcpdf = new setasign\Fpdi\Tcpdf\Fpdi('P', 'mm', [210, 297], true, 'UTF-8', false);
		
		// ヘッダーの出力無効
		$tcpdf->setPrintHeader(false);
		// フッターの出力無効
		$tcpdf->setPrintFooter(false);

		//契約書ファイル(PDF)の読み込み
		$pathToPdf = '../pdf/○○.pdf';
		//契約書のページ数をカウント
		$pageCount = $tcpdf->setSourceFile($pathToPdf);
		
		for($pageNo = 1; $pageNo <= $pageCount; $pageNo++){
			
			$templateId = $tcpdf->importPage($pageNo);
			$size = $tcpdf->getTemplateSize($templateId);
			$tcpdf->AddPage($size['orientation'], [$size['width'], $size['height']]);
			$tcpdf->useTemplate($templateId);
			
			if($pageNo === 2) {
				
				$tcpdf->SetFont("kozgopromedium", "", 12); // デフォルトで用意されている日本語フォント
				//記載位置を調整し、入力内容を追記
				$tcpdf->Text(18, 223, '甲)'.htmlspecialchars($dt['address'], ENT_QUOTES, 'UTF-8'));
				$tcpdf->Text(18, 230, htmlspecialchars($dt['company'], ENT_QUOTES, 'UTF-8'));
				$tcpdf->Text(18, 237, htmlspecialchars($dt['name'], ENT_QUOTES, 'UTF-8'));
			
			}
		
		}
		
		// 保存する
		$tcpdf->Output(__DIR__.'/../pdf/sign_'.$dt["id"].'.pdf', 'F');

		//保存したPDFファイルをメールに添付して送信処理省略
		//使用済み受付番号の削除処理省略
		//作成したPDFの削除処理省略
		
		$dt = array();
		header("location: ○○○○"); //完了画面へ遷移
		exit;

	}

}

まずは「TCPDF」と「FPDI」をそれぞれのサイトからダウンロードし、サーバーにアップロード。
今回は契約書の2ページ目に追記をしたいので、使用する契約書のページ数を数え、2ページ目に記載処理を実装。
記載の完了したPDFは一時的にサーバー内に保存してからメール添付で送信を行っています。

尚、使用するPDFに関して複数ページでバージョンが1.5以上の場合は動かなくなるため、バージョンを1.4以下に下げる必要があります。

RANKING

人気記事

同一カテゴリーの記事