天天看点

python生成pdf报表_用python的reportlab库生成PDF报表

前言

reportlab不是python的标准库,它的强大之处在于能满足绝大部分报表的需求形式,这篇文章将介绍reportlab中基本常用的api,使用canvas画出一份整洁的PDF报表。内容均来自reportlab的官方user guide。

依赖与安装

首先,这里是官方的installation guide。reportlab目前应该只是支持到python2.7, py3的同学另想办法吧。

楼主的环境:fedora18 64bit

安装python2.7 or 2.6 or 2.5

PIL:如果你有图片的操作需要这个库,python imaging library ,下载地址。    $ tar xvfz Imaging-1.1.7.tar.gz

$ cd Imaging-1.1.7

$ python setup.py install

官网上有提到其他的依赖包,如果需要的话可以自行测试,如Diagra。

reportlab的安装,使用 easy_install reportlab 或者pip install reportlab就可以

使用

实例:

别怪我再提一遍官方的user guide,文档是很全的。

我贴出下面的代码来解释基本的使用:

# -*- coding: utf-8 -*-

#字体库

import reportlab.lib.fonts

#canvas画图的类库

from reportlab.pdfgen.canvas import Canvas

#用于定位的inch库,inch将作为我们的高度宽度的单位

from reportlab.lib.units import inch

if __name__ == "__main__":

#声明Canvas类对象,传入的就是要生成的pdf文件名字

can = Canvas('report.pdf')

pdf_head(can, "test for REPORTLAB!")

#showpage将保留之前的操作内容之后新建一张空白页

can.showPage()

#将所有的页内容存到打开的pdf文件里面。

can.save()

def pdf_head(canvas, headtext):

#setFont是字体设置的函数,第一个参数是类型,第二个是大小

canvas.setFont("Helvetica-Bold", 11.5)

#向一张pdf页面上写string

canvas.drawString(1*inch, 10.5*inch, headtext)

#画一个矩形,并填充为黑色

canvas.rect(1*inch, 10.3*inch, 6.5*inch, 0.12*inch,fill=1)

#画一条直线

canvas.line(1*inch, 10*inch, 7.5*inch, 10*inch)

另外:

showPage()使用后将重置之前字体之类的设置

inch作为量度单位是可以的,一张默认纸张的大小,将以最左下角作为(0,0)坐标点,正负为方向

一张纸的高度大约12*inch,宽大约10*inch

两个坐标端点确定一条直线

一条对角线的两个端点坐标确定一个矩形

设置颜色等其他api请参考官方文档

另外的另外:

直接使用api实际是最麻烦的用法,是基础用法。

使用RML,HTML做报表,请参考这里。

效果截图

python生成pdf报表_用python的reportlab库生成PDF报表