PDF模板
项目描述
使用页面模板和RML快速生成PDF文件。
使用ReportLab生成PDF视图
本包
>>> import z3c.pdftemplate
提供了使用reportlab的PDF编写器技术创建浏览器视图以生成PDF而不是HTML的功能。本包中的功能有几种使用方式,以下文本中进行了演示。
但首先我们必须加载指令的元配置
>>> import zope.component >>> from zope.publisher.browser import TestRequest >>> from zope.configuration import xmlconfig >>> context = xmlconfig.file('meta.zcml', package=z3c.pdftemplate)
使用z3c.rml和ReportLab生成PDF视图
见DEPENDENCIES.cfg,这个库依赖于一些第三方库。
目的:通过z3c.rml(RML的开放源代码实现)和Reportlab实现PDF生成。虽然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-document。以下文件夹内容文档模板可在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>
很简单,不是吗?幸运的是,我们可以简单地重用HTML内容视图的Contents视图类。
现在我们有了模板和文档,我们可以简单地注册视图
>>> 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...'
变更记录
0.2.0 (2010-12-12)
添加了缺少的安装依赖项和测试依赖项。
修复了与当前包版本兼容的测试。
将测试调整为与reportlab 2.4+兼容,该版本生成PDF 1.4,因此至少需要此reportlab版本。
使用Python的doctest模块而不是已弃用的zope.testing.doctest。
移除了ZCML和ZPKG的slug。
修复了long_description的REST。
0.1.0 (2008-02-15)
初始发布
项目详情
关闭
z3c.pdftemplate-0.2.0.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 80560e7f0588d46eb8a5622201d6de9139bb798eeefee711844b9513499fe732 |
|
MD5 | 04ba7f70d006def8d39cbf590f2e0d93 |
|
BLAKE2b-256 | e247b8c20c8fa1e6268de3e684243cf5dfab284fbfc984a637e5b0c487ff0f36 |