葉書に宛名書き 1月8日, 2021


1 連絡先.appから書き出したvcfファイルや,所定フォーマットのcsvファイルを指定すると,
2 必要なデータをリストに組み立てて,
3 郵便番号は枠位置に合わせ,住所・氏名は横書きで,指定したプリンターに印刷する。

「葉書AB」が使えなくなってからは,あれこれ色々な方法で葉書の宛名を印刷してきた。でもどうもこれという決定版に出会えずにいた。自分用の宛名印字ソフトがないだろうか。住所・氏名の縦書きには全く拘りが無いので,なんとか気にいった宛名ソフトをみつけたい。できたらpythonでプリントする方法をみつけたい,と工夫してみた。やはり横書きが楽。

条件は,

  • ▶郵便番号は番号枠に納めたい
  • ▶全てをpythonでまとめたい
  • ▶入力はvcfでもcsvでもよい
  • ▶vcfはBig Surの連絡先.appの出力によっている
  • ▶csvのカラムは,姓・名・郵便番号・住所・連名の5つがこの順で並ぶこと
  • ▶住所・氏名は横書きする
  • ▶連名を1名許容する
  • ▶出力先のプリンターは使い慣れたカラーのもの

使用フォントは源真ゴシック。他のものでも勿論OKで,スクリプト冒頭にそのパス(PATH_TO_FONTS)を具体的に指定する。また,作業用ディレクトリを指定することでデバッグし易くなるので,それ(PATH_TO_WORK)も便利な場所を指定する。

全体の流れはスクリプトを見れば明瞭だが,一応要約しておくと,指定されたvcfファイル,csvファイルの中身を順にリストに書き出す(readvcf(), readcsv())。その1件をReportLabモジュールで葉書サイズのPDFページに配置し(mk1PDF()),それを繰り返して複数ページをまとめ(combine()),プリンターに出力する。過程で使用したファイルは見栄えよく,消去している。

工夫した点は,郵便番号枠に合わせるために,textobject.setCharSpace()の数値を0.2mm間隔で広げてみて適当そうな値を探したことだろうか。我が環境では,ピッタリ納まる。使用した葉書のフォーマットにより,もしズレるようなら,setTextOriginの数値などを変えて試してみることかな。ここではKOKUYO-KJ-A2630で設定している。数値は左下隅が原点。

なお,連絡先.appに登録する際,長くなりそうな住所には,改行したい場所1箇所に半角スペースを挿入しておく。出力例では「半蔵門マンション」の前にその処置がしてある。2箇所で改行するのは一応許されない仕様となっている(修整は簡単)。住所の改行箇所に自信が無い場合,スクリプトが「Printer 準備 OK?」と聞いてきた時に停止させればよい。PATH_TO_WORKに指定した場所に "combined.pdf" が出力されているので,それを確認する。ちょっと手工業的だけど充分役に立つ。

また,使用するプリンターは当然こことは異なるだろう。その場合,’lpstat -s’で表示される登録済みプリンターのリストを勘案して工夫すれば,多分うまくいくはず。