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