用 python/reportlab 生成 PDF
达达这学期关于加减法运算的一个要求是速度――8分钟以内做120道题为及格,5分钟做完是100分.
为了平时训练,偶周末就写了个脚本产生一组题目,并生成 PDF 以供打印。
网上的入门教程多是 reportlab 的 pdfgen.canvas 的例子,不过我这里是要打印 120 道题出来,就得用 platypus.Table 来排版了.
表格的数据用一个 list 来表示;其每一个元素仍然是一个 list,就是每行(row);这个 list 里的每个元素是字符串,是 cell 的数据了。
准备好 table 后,用 platypus.SimpleDocTemplate 来生成 pdf。它最后处理一个 list,把这个 list 里的对象挨个渲染出来,这个有点像浏览器依次画出 block 级别的 div。
示例如下:
from reportlab.lib.units import inch
def genTable():
data = []
items = genList() #随机生成120道题目
for i in range(0, len(items), 5):
#生成一个有 5 列的表格数据
data.append(items[i:i+5])
table = platypus.Table(data, 1.5*inch, 0.4*inch, [(\'FONT\', (0,0), (-1,-1), \'Courier\')])
# 每个cell 1.5\' 宽,0.4\' 高,差不多 120 题排满一张 A4
# Courier 是等宽字体,为了俺的算式看起来整齐
# (0,0)/(-1,-1)说的是font style运用范围,从左上到右下
return table
doc = platypus.SimpleDocTemplate(fname, topMargin=0.9*inch, bottomMargin=0.9*inch, title=\'DaDa Math\', author=\'qyb\')
# 目标是一个叫 fname 的 PDF 文件,缺省上下留白有点多,修改为0.9\'
elements = []
for i in range(n):
elements.append(genTable())
elements.append(platypus.flowables.PageBreak())
# 生成 n 页的数据,每个表格后面跟着一个换页
doc.build(elements)
Getting Started With ReportLab 这篇文档给我很大帮助,推荐阅读。
最后要说的是,Linux 下配置佳能 LBP 3018 非常麻烦,我尝试了10分钟后没有搞定就放弃努力回到 XP 下打印了。CUPS 发展这么多年,佳能也是大厂,没想到 Linux 桌面上用打印机还是如此困难!
建议继续学习:
- 配置Nginx+uwsgi更方便地部署python应用 (阅读:105407)
- 如何成为Python高手 (阅读:53413)
- python实现自动登录discuz论坛 (阅读:31598)
- python编程细节──遍历dict的两种方法比较 (阅读:19007)
- 每个程序员都应该学习使用Python或Ruby (阅读:16278)
- 30分钟3300%性能提升――python+memcached网页优化小记 (阅读:12142)
- 使用python爬虫抓站的一些技巧总结:进阶篇 (阅读:12124)
- 我的PHP,Python和Ruby之路 (阅读:11854)
- Python处理MP3的歌词和图片 (阅读:8331)
- 关于使用python开发web应用的几个库总结 (阅读:7452)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:qyb 来源: BT的花 blogs
- 标签: PDF python reportlab
- 发布时间:2009-11-23 23:30:22
- [41] 界面设计速成
- [35] Oracle MTS模式下 进程地址与会话信
- [33] 如何拿下简短的域名
- [32] IOS安全–浅谈关于IOS加固的几种方法
- [32] 程序员技术练级攻略
- [32] 视觉调整-设计师 vs. 逻辑
- [31] 图书馆的世界纪录
- [30] 【社会化设计】自我(self)部分――欢迎区
- [30] android 开发入门
- [27] 读书笔记-壹百度:百度十年千倍的29条法则