达达这学期关于加减法运算的一个要求是速度——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 import platypus
-
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 桌面上用打印机还是如此困难!
评论
10分钟就放弃了。 一般Google调研一番再实践几下怎么
10分钟就放弃了。
一般Google调研一番再实践几下怎么也要半个小时以上。
我10分钟后大概就知道半个小时也搞不定...
我10分钟后大概就知道半个小时也搞不定...
看来还是得用HP了.
看来还是得用HP了.
http://thaitruongvan.blogspot
http://thaitruongvan.blogspot.com/2009/08/install-canon-laser-printer-in-fedora.html
回头有空了再试试....
让我恼火之处之一是 canon 自己还要启动某服务,而不是让 cups 完成一切
另外就是卡在 SELinux 上.
这事儿要我做的话,估计先生成latex源文件再编译了。
这事儿要我做的话,估计先生成latex源文件再编译了。
如果对 latex 熟悉倒也是可以,不失为一个通用的法子.
如果对 latex 熟悉倒也是可以,不失为一个通用的法子.
for i in range(n) 那句没必要循环……
for i in range(n) 那句没必要循环……