commit 06c48b114da6135400f50673762923d346d0f990 Author: Benjamin Sigonneau Date: Sat Mar 21 18:16:19 2020 +0100 First version. Create a one-page pdf full of random additions. diff --git a/main.py b/main.py new file mode 100755 index 0000000..879e406 --- /dev/null +++ b/main.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python3 + +import argparse +from random import randint +from reportlab.pdfgen import canvas +from reportlab.lib.pagesizes import A4 +from reportlab.lib.units import mm, cm + +def draw_seyes_grid(canvas, x_offset, y_offset): + # x, y: pdf coordinates + canvas.setStrokeColor("lightblue") + xs = [x*8*mm + x_offset for x in range(0,5)] + ys = [x*2*mm + y_offset for x in range(0, 4*3)] + canvas.grid(xs, ys) + + canvas.setStrokeColor("purple") + xs = [x*8*mm + x_offset for x in range(0,5)] + ys = [y*8*mm +y_offset for y in range(0,4)] + canvas.grid(xs, ys) + + canvas.setStrokeColor("black") + canvas.line(x_offset + 1*mm, y_offset + 6*mm, x_offset + 31*mm, y_offset + 6*mm) + + + +def draw_char(canvas, x_origin, y_origin, x, y, mychar): + # x_origin, y_origin : pdf coordinates + # x, y: represent a cell number, a cell is 8*8mm (seyes ruling) + + canvas.drawCentredString(x_origin + x*8*mm + 4*mm, + y_origin + y*8*mm + 0.5*mm, + mychar) + +def draw_number(canvas, x_offset, y_offset, num, line): + digits = list(str(num)) + pos = [3, 2, 1] + for (digit, column_nb) in zip(reversed(digits), [3,2,1]): + draw_char(canvas, x_offset, y_offset, column_nb, line, digit) + + +def draw_addition(canvas, x_offset, y_offset, a, b): + # Draw "a+b" operation + + # First, draw a seyes-like grid + draw_seyes_grid(canvas, x_offset, y_offset) + + # draw first number + draw_number(canvas, x_offset, y_offset, a, 2) + # draw operator + draw_char(canvas, x_offset, y_offset, 0, 1, "+") + # draw second number + draw_number(canvas, x_offset, y_offset, b, 1) + + +def main(outfile): + # reportlab setup + c = canvas.Canvas(outfile, pagesize=A4) + c.setFont('Helvetica', 22) + + for i in range(5): + for j in range(7): + x = 0.8*cm + i*4*cm + y = 26*cm - j*4*cm + draw_addition(c, x, y, randint(1, 999), randint(1, 999)) + + # reportlab: end page + save pdf + c.showPage() + c.save() + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument("out", help="Name of output pdf file") + parser.parse_args() + main("plop.pdf")