再写reportlab时,遇到一个小问题。
#生成pdf报名表
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer,Table,TableStyle
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.rl_config import defaultPageSize
from reportlab.lib.units import inch
from reportlab.lib import colors
import os,datetime
class Export_pdf(object):
def __init__(self,data,team_id,path):
self.team_id = str(team_id)
self.t_data = data
self.table_len = len(data)
self.PAGE_HEIGHT=defaultPageSize[1] #从导入的默认页面大小中,获得对应的页面高度与页面宽度
self.PAGE_WIDTH=defaultPageSize[0] #获取宽度
styles = getSampleStyleSheet() #获取简单的样式,用于填充文本,可以更改其中的格式
self.style = styles["Normal"]
self.style.fontName = 'song'
self.path=path
import reportlab.pdfbase.ttfonts
reportlab.pdfbase.pdfmetrics.registerFont(reportlab.pdfbase.ttfonts.TTFont('song', self.path+'/static/fonts/simsun.ttc'))
reportlab.pdfbase.pdfmetrics.registerFont(reportlab.pdfbase.ttfonts.TTFont('kai', self.path+'/static/fonts/simkai.ttf'))
reportlab.pdfbase.pdfmetrics.registerFont(reportlab.pdfbase.ttfonts.TTFont('yh1', self.path+'/static/fonts/msyh.ttc'))
def context(self,canvas,doc):
canvas.saveState()
canvas.setFont('kai',11)
s1 = '2019四川轻化工大学“国信安杯”大学生网页设计竞赛'
canvas.drawCentredString(self.PAGE_WIDTH/2.0,self.PAGE_HEIGHT-0.75*inch,s1)
canvas.setFont('yh1',24)
s2 = '参 赛 团 队 信 息 表'
canvas.drawCentredString(self.PAGE_WIDTH/2.0,self.PAGE_HEIGHT-108,s2)
canvas.setFont('kai',11)
s2 = '计算机技术协会 制'
canvas.drawString(inch,0.75*inch,s2)
canvas.restoreState()
def make_pdf(self):
timestr = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
self.path = os.path.join(self.path,'static/export_pdf','Team:'+self.team_id+'.报名信息表'+timestr+'.pdf')
print(self.path)
doc = SimpleDocTemplate(self.path)
story = [Spacer(1,0.8*inch)]
import math
t = Table(data,4*[1*inch], math.ceil(self.table_len/2) * [0.8*inch]) #这里想要使用Table函数建立pdf中的表格,可是函数的引用就被更改了,不能使用就会报错!!
t.setStyle(TableStyle([
('BACKGROUND',(0,0),(-1,-1),colors.red),
('TEXTCOLOR',(0,0),(1,-1),colors.black),
('BOX',(0,0),(-1,-1),2,colors.black),
('BOX',(0,0),(-1,0),1,colors.black),
('ALIGN',(0,0),(-1,-1),'CENTRE'),
]))
story.append(t)
doc.build(story,onFirstPage=self.context)
return self.path
data = [
['a','b','c'],
[1,2,3],
]
Table = Export_pdf(data,9,'System') #这里使用了导入的方法名,然后导入的函数就被更改了引用
a = Table.make_pdf()
print(a)
宗上,遇到这个错误时,一样要检查:变量名与方法名是否被重用,反过来,如果Table本来是一个变量,再定义一个Table方法,同样也会报错。