ReportLab的应用

儿子开学要上二年级啦,根据老师的要求,要训练掌握100内的加减运算。

使用ReportLab给儿子做了一个简单的出题工具。代码不多贴如下备份。

共分为三个文件:

page_a4.py --》A4纸相关的信息。

###################################################### 

A4_width = 595

A4_height = 841
A4_margin = 20
A4_4_column_width = (A4_width - A4_margin*2)/4
font_height = 16
row_margin = font_height*1.1
A4_4_row_count = (A4_height - A4_margin*2)/(font_height + row_margin)
def get_row_column_start_point(row,column):
x = 0
y = 0
first_row_y = A4_height - A4_margin - font_height
y = first_row_y - (row_margin + font_height)* row
first_column_x = A4_margin
x = first_column_x + A4_4_column_width * column
return (x,y)
if __name__ == '__main__':
print get_row_column_start_point(1,2)
########################################################
expression.py -----随机生成的运算式。

 ########################################################

 import random

def get_expression():
x = random.randint(0,99)
y = random.randint(0,99)
z = random.randint(0,1)
if(z == 1):
while(x+y > 100):
x = random.randint(0,99)
y = random.randint(0,99)
strExpression = str(x) + " + " + str(y) + " = "
else:
if(x > y):
strExpression = str(x) + " - " + str(y) + " = "
else:
strExpression = str(y) + " - " + str(x) + " = "
return strExpression
if __name__ == '__main__':
print get_expression()
#############################################################

 import_pdf.py ---输出pdf文件。

 #############################################################

import page_a4
import expression
def make_half(c,start_row):
c.setFont("Helvetica", page_a4.font_height)
for i in range(12):
if (i == 11):
x,y = page_a4.get_row_column_start_point(i + start_row,0)
c.line(x,y + page_a4.font_height,x+page_a4.A4_4_column_width*4,y + page_a4.font_height)
elif(i==0):
x,y = page_a4.get_row_column_start_point(i + start_row,0)
c.line(x,y-2,x+page_a4.A4_4_column_width*4,y-2)
x,y = page_a4.get_row_column_start_point(i + start_row,0)
c.drawString(x,y,"Name:")
x,y = page_a4.get_row_column_start_point(i + start_row,1)
c.drawString(x,y,"Date:")
x,y = page_a4.get_row_column_start_point(i + start_row,2)
c.drawString(x,y,"Time:")
x,y = page_a4.get_row_column_start_point(i + start_row,3)
c.drawString(x,y,"Score:")
else:
for j in range(4):
x,y = page_a4.get_row_column_start_point(i + start_row,j)
strExpression = expression.get_expression()
c.drawString(x,y,strExpression)
def make_page(c):
row_count = page_a4.A4_4_row_count
off_set = row_count - 12*2
#print row_count
make_half(c,0)
make_half(c,12+ off_set)
c.showPage()
def import_pdf(strFileName):
from reportlab.pdfgen import canvas
c = canvas.Canvas(strFileName)
for i in range(10):
make_page(c)
c.save()
if __name__ == '__main__':
import_pdf("plus_minus.pdf")

##############################################################

效果如下:

 

 

原文地址:https://www.cnblogs.com/huangliujing/p/2133691.html