这几天都在学习 ReportLab 这个优秀的生成 PDF 的软件包,特别是它的使用手册也都是使用自身的模块生成的,效果很让我满意,因此这段时间也许会把精力放在 PDF 文档生成上面。因此也希望写一个入门的教程方便大家同我一起学习。这就是写本教程的起因。由于有些东西是边学边写很可能会有错误,希望大家帮助我改正。那么学习的目的就是希望可以写出象 ReportLab 的用户手册一样效果的文档,并且希望尽可能的方便。
安装很简单,大家只要下载最新的 1.20 包即可。如果需要处理更多的图像格式还应该下载 PIL 软件包。这块就不细说了。
那么下面开始我们的学习,首先还是从写一个最简单的Hello, World开始,当然这里把Word改为 reportlab 了。
先看代码吧。
from reportlab.pdfgen import canvas
def hello(c):
c.drawString(100,100,"Hello, ReportLab")
c = canvas.Canvas("hello.pdf")
hello(c)
c.showPage()
c.save()
这段代码是从用户手册改造而来。它的运行结果就是在你的当前目录生成一个hello.pdf的文件,打开它你会看到只有一页的内容,而"Hello, ReportLab"是显示在页面的左下角的。下面解释一下。
使用 ReportLab 来生成 PDF 你可以认为就象是在画图一样,因此第一行从pdfgen中导入了canvas,准备开始绘画。
hello方法是简单地调用Canvas的方法在指定的起始坐标来绘制文本。要注意,在 ReportLab 中坐标的原点缺省是在页面的左下角。因此最后的效果是在页面的左下角。这一点要注意。
第4行生成一个Canvas对象,它指定一个文件名,那么最终的结果将存放在这个文件中。在Canvas的构造方法中还有一些缺省值,比如纸张的大小缺省为A4纸等,现在我们不去关心它,一切从最简单开始。
第6行可以产生一个分页。但由于后面没有更多的输出了,因此它并不起作用。你可以在它的后面再加一个hello(c)的语句,看一看是不是变成两页了。
最后一行很重要,它会将内容保存到文件中。因此如果忘记掉用了,你什么也得不到。
这个例子很简单,但你也许已经注意到了,如果我想生成的是长篇的文档,让我象画画一样来生成不是太难了吗?的确是这样,但这里只是基本的介绍一下使用,ReportLab 已经为了想好了,它有更方便的东西供你使用,可以让你从一个更高的起点开始。但是需要注意,一些相对低层的东西可以实现一些绘图之类的东西,在你的 PDF 上作画也是一个很有趣的事情。
下一篇我将介绍使用文档布局的一个最简单的例子。