年賀状:宛名を pandas と reportlab でやっつける
- 2017/12/28
- 15:00
今回は、python を使ってハガキの宛名セットをばばッと印刷準備してみた際のメモを残したいと思います。よろしくお願いします。
■ 宛名セットは tsv ファイル
簡単なので。確認も excel とかでできますし。で、リンク先に示しているようなファイル(personal_information.tsv)を作成します。このファイルはサンプルでして、「擬似個人情報生成」のページで生成したものを編集して作成しました。なので架空情報ですので、ご注意ください。
実際には vim で昨年のハガキを見ながらチマチマ打ち込みました。あと、おせっかいですけど、set encoding=utf-8 と set fileencoding=utf-8 は $HOME/.vimrc に書いといて下さいね。忘れないで下さいね。
■ 宛名一覧は pandas で読込み
で、いつものように pandas 使って tsv ファイルを読み込むことにします。末尾の列の printable 列を o でリセットとかする際に簡潔に記述できるし、良いかなぁと思ったので。
reportlab を使うと pdf が簡単に生成できるんですって。reportlab はコマンドラインから pip install reportlab で簡単に導入できました。
で、とりあえず、全片は github に置いておきました。ご参考です。もっと、きれいに書けると思いますけど、時間がなかったのでやっつけました。で、実行すると こんな感じのpdf が生成されます。
簡単なのでコードへのコメントは省略しますけど、CID フォントだと縦書きができるみたいなので楽でした。コードの編集時は draw_sample で、スキャンしたハガキを当てて座標をとったりしました。まぁ、印刷設定時に微調整が入りますけど、画像重ねはありがたい機能でした。
■ 印刷
pdf リーダは foxit reader を使っています。こいつで、address.pdf を読み込んで、一括印刷しました。プリンタは、brother の dcp-j562n です。で、設定は次のような感じです。
まずは、印刷ボタンを押すと下のような印刷設定が出てきます。で、右上の property を押します。
基本設定は、用紙サイズを「ハガキ」にします。で、左下の印刷プレビューを選んでおくと、ちょっと安心します。

あと、なんか、勝手にふちを入れてくるので、何回か失敗ハガキで試し印刷しながら「任意倍率」 → 95 が良かったです。あとは、モノクロ選んだり、インク節約モードを選んだりしました。

で、印刷すると、ちょっとズレるんですけど、まぁ、ふぬ、まぁ、こんなもんかなっていう感じで印字してくれました。
あと、裏面ですけど、基本設定で「最高画質」「ハガキ」フチなし印刷にチェック「鮮やか」「縦」を選択。拡張機能で、拡大縮小 → 「オフ」を選択。
■ おしまい
今年は、104円の失敗でした。喪中の方の分も刷っちゃったし、サンプル画像付きのまま印刷しちゃったり。相変わらずのひどい歩留まりですけど、ま、しょうがないですよね。
あと、pdf でやっつけましたけど、CID フォントで縦書きを使用する場合、ゴシックと明朝の二択だったので (reportlab の github 見た限り) ちょっと味気ない感じになってしまいました。TTFont も考えたんですけど、文字サイズの取得が気持ち悪かったので、やめました。次回は、OpenCV で記述しようと思います。
それでは、よいおとしを!
■ 宛名セットは tsv ファイル
簡単なので。確認も excel とかでできますし。で、リンク先に示しているようなファイル(personal_information.tsv)を作成します。このファイルはサンプルでして、「擬似個人情報生成」のページで生成したものを編集して作成しました。なので架空情報ですので、ご注意ください。
実際には vim で昨年のハガキを見ながらチマチマ打ち込みました。あと、おせっかいですけど、set encoding=utf-8 と set fileencoding=utf-8 は $HOME/.vimrc に書いといて下さいね。忘れないで下さいね。
■ 宛名一覧は pandas で読込み
で、いつものように pandas 使って tsv ファイルを読み込むことにします。末尾の列の printable 列を o でリセットとかする際に簡潔に記述できるし、良いかなぁと思ったので。
df = pd.read_csv('personal_information.tsv',■ 宛名書き印刷準備は reportlab で pdf 生成
delimiter='\t', encoding='utf-8')
reportlab を使うと pdf が簡単に生成できるんですって。reportlab はコマンドラインから pip install reportlab で簡単に導入できました。
で、とりあえず、全片は github に置いておきました。ご参考です。もっと、きれいに書けると思いますけど、時間がなかったのでやっつけました。で、実行すると こんな感じのpdf が生成されます。
簡単なのでコードへのコメントは省略しますけど、CID フォントだと縦書きができるみたいなので楽でした。コードの編集時は draw_sample で、スキャンしたハガキを当てて座標をとったりしました。まぁ、印刷設定時に微調整が入りますけど、画像重ねはありがたい機能でした。
■ 印刷
pdf リーダは foxit reader を使っています。こいつで、address.pdf を読み込んで、一括印刷しました。プリンタは、brother の dcp-j562n です。で、設定は次のような感じです。
まずは、印刷ボタンを押すと下のような印刷設定が出てきます。で、右上の property を押します。

基本設定は、用紙サイズを「ハガキ」にします。で、左下の印刷プレビューを選んでおくと、ちょっと安心します。

あと、なんか、勝手にふちを入れてくるので、何回か失敗ハガキで試し印刷しながら「任意倍率」 → 95 が良かったです。あとは、モノクロ選んだり、インク節約モードを選んだりしました。

で、印刷すると、ちょっとズレるんですけど、まぁ、ふぬ、まぁ、こんなもんかなっていう感じで印字してくれました。
あと、裏面ですけど、基本設定で「最高画質」「ハガキ」フチなし印刷にチェック「鮮やか」「縦」を選択。拡張機能で、拡大縮小 → 「オフ」を選択。
■ おしまい
今年は、104円の失敗でした。喪中の方の分も刷っちゃったし、サンプル画像付きのまま印刷しちゃったり。相変わらずのひどい歩留まりですけど、ま、しょうがないですよね。
あと、pdf でやっつけましたけど、CID フォントで縦書きを使用する場合、ゴシックと明朝の二択だったので (reportlab の github 見た限り) ちょっと味気ない感じになってしまいました。TTFont も考えたんですけど、文字サイズの取得が気持ち悪かったので、やめました。次回は、OpenCV で記述しようと思います。
それでは、よいおとしを!
- 関連記事
-
-
Python で日本地図(2): 大相撲関取の出身地分布で3次元棒グラフ 2018/05/08
-
Python で日本地図: (日本人)関取の出身地の分布で塗り絵 2018/01/24
-
年賀状:宛名を pandas と reportlab でやっつける 2017/12/28
-
Matplotlib の LaTeX テキストのフォントをローマンに 2017/10/20
-
図書館で借りている書籍の情報を取得する 2017/09/23
-