1. 程式人生 > >reportlab 庫生成帶有表格的PDF報表檔案

reportlab 庫生成帶有表格的PDF報表檔案

用reportlab 庫生成PDF檔案的確很方便,對於簡單的PDF檔案的生成,可以直接使用最基本的一些drawXXX()方法來實現,具有可參見我的另一篇文章(https://blog.csdn.net/cloveses/article/details/79224057)但有時我們需要生成帶有表格的報表,經過閱讀官方文件,發現reportlab 庫可以直接支援生成表格,而且還可以完成較為複雜的表格的生成。現就相關使用方法介紹如下:

一、生成PDF基本流程

1.匯入相關的物件:

from reportlab.lib.styles import getSampleStyleSheet,ParagraphStyle
from reportlab.platypus import Paragraph, SimpleDocTemplate, Spacer,Table,TableStyle,PageBreak
from reportlab.pdfbase import pdfmetrics
from reportlab.lib import colors
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.pagesizes import A4

2.生成簡單文件模板

    doc = SimpleDocTemplate(file_name,pagesize=(A4[1],A4[0]),topMargin = 15,bottomMargin = 15)
    #後面引數中pagesize為文件頁面尺寸,topMargin/bottomMargin為文件上/下頁邊距,當然還有一些其他引數,可參考官方文件。 

3.建立頁面中需要渲染的各種元素,如段落文字、表格等,並放入一個列表中。

elements = []
pa = Paragraph('TEXT',stylesheet['Normal'])
elements.append(pa)
...

4.呼叫簡單文件模板物件的方法,傳入要渲染元素的列表,生成PDF檔案。

doc.build(elements)

二、常用的基本元素主要有:

Paragraph     文字段落            Paragraph(text,style)

Spacer          垂直空間留白       Spacer(width, height)

Table            表格                    Table(data)

PageBreak    插入分頁              PageBreak()

Image             圖片                Image(filename, width=None, height=None)

三、樣式的使用

這裡主要說明一下文字段落和表格的樣式:

1.直接使用reportlab庫提供的預定義的文字段落樣式:

style=getSampleStyleSheet()

這樣style物件中包含了一些常用的段落文字的預定義樣式,其類似一個字典,使用方法如下:

style['Title']

可以通過呼叫style例項的list()方法,檢視所有的樣式及其每個屬性的值。當然還可以通過修改預定義樣式,來實現自定義樣式。如下圖所示:


2.表格樣式的使用方法如下:


#定義樣式列表,其中每元組包括樣式命令詞、樣式應用起始單元座標、樣式應用結束單元座標和樣式值。(具體樣式命令詞請叄閱官方文件)
style_list =[                            
    ('TEXTCOLOR',(0,0),(1,-1),colors.red),
    ('ALIGN',(0,0),(-1,-1),'CENTER'),
    ('VALIGN',(0,0),(-1,-1),'MIDDLE'),
    ('GRID',(0,0), (-1,-1),1,colors.black),
    ('FONTSIZE',(0,0),(-1,-1),10),
    ('FONT', (0,0), (-1,-1), 'msyh'),
    ('BOTTOMPADDING',(0,0),(-1,-1),2),
    ('TOPPADDING',(0,0),(-1,-1),2)]
#建立表格樣式物件
mytab_style = TableStyle(style_list)
#建立表格
mytable = Table(data_list)
# 將樣式應用到表格
mytable.setStyle(mytab_style)
表格的樣式命令詞主要有表格線顏色、對齊方式、文字顏色、字型及大小、單元格合併(SPAN)等。

生成的例表如下圖: