QSLカード印刷テンプレートを完成させました

前回の記事でQSLカード印刷機能の基盤を紹介しましたが、レイアウトを何度も調整し、実用的なテンプレート1が完成しました。ここまでの改善点をまとめます。

レイアウトの大幅見直し

初期版から以下の点を改善しました:

  • 縦レイアウト(100×148mm)に変更 — ハガキ縦向きのデータ面として自然な配置に
  • 転送先コールサインを右上に大きく(16pt太字) — JARLビューロー仕分け用
  • To Radio: は改行して左寄せ — 転送先とTo Radioは別物で、混同しない設計
  • PSE/TNX QSLチェック欄を廃止 — 必須ではないため省略してスッキリ

交信データ表の改善

DATE / Time / MHz / MODE / RST の5列構成です。ヘッダーは塗りつぶしなしの罫線のみで、印刷時のインク節約と見やすさを両立しました。

  • DATE:1行目にDD/Mon形式(例: 10/Feb)、2行目に西暦4桁(例: 2026)
  • Time:1行目に時刻(例: 09:27)、2行目に「JST」と表記

日時が2行になることで可読性が大幅に向上しました。

設備情報とQTHの配置

交信データ表の下に、運用セッションから自動取得した設備情報を表示します:

RIG: FT-60    PWR: 5W
ANT: RH951S
QTH: 常置場所

RIGとPWR(出力)は同一行にまとめました。3行の行間を均等(5mm間隔)に揃えることで、きれいに整列します。

QTHの表示には工夫があります。運用セッションの自局QTHと、設定画面で登録した常置場所の住所を比較し、常置場所での運用なら「常置場所」、移動運用なら実際の運用地名とJCCコードを表示します。

カード下半分 — 自局情報

カードの下半分にはセンター揃えで自局情報を配置しました:

  • 自局コールサイン(24pt太字) — 移動運用なら「/エリア番号」付き
  • Op: オペレーター名(10pt)
  • 常置場所: 住所 + JCCコード(9pt)

移動運用時のエリア番号は、JCCコードの先頭2桁(都道府県番号)からJARL体系のエリア番号に自動変換しています。例えば大阪(JCC#25xx)なら3エリア、北海道(JCC#01xx)なら8エリアという具合です。

常置場所の自動判定ロジック

「常置場所での運用かどうか」の判定は、セッションのQTHと登録済み住所を比較して行っています。都道府県部分を除去してから前方一致で比較することで、住所の細部が異なっていても適切に判定できます。QTHが未設定の場合は常置場所扱いとするフォールバックも入れています。

「Tnx FB QSO 73!」の一言

備考欄の下に、アマチュア無線の定番メッセージ「Tnx FB QSO 73!」を右寄せで配置しました。FBは「Fine Business」の略で「素晴らしい」、73は「Best regards」を意味するQコード由来の略語です。ちょっとした一言ですが、QSLカードらしさが出ます。

テンプレート方式の採用

描画処理はqsl_template1.phpとして独立させ、PDF生成APIからテンプレート番号で呼び分ける設計です。将来的にテンプレート2、3と追加していけます。印刷画面のプルダウンでテンプレートを選択する仕組みも実装済みです。

技術メモ

  • TCPDFでサーバーサイドPDF生成(Composer導入済み)
  • フォントはIPAexゴシックTCPDF_FONTS::addTTFfont()で登録(インスタンスメソッドではない点に注意)
  • 座標はすべてmm単位で直接指定 — TCPDFのSetXY + Cellで精密配置
  • JCCコード→エリア番号のマッピングテーブルをPHP内に保持

次はテンプレートのバリエーション追加や、ADIFエクスポート機能に取りかかる予定です。