当前位置: 首页 > 图文教程 > 服务器 > Linux服务器 > 服务器诊所:PDF自动生成专业质量输出
font="Helvetica"
font_size=26
text="Hello,world"
x=5.0*inch
y=8.0*inch
destination_file="/tmp/first.pdf"
my_canvas=canvas.Canvas(destination_file)
my_canvas.setFont(font,font_size)
my_canvas.drawRightString(x,y,text)
my_canvas.save()
这段代码仅仅把标题写在一张原本空白的纸上。尽管普通,但它暗示了新的应用领域:字体样式和大小、内容及格式都是可编程的。当您的组织决定以TimesNewRoman而不是Helvetica发布时,原则上,您可以更改一个配置赋值,然后重新生成所有内容,而不必逐个打开数千个文档,改变它们,然后把它们写回文档。对于其它效果也是一样:例如,如果您希望把针对老年读者的信息的字体扩大,应用程序可以自动完成这一点。
不过,不要认为您必须开发自己的字处理程序才能完成任何有意义的工作。虽然ReportLab库有足够的广度和深度允许这么做,但它也支持几个特定的快捷方式,它们极大地简化了我的PDF编程。首先是import_HTML方法。它将有效的HTML源代码转变成PDF页。我发现,对于许多应用程序,可以较方便地以HTML格式制作原型,获取样本文档的“客户签字(stakeholdersign-off)”,将HTML生成参数化,然后用下面的方法完成实现:
my_document.import_HTML(my_html_source)
这给了我非常快速、易于维护、完全程序化的方法来将内容注入PDF。ReportLab的处理效率非常高,以至于我可以轻松地实时生成用于Web显示的所有种类的PDF文档。这使得我能够在保持适当的视觉外观的同时,使关键的金融或工程报表与最新数据完全保持同步。当然,印刷文档享用了同样的定制选项。
合并PDF文档
第二个关键的库函数是copyPages。它将现有的PDF文档附加到一个Canvas实例。copyPages很方便地把几个PDF文档连接起来形成一个PDF文档。
对于大多数复杂效果,象其它的PDF工具供应商一样,ReportLab发放付费产品许可证。在ReportLab的情况中,它的PageCatcher产品注释现有的PDF文档、重新安排它们的页、并针对不同的打印方法重新格式化、添加背景(包括水印)以及填充PDF表单。ReportLab记录了几个有趣的PageCatcher用例。一个示例是对已完成的美国国税局(InternalRevenueService(IRS))表单的程序化的预处理。
我发现的ReportLab的最后一个重要能力是其目录(TablesofContents)管理。在线文档读者觉得这些导航辅助手段很重要,Adobe称其为“书签(bookmark)”或“大纲(outline)”。大多数PDF查看器将它们显示为左边窗口中的菜单。ReportLabReference本身就是书签式文档的好例子。诸如copyPages之类的ReportLab函数包括了将大纲正确导入到较大的文档的选项或废弃大纲的选项。
结束语
每当计算作业似乎有些单调乏味或容易出错时—例如,“手工”更新文档—您就应该寻找使该过程自动化的方法。如果您不能肯定这种态度能带您走多远,请回过头参阅我对Limoncelli和Hogan所著书籍的评论(“服务器诊所”,2002年5月)。两位作者甚至将他们书籍的草稿构造成make进程的输出。尽管许多系统程序员似乎没有意识到这一点,但PDF文档的管理为自动化和抽象提供了大量机会。使用ReportLab库或其它可用的支持PDF的工具来教服务器做您的PDF工作。那样应该可以让您把时间投入到更有价值的研究中。
评论 (0) All