First version. Create a one-page pdf full of random additions.

This commit is contained in:
2020-03-21 18:16:19 +01:00
commit 06c48b114d

75
main.py Executable file
View File

@@ -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")