reportlab常用函数及参数解释
fromreportlab.platypus import SimpleDocTemplate, Paragraph, Spacer
fromreportlab.lib.styles import getSampleStyleSheet
fromreportlab.rl_config import defaultPageSize
fromreportlab.lib.units import inch
c.drawString(x,y,"Hello World"), x,y为在笛卡尔坐标系下的位置信息,坐标轴原点位于页面的左下角。
c.translate(inch,inch) 将坐标原点指定为左上角(而不是左下角)
Flowable对象定义的为“漂浮的元素”,元素的精确位置是由它前面的那些元素决定的,如paragraph, diagram.
non-flowables包括(page numbering annotations)页码注释,headers,footers,fixed diagrams, logos等。
canvas.line(x1,y1,x2,y2)
canvas.lines(linelist)
#绘制字符串的方法
canvas.drawString(x, y, text):
canvas.drawRightString(x, y, text)
canvas.drawCentredString(x, y, text)
这三种方法只能将字符串写到一行中;
canvas.setFont(psfontname, size, leading = None)
reportlab中table表格的绘制:
t=Table(data,5*[0.4*inch], 4*[0.4*inch])
t.setStyle(TableStyle([('ALIGN',(1,1),(-2,-2),'RIGHT'),
('TEXTCOLOR',(1,1),(-2,-2),colors.red),
('VALIGN',(0,0),(0,-1),'TOP'),
('TEXTCOLOR',(0,0),(0,-1),colors.blue),
('ALIGN',(0,-1),(-1,-1),'CENTER'),
('VALIGN',(0,-1),(-1,-1),'MIDDLE'),
('TEXTCOLOR',(0,-1),(-1,-1),colors.green),
('INNERGRID', (0,0), (-1,-1), 0.25, colors.black),
('BOX', (0,0), (-1,-1), 0.25, colors.black),
]))
TableStyle类用于设置表格的样式:
样式包含在一个列表中,样式中每个元组元素分别代表一种样式的设置,("ALIGN",(1,1),(-2,-2),'RIGHT')
元组中一般包含4-5个参数,第一个参数为参数关键字,第二个参数(元组):设定表格中初始的cell, 第三个参数(元组),设定表格中结束的参数,
Reportlab中强制换行:
如果是在简单的文本中强制换行,可以使用换行符“\n”('line1\nline2\nline3'),如果是在Paragraph中换行使用"<br/>"
Reportlab中设置table左对齐:
Table(coreTable2_data,2*[2*inch],5*[0.25*inch],hAlign="LEFT")
在canvas中绘制图像:
canvas.drawImage("/var/www/html/tmp/select.png", 15, 150, width=200,height=300)
设置文件的页边距:
doc = BaseDocTemplate('test.pdf', pagesize=letter)
frame = Frame(doc.leftMargin, doc.bottomMargin, doc.width, doc.height,
id='normal')
template = PageTemplate(id='test', frames=frame, onPage=footer)
doc.addPageTemplates([template])
text = []
for i in range(111):
text.append(Paragraph("This is line %d." % i,
styleN))
doc.build(text)
字符编码问题:
今天在写程序的过程中偶然出现了一个bug,发现在Paragraph中用 代表空格时渲染到pdf当中时是以“口”这种样式出现的,调试了很长时间,一开始还以为是ParagraphStyle的样式设置的有问题,最终通过各种调试,发现是由于引用了times的字体导致在,想再复现那个bug时,突然找不到了,非常奇妙,也有可能是reportlab自身的一个bug,可能在处理中英文混合段落的时候就会遇到这种问题,在此记录一下解决办法,
把font文件夹中所有的字体删除,或者重新建一个font的文件夹,再把所有需要的字体类型全部复制到font的文件夹内(注意不要更改字体的名称)