年賀状のシーズンですね。年賀状の宛名をPDFで出力するサイトを作りました
年賀状って作成するのは結構大変ですよね。
「そもそも年賀状って必用なのか…」とか思っちゃうこともあるんですが、そう思いつつも年賀状システムはあったほうが良いと思っています。
ということで今年も年賀状を作りました。
さてその年賀状が大変なの理由の一つに、宛名+裏面の作成が大変ということが挙げられます。
今年の年賀状では裏面についてはすぐに作成できたのですが、この宛名が大変でした。
昨年までは年賀状印刷に「筆まめ」をずっと使っていました。
筆まめは年賀状、暑中見舞いなどを発送したかのチェックボックスもあり便利で気に入っていました(今も気に入っています)。
ただ残念ながらソフトウェアがWindows専用なんですよね。
最近ではMacでばかり作業をしていてWindowsをほとんど使う機会がありません。
MacでWindowsを動かすParallelsを導入していますが、今年の10月でライセンスが切れてしまっていて、年賀状のために購入するのもなぁ…、とためらっていました。
幸い筆まめのCSVエクスポートデータが有ったため、そちらからなんとかしよう、ということになりました。
ちなみに郵便局からもAIRをつかった宛名印刷があります。ですがそちらは文字コードの認識が甘く、SJIS、UTF-8を試したのですがダメでした。
(iconvを使ったのですが、ローマ字数字のⅢや、中黒点などでとろでエラーになり、省くのが大変でした。あとiconvの引数って分かりにくいですよね。)
というわけでCSVデータを元に宛名PDF化をすることに決めました。
CSVデータの扱いについては、ローカルのオフィスだとこれも大変だったため、Googleドライブのスプレッドシートから共有させる、という方法を取りました。
位置調整は大変
今回のサービスに限らず宛名印刷の時に問題になるのですが、ハガキの印刷では位置調整が大変です。
特に郵便番号、差出人郵便番号は枠が印刷されているので、その位置調整が大変でした。
基本的な進め方として下記の通り進めました。
- 年賀はがきをスキャン
- スキャン画像をトレースしてPDF化
- トレースしたPDFをベースとしてTCPDFの位置調整
- ハガキサイズで印刷、実際のハガキに重ねてズレの確認
- 以下ループ…
この位置調整にはかなり時間を使いました。
ベースの枠を作ったPDFデータ、PHPから動的に宛名を出力するTCPDFの双方に位置を調整する機能があります。
双方ともにミリ単位で調整が可能で、実寸値を元にピタリと出力すればズレないはず…、ではあるのですが、どうしてもズレが生じてしまっていました。
そこで実際に使うプリンター(Canon MG6300シリーズ)で印刷して、ズレを実測で計測して調整する、という繰り返しでした。
最終的にはズレるとまずい郵便場号について、フォントサイズをできる限り少なくすることで対処しました。
フォントサイズを小さくすることで郵便番号枠の「遊び」が大きくなり、プリンタ印刷時にある程度はズレを吸収できるようになりました。
最終的な印刷はこんな感じです。
(テストデータで印刷すればよかった…!)
というわけでモザイクだらけで分かりにくいですが、結構いい感じです。
情報の取り扱いについて
情報の取り扱いについては細心の注意を払っていますが、利用に際しては
具体的なリスクについて、Googleスプレッドシートを共有して、このサービスで読み出すということになりますので、そのリスクについては十分考慮してください。
実際のコードでどうやって読み出しているか、というところについてはGitHubを参照してください。
安全面の主張をしておくと、PHPのSplFileObjectでURLから直接読み出して、PDF化の処理を行って、PDFもファイル書き出しではなくブラウザに直接吐き出しています。
CSVデータやPDFをファイルに書き出すことはしていないので、そのあたりから漏洩するリスクは無いと考えています。
が、CSVデータを共有するという前提ですので、そのあたりを気にする場合には、是非ともコードを手元で動かす方法をオススメします。
また書き出しが終わったら共有をオフにすることをオススメします。