当前位置: 代码迷 >> 综合 >> Python Reportlab 中Flowables 对象
  详细解决方案

Python Reportlab 中Flowables 对象

热度:32   发布时间:2023-12-16 19:48:00.0

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中用&nbsp;代表空格时渲染到pdf当中时是以“口”这种样式出现的,调试了很长时间,一开始还以为是ParagraphStyle的样式设置的有问题,最终通过各种调试,发现是由于引用了times的字体导致在,想再复现那个bug时,突然找不到了,非常奇妙,也有可能是reportlab自身的一个bug,可能在处理中英文混合段落的时候就会遇到这种问题,在此记录一下解决办法,

把font文件夹中所有的字体删除,或者重新建一个font的文件夹,再把所有需要的字体类型全部复制到font的文件夹内(注意不要更改字体的名称)