Daydreaming in Brookline, MA

印刷して書き込むタイプのカレンダーを作りました

1 はじめに

ここ数年、うちでは 印刷用シンプルなカレンダー (ご自由にお持ちください) を愛用しています。月曜始まりも選べるなどほぼ理想的な書き込み用カレンダーなのですが、一点だけ気になる点がありました。2023年1月のように1ヶ月が6週に渡ってしまうと、最後の1,2日が前の週にマージされてしまい、その2,4日は書き込みスペースが半分になってしまうのです。そこで、正月休みを利用して類似のカレンダーを自動生成するpythonスクリプトを作ってみました。githubにて 公開 しています。

ついでなので、世界の休日を選べるようにしてみました。(holidays というライブラリのおかげです) dec2023_de.jpg なにげにドイツ版のサンプル画像。

2 カレンダー置き場

ここに置いてあるのは常に第1週を表示する版です。ご自由にお持ちください。リンクに飛んで、Downloadボタンをクリックしてください。用紙は日本はA4、米国がLetterに設定しました。

3 6週に渡る月をどうしたものか

すべて表示すると6段になってしまい、書き込みスペースが全体的に小さくなるのでそれも嫌です。そこで思い切って、6週に渡る月は第1週を表示しないことを選択できるようにしました。表示しないとは言っても、前の月に削られた日のスペースがあるので、実用上は問題ない、、、かもしれません。 jan2023.jpg

4 simcal.pyの特長

  • 印刷して書き込めるタイプのカレンダー(PDFファイル)を生成します
    • 一月1ページ、12ページになります
  • カレンダーの開始曜日を指定可能です(水曜始まりにもできます。。。)
  • 国を選択して、その国の祭日を表示できます
  • 6週に渡る月は第1週を表示しないことを選択できます
  • A4とレターサイズが選択できます

5 カレンダーの生成のしかた

  • Python 3.8以上を使えるようにします
  • 前提ライブラリをインストールします
pip install holidays
pip install reportlab
  • simcal.pyをエディットしてconfigパラメーターを書き換えます
    • year: 例えば2023
    • start_weekday: 0:月曜始まり、1:火曜始まり、、、6:日曜始まり
    • holiday_region: 'JP':日本、'US':米国、'GB':英国、'DE':ドイツ、'CN':中国、etc.
      • その他の国は ここ の Available Countriesを参照ください
    • holiday_lang: 祭日の表示言語です。'ja':日本語, 'en':英語、etc. ISO 639-1 コード。
    • remove_12k: True:6週に渡る月の第1週をカットする、 False:しない
    • pagesize: 0: A4サイズ、 1: USレターサイズ
  • スクリプト実行
python simcal.py
  • cal<年>.pdf ファイルが生成されます

6 参考にしたサイト、使用ライブラリ

6.0.1 印刷用シンプルなカレンダー (ご自由にお持ちください)

我が家でも愛用しているカレンダーを毎年配布下さっています。どうもありがとうございます。私のスクリプト開発が間に合わず、今年(2023)もお世話になっています。今回作ったカレンダーのデザインは、こちらのカレンダーをほぼそのまま使わせていただいています。

6.0.2 reportlab 3.6.12

PDFを生成するPythonライブラリです。

6.0.3 holidays 0.18

休日を取得するPythonライブラリです。世界の休日が取得できます。