TCPDFを座標でなく行・列で組む汎用機のチャート用紙という発想
TCPDFはx,y座標で要素を置く。だが帳票は方眼のように「行と列」で考えたい。汎用機時代のチャート用紙にならい、行・列で組める薄いレイヤーをTCPDFに被せた設計の記録(初出2024年の記事を再構築)。
座標で帳票を組むのはつらい
TCPDFで帳票を作るとき、要素の位置は基本的にx,y座標(mm)で指定する。1つ2つなら何ということはないが、罫線と枠とセルが数十個も並ぶ役所の様式となると話は別だ。「この見出しは左から15mm、上から23.5mm」といった数値がコードを埋め尽くし、行をひとつ増やせば以降の座標がすべてずれる。座標は、人が帳票を思い浮かべるときの単位ではない。
人は帳票を「上から何行目、左から何列目」で捉える。にもかかわらず、コードは座標で書かされる。この頭の中とコードのあいだのズレが、地味に工数を食っていた。
汎用機のチャート用紙を思い出す
考えていて、昔のやり方を思い出した。原文のまま引く。
昔、汎用機を使っていた頃の帳票設計は、チャート用紙を使って設計してからコード化していたことを思い出した。そこで、TCPDFをx、y座標でなく行と列で指定して直感的にPDFが作れると便利で開発工数が少なくなるようなライブラリー(incPdfFunc.php)を作ってみた。
——もっとも、チャート用紙と言って通じる読者は、もう多くないかもしれない。これは、画面で見た目を確かめられるより前の時代の道具だ。方眼に行番号と桁(列)が印刷された専用の用紙で、印字したい文字や罫線を一マスずつ手で書き込み、その「何行目・何桁目」を見ながらコードへ起こしていく。ワープロもプレビューも無い頃、紙の上で帳票のレイアウトを設計するための下書きだった。要は、位置の単位が紙の時点ですでに「行・列」だったのである。ならば、その単位でそのままコードも書けるようにすればいい。TCPDFの上に、行・列を座標へ翻訳する薄いレイヤーを一枚被せた。
行と列で置く
仕組みは単純だ。まず「1行の高さ」をmmで決める。以降、縦位置は行番号、横位置は列(mm)で指定する。あとはレイヤーが内部でx,yへ変換してTCPDFに渡す。
require('./tcpdf/tcpdf.php');
include_once('./include/incPdfFunc.php');
$ObjPdf = new TCPDF('P', 'mm', 'A4');
$rowH = 5.0; // 1行の高さ(mm)
$ObjPdf->AddPage();
incPdfFunc_ChartLineA4P($ObjPdf, $rowH); // 方眼を下敷きに描く(設計・デバッグ用)
// テキストを「3〜7行目・15〜150列」の矩形に流し込む
incPdfFunc_MultiCellRowCol($ObjPdf, $txt, 'G', 12, 3, 7, 15, 150, $rowH);
// ↑ ftype G=ゴシック / M=明朝
// 罫線・枠も行・列で
incPdfFunc_RectRowCol($ObjPdf, $rowH, 15, 150, 3, 7); // 枠
incPdfFunc_HLineRowMulti($ObjPdf, $rowH, 15, 150, 9); // 横線
座標計算は表から消え、コードには「何行目・何列目」がそのまま残る。表のヘッダは incPdfFunc_CellTableHeaderRowCol、縦横の罫線は incPdfFunc_HLineRowMulti / incPdfFunc_VLineRowMulti。フォントは G(ゴシック)/M(明朝)のような種別記号で指定する。設計中は incPdfFunc_ChartLineA4P で方眼そのものを下敷きに印字できるので、ズレたセルが一目で分かる。まさにチャート用紙をそのまま画面に持ち込んだ格好だ。

何が変わったか
帳票を「方眼紙に置く」感覚で組めるようになった。1行の高さ($rowH)を一箇所変えれば、全体がそれに追従する。座標のベタ書きが消えたぶん、コードにはレイアウトの意図——どのセルがどの行にあるか——が素直に現れる。開発工数が減り、後から様式を直すのも楽になった。
そしてこの行・列レイヤーは、その後の帳票開発の土台になった。ここに外字をベクター画像で差し込む仕組みなどを載せていくことになるのだが、それは別稿に譲る。基盤が「行・列」という素直な言葉で書けていたからこそ、上に機能を積んでも見通しが保てた。
AIとの協働作業での学び
ライブラリの抽象度は、道具が提供する単位ではなく、自分が問題を考える単位に合わせるとよい。TCPDFはx,y座標を提供するが、帳票を考える単位は行と列だ。ならば、その言葉で書けるレイヤーを一枚挟む。薄い変換層が、頭の中の設計とコードの距離を縮める。
この発想じたいは、汎用機時代のチャート用紙という古い道具からの借り物だった。道具は変わっても、「人が考える単位で書けるようにする」という設計のポイントは変わらない。初出は2024年、ICTCacao のサイトでフリーウェアとして公開しているライブラリの設計思想を、いま改めて振り返って再構成した。