IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

用 python/reportlab 生成 PDF

BT的花 blogs 2009-11-23 23:30:22 累计浏览 4,492 次
本机暂存

    达达这学期关于加减法运算的一个要求是速度――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 桌面上用打印机还是如此困难!

同分类推荐文章

  1. 科技爱好者周刊(第 401 期):如何赚到10亿美元 (2026-06-26 08:05:38)
  2. 如何做决策 - 从 Go 的一个 issue 说起 (2026-06-26 08:00:00)
  3. Seven Player:Windows上播放115网盘视频的增强工具 (2026-06-09 00:06:47)

查看更多 开发者 文章 →

建议继续学习

  1. 用Hyer来进行网站的抓取 (累计阅读 158,252)
  2. 配置Nginx+uwsgi更方便地部署python应用 (累计阅读 107,167)
  3. 程序员技术练级攻略 (累计阅读 35,472)
  4. python实现自动登录discuz论坛 (累计阅读 32,834)
  5. python编程细节──遍历dict的两种方法比较 (累计阅读 20,371)
  6. 每个程序员都应该学习使用Python或Ruby (累计阅读 17,919)
  7. Chrome和goagent的配置方法,你懂的 (累计阅读 16,843)
  8. 30分钟3300%性能提升――python+memcached网页优化小记 (累计阅读 13,742)
  9. 使用python爬虫抓站的一些技巧总结:进阶篇 (累计阅读 13,302)
  10. 我的PHP,Python和Ruby之路 (累计阅读 13,149)