跳转到主要内容

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__">&lt;no name&gt;</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">&lt;no title&gt;</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 (363.5 kB 查看散列)

上传时间

由支持