reportlab 应用 打印考生成绩

1、环境搭建:

pyrhon 3.9.7

reportlab  3.6.3

pandas  1.3.4

openpyxl  3.0.9

xlrd 2.0.1

# 安装依赖库
pip install reportlab
pip install pandas
pip install openpyxl
pip install xlrd

2. 实现功能

2.1 读取数据

#读取成绩表
import pandas as pd
# df = pd.read_excel(r'D:\pythonproject\pythonVsc\pandas\成绩表.xls',
#                     dtype='str',usecols=['xm','bj','语','数','英','物','化','生','综','总'])
df = pd.read_excel(r'D:\202112study\test\13.xlsx',dtype='str')

2.2  制作模板

#制作报表
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.units import cm

#注册字体  字体推荐使用宋体(字形最全面)
pdfmetrics.registerFont(TTFont('fs',r'D:\pythonproject\pythonVsc\pandas\仿宋_GB2312.TTF'))
pdfmetrics.registerFont(TTFont('fz',r'D:\pythonproject\pythonVsc\pandas\FZXBSJW.TTF'))
pdfmetrics.registerFont(TTFont('ht',r'D:\pythonproject\pythonVsc\pandas\FZHTJW.TTF'))
# 模板
# c = canvas.Canvas('test.pdf')
def fg(c):
    c.setDash(1,5)
    for i in range(3):
        y=22.275-7.425*i
        c.line(0.5*cm,y*cm,20.5*cm,y*cm)
def one_mb(c,y0=0):
    c.setFont('fs',16)
    c.drawString(0.5*cm,(28.9+y0)*cm,'姓名:                                      天道酬勤   厚积薄发')
    c.drawString(0.6*cm,(27.4+y0)*cm,'一诊成绩')
    c.drawString(0.6*cm,(25.8+y0)*cm,'奋斗格言:')
    xk=['语文','数学','英语','物理','化学','生物','总分']
    for i in range(7):
        cx_xk=3.5+2.5*i
        c.drawString(cx_xk*cm,(28.2+y0)*cm,xk[i])
    #画表格
    c.setLineWidth(0.5)
    for i in range(4):
        ry=28.8-0.8*i
        c.line(0.5*cm,(ry+y0)*cm,20.5*cm,(ry+y0)*cm)
    c.line(0.5*cm,(22.5+y0)*cm,20.5*cm,(22.5+y0)*cm)
    for i in range(7):
        cx=3+2.5*i
        c.line(cx*cm,(28.8+y0)*cm,cx*cm,(26.4+y0)*cm)
    c.line(0.5*cm,(28.8+y0)*cm,0.5*cm,(22.5+y0)*cm)
    c.line(20.5*cm,(28.8+y0)*cm,20.5*cm,(22.5+y0)*cm)
    c.line(0.5*cm,(28.8+y0)*cm,3*cm,(28+y0)*cm)
    c.setFont('ht',16)
    c.drawString(0.6*cm,(26.6+y0)*cm,'二诊目标')
def one_page(c):
    
    for i in range(4):
        y0=-7.425*i
        one_mb(c,y0)
    fg(c)
# one_page(c,df[0])
# c.save()

2.3  写入数据 

# 写入数据
c = canvas.Canvas('test.pdf')
def write_one(c,data):
    xk = ['xm','语','数','英','物','化','生','总']
    zjs=0
    for index,row in data.iterrows():
        c.setFont('fs',16)
        js = zjs%4
        y0=-7.425*js
        c.drawString(0.5*cm,(28.9+y0)*cm,'     '+row[xk[0]])
        c.drawString(3.5*cm,(27.4+y0)*cm,row[xk[1]])
        c.drawString(6*cm,(27.4+y0)*cm,row[xk[2]])
        c.drawString(8.5*cm,(27.4+y0)*cm,row[xk[3]])
        c.drawString(11*cm,(27.4+y0)*cm,row[xk[4]])
        c.drawString(13.5*cm,(27.4+y0)*cm,row[xk[5]])
        c.drawString(16*cm,(27.4+y0)*cm,row[xk[6]])
        c.drawString(18.5*cm,(27.4+y0)*cm,row[xk[7]])
        zjs=zjs+1
        if zjs%4==0:
            one_page(c)
            c.showPage()
            


    
write_one(c,df)
c.save()

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值