みなさん、こんにちは。
12月に入り、いよいよ師走ですね。この季節の日本の風物詩といえば……そう、年賀状です。
最近は「年賀状じまい」なんて言葉も聞きますし、送る人は年々減っているとはいえ、やっぱり年末にはプリンタを動かさないと気が済まない!という方も多いのではないでしょうか。
私もその一人なのですが、実はこれまで、年賀状の宛名印刷にはWindowsを使っていました。「筆まめ」や「筆ぐるめ」、「筆王」あるいはフリーソフトの「Aprint」など、Windowsには優秀なソフトがたくさんありますからね。
でも、ふと思ったんです。 「今年こそは、Linuxだけで年賀状印刷を完結させたい!」
そんな野望を抱いてリサーチしたところ、天杉善哉氏が開発された「Riosanatea」という素晴らしいPython製ソフトに出会いました。しかし、私の環境(Xubuntu 22.04)で動かしてみると、いくつかの壁にぶち当たりまして……。
今回は、この「Riosanatea」を自分の環境に合わせて改造し、快適に印刷できるようにした奮闘記をお届けします。
出会いは良かったけれど……発生した問題
「Riosanatea」はUbuntu 24.04に対応し、wxPythonでGUIも実装されている非常に完成度の高いソフトです。

意気揚々とダウンロードし、実行していざ印刷!……してみたのですが、私の環境では以下の問題が発生してしまいました。
- 印刷サイズが合わない!
- これが一番致命的でした。画面上のプレビューでは完璧なのに、印刷すると文字が巨大化してハガキからはみ出したり、位置がズレたり……。 どうやら私のCanonプリンタ(TS8230)では、ハガキサイズを指定してもドライバが勝手にA4サイズに引き伸ばして解釈してしまうようでした。
- ターミナルが叫ぶ(GTK警告)
- 起動するたびに
Gtk-CRITICALという警告ログが大量に流れます。精神衛生上よくありません。
- 起動するたびに
- ボタンが暴れる
- ウィンドウサイズを変えるとボタンが伸び縮みしたり、重なったりしてレイアウトが崩れてしまいました。
「これは……直すしかない!」 エンジニアの血が騒ぎ、修正作業に着手しました。
解決へのアプローチ – どうやって直した?
ここからは技術的な修正内容です。GitHub Copilot(Claude Sonnet 4.5)という強力な相棒と共に、コードをガリガリ書き直しました。
1. 印刷方式を「PNG」から「PDF」へ変更
これが今回最大の改善ポイントです。 元のコードではPNG画像を生成して印刷していましたが、DPI(解像度)の情報がプリンタドライバに正しく伝わらず、サイズズレの原因になっていました。
そこで、reportlab ライブラリを使って一度PDFに変換してから印刷するように変更しました。
from reportlab.pdfgen import canvas
from reportlab.lib.units import mm
# 画像サイズから用紙サイズを計算(8 pixel/mm)
paper_width_mm = img_width_px / 8
paper_height_mm = img_height_px / 8
# PDFを作成(ここにページサイズ情報が埋め込まれる!)
pdf_canvas = canvas.Canvas(pdf_path, pagesize=(paper_width_mm*mm, paper_height_mm*mm))
pdf_canvas.drawImage(img_path, 0, 0, width=paper_width_mm*mm, height=paper_height_mm*mm)
pdf_canvas.save()
PDFならページサイズの定義が明確なので、プリンタ側も「あ、これはハガキサイズね」と正しく認識してくれます。これでズレ問題は解消!
2. 全メーカー対応を目指して(Canon、Epson、Brother…)
プリンタメーカーによって、用紙サイズの呼び名が違うってご存知ですか?
- Canon:
w283h420 - Epson:
hagaki - Brother:
Postcard
……バラバラすぎます(泣)。
そこで、画像サイズから「これはハガキだな」と判断したら、各メーカーの定義に合わせて適切な設定を自動検索するロジックを組み込みました。これで、どのメーカーのプリンタでも概ね動くはずです。ただし、私の持っているプリンターはCanon製なので、検証できているのはCanonだけです……。
3. フォントサイズ調整機能の追加
「プレビュー通りでも、実際に印刷すると文字がちょっと大きいかも……」という時のために、GUIにフォントサイズ調整機能を追加しました。

# フォントサイズ値から倍率を取得してリサイズ
font_scale = resize_percent[0] / 100.0
fontsize = int(self.parts_dict["name-fontsize"] * font_scale)
これで50%〜150%の間で自由に文字の大きさを微調整できるようになりました。
4. GUIの見た目修正
大量に出ていたGTK警告は、SpinButtonなどのウィジェットサイズを明示的に指定することで概ね黙らせました。また、ボタンが伸び縮みしないよう wx.FIXED_MINSIZE フラグを追加し、レイアウトを安定させました。ただし、警告がすべてなくなったわけではないので、もう少し調整が必要です。
結果 – Linuxでも快適な年賀状作りが可能に!?
これらの修正により、以下のことができるようになりました。
- プレビュー通りの印刷位置(PDF化の恩恵!)
- 主要プリンタメーカー対応(Canon、Epson、Brother、HPなどに対応)
- 多彩な用紙対応(ハガキ、往復ハガキ、長形/角形封筒など)
- フォントサイズの自由な調整
これで、Windowsを立ち上げることなく、Ubuntuだけでサクサク宛名印刷ができるようになりました。
まとめ
Linuxでの宛名印刷は、Windowsに比べると選択肢が少ないのが現状です。そんな中、オープンソースで公開されている「Riosanatea」は本当に貴重な存在です。 今回の修正で、より多くの環境で実用的に使えるようになったと思います。
修正したコードはGitHubで公開しています。もし同じように「Linuxで年賀状が出したいけど印刷がうまくいかない!」という方がいらっしゃれば、ぜひ試してみてください。
関連リンク
- オリジナル版: 宛名印刷ソフト「Riosanatea」(天杉善哉氏)
- 今回の改善版リポジトリ: GitHub – taoman26/riosanatea
使用技術: Python 3.10+, wxPython, Pillow, reportlab, CUPS
本日も最後までお読みいただきありがとうございました。
それでは、よいLinuxライフ(そしてよいお年)を!
↓続編を書きました。




ピンバック: 【続・Linuxで年賀状】宛名印刷ソフト「Riosanatea」に会社名・部署名フィールドを追加した話 - ビューローみかみ