模板模板
z3c.pdftemplate的Python项目详细描述
使用页面模板和rml快速生成pdf文件。
内容
Using ReportLab to generate PDF Views
这个包裹,
>>> import z3c.pdftemplate
提供创建生成PDF的浏览器视图的功能 而不是使用reportlab的pdf编写器技术的html。有几个 如何使用此软件包中的功能,如文中所示 下面。
但首先我们必须加载指令的元配置:
>>> import zope.component >>> from zope.publisher.browser import TestRequest >>> from zope.configuration import xmlconfig >>> context = xmlconfig.file('meta.zcml', package=z3c.pdftemplate)
Using ^{tt1}$ and ReportLab to generate PDF Views
参见dependencies.cfg,这个库依赖于一些第三方库。
目的:在z3c.rml(一个开放源码)的帮助下生成pdf 实施rml)和reportlab。z3c.rml实际上是 官方的rml支持更多的特性,比如 尽可能与rml的商业版本保持兼容。
此包提供创建浏览器视图的功能 使用ReportLab的PDF编写器技术生成PDF而不是HTML。
但首先我们必须加载指令的元配置:
>>> from zope.configuration import xmlconfig >>> context = xmlconfig.file('meta.zcml', package=z3c.pdftemplate)
rml是reportlab.org开发的一种xml方言,它与html非常相似 用于定义PDF文档的结构。RML是动态的 使用页面模板生成,然后用于生成PDF文件。
假设我们要创建一个显示文件夹内容的pdf。这个 第一步是创建一个包含 pdf格式。以下文件夹内容文档模板在中可用 rml_contents.pt
<?xml version="1.0" encoding="iso-8859-1" standalone="no" ?> <!DOCTYPE document SYSTEM "rml_1_0.dtd"> <document xmlns:tal="http://xml.zope.org/namespaces/tal" xmlns:metal="http://xml.zope.org/namespaces/metal" filename="contents.pdf"> <content> <para style="FolderName"> Folder Name: <tal:block condition="context/__name__" replace="context/__name__|default" /> <tal:block condition="not:context/__name__"><no name></tal:block> </para> <spacer height="30" /> <table splitbyrow="1" repeatrows="0" repeatcols="0" style="ContentTable"> <tr> <td>Name</td> <td>Title</td> <td>Size</td> <td>Created</td> <td>Modified</td> </tr> <tr tal:repeat="item view/listContentInfo"> <td tal:content="item/id">me.png</td> <td tal:content="item/title|default"><no title></td> <td tal:content="item/size/sizeForDisplay|nothing">34.5 kB</td> <td tal:content="item/created|default"></td> <td tal:content="item/modified|default"></td> </tr> </table> <action name="frameEnd" /> </content> </document>
很容易吧?幸运的是,我们可以简单地重用Contents视图 类的HTML内容视图。
既然我们有了模板和文档,就可以简单地注册 视图:
>>> context = xmlconfig.string(""" ... <configure xmlns:browser="http://namespaces.zope.org/browser"> ... <browser:rml2pdf ... name="rmlsample.pdf" ... for="zope.app.folder.interfaces.IFolder" ... template="sample/rml_contents.pt" ... class="zope.app.container.browser.contents.Contents" ... permission="zope.Public" ... /> ... </configure> ... """, context)
创建文件夹实例后:
>>> from zope.app.folder.folder import Folder >>> folder = Folder() >>> folder.__name__ = 'my folder' >>> folder['subFolder'] = Folder()
我们可以查看视图
>>> class Principal: ... id = 'bob'>>> request = TestRequest() >>> request.setPrincipal(Principal())>>> contents = zope.component.getMultiAdapter((folder, request), ... name="rmlsample.pdf")
并创建pdf:
>>> contents() #doctest: +ELLIPSIS '%PDF-1.4...'
CHANGES
0.2.0 (2010-12-12)
- 添加了缺少的安装依赖项和测试依赖项。
- 修复了使用当前包版本运行的测试。
- 调整测试以生成PDF 1.4,因此需要 至少这个版本。
- 使用python的doctest模块而不是不推荐的 zope.testing.doctest。
- 去除了zcml段塞和zpkg段塞。
- 修复了long_description的其余部分。