「TCPDF」と「FPDI」を組み合わせてPDFで作成した契約書にサイン(署名)を追記する
2025.07.16
575
リモート化が加速したあたりから紙(捺印)での契約書にかわりグローバルサイン等、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(Adobe Acrobat 5.0)以下に下げる必要があります。
TCPDF+FPFI】PHPでpdf帳票を作成する方法【グラフも】
PHPでテンプレートPDFに動的に文字や数値を追記し出力する方法(TCPDF&FPDI)
Adobe Reader/Adobe Acrobat FAQ: PDFファイルのバージョンを下げる