First version. Create a one-page pdf full of random additions.
This commit is contained in:
75
main.py
Executable file
75
main.py
Executable 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")
|
||||
Reference in New Issue
Block a user