#!/usr/bin/env python3 import argparse import calendar import logging import os import subprocess import sys import jinja2 def main(): env = jinja2.Environment() loader = jinja2.FileSystemLoader('templates') template_verso = loader.load(env, 'week_on_two_pages-A6-v.svg') template_recto = loader.load(env, 'week_on_two_pages-A6-r.svg') os.makedirs("build", exist_ok=True) year = 2022 cal = calendar.Calendar() weeks = sum([r[0] for r in cal.yeardatescalendar(2022, width=1)], []) last_monday = None page = 1 for week in weeks: # yeardatescalendar will have the same week twice at the margin # of a month, but we want to skip one of those if week[0] == last_monday: continue last_monday = week[0] with open("build/week_on_two_pages-A6-{year}-{page:03}.svg".format( year=year, page=page, ), 'w') as fp: fp.write(template_verso.render(week=week)) page += 1 with open("build/week_on_two_pages-A6-{year}-{page:03}.svg".format( year=year, page=page, ), 'w') as fp: fp.write(template_recto.render(week=week)) page += 1 inkscape_commands = ";\n".join([ ( "file-open:build/{svg};" + " export-type: pdf;" + " export-filename:build/{pdf};" + " export-text-to-path;" + " export-do" ).format( svg = s, pdf = os.path.splitext(s)[0] + ".pdf", ) for s in os.listdir("build") ]) try: subprocess.run( ["inkscape", "--shell" ], input=inkscape_commands, text=True, ) except FileNotFoundError: logging.warning("Inkscape is not installed, can't convert to pdf") logging.warning("Stopping here, you can use the svgs as you like") sys.exit(1) pdf_pages = sorted([ os.path.join("build", p) for p in os.listdir("build") if p.endswith(".pdf") ]) try: subprocess.run([ "pdfjam", "--outfile", "weekly_planner_A6.pdf", *pdf_pages ]) except FileNotFoundError: logging.warning("pdfjam is not installed") logging.warning("you will have to join the pdf pages yourself") sys.exit(1) if __name__ == '__main__': main()