zoukankan      html  css  js  c++  java
  • 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")

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

    效果如下:

     

     

  • 相关阅读:
    dedecms调用指定栏目名称,链接
    修改 Dedecms 文档文章标题长度的方法
    dedeCMS的arclist标签中limit是什么意思
    DedeCms织梦系统[field:description /]标签如何限制字数?
    mysql 如何更改root密码
    允许phpmyadmin空密码登录的配置方法
    Apache启动失败解决办法
    Apache 配置多域名、二级域名
    使用Auto Layout中的VFL(Visual format language)--代码实现自动布局
    使用UITextField自动格式化银行卡号
  • 原文地址:https://www.cnblogs.com/huangliujing/p/2133691.html
Copyright © 2011-2022 走看看