模板模板

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__">&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>

很容易吧?幸运的是,我们可以简单地重用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的其余部分。

0.1.0 (2008-02-15)

  • 初始版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java应该考虑使用DTO来代替Spring控制器层吗?   java为什么要将Maven与Git结合起来?   java试图将CSV转换为XLSX,但使用了错误的逗号拆分列   mysql Spring 3+Hibernate:java。sql。BatchUpdateException:无法添加或更新子行(ManyToMany)   java基本字符串反转器   java无法使用RestControllerAdvice为身份验证失败生成自定义错误消息   java当只允许SQLException时,如何抛出EOFEException?   java如何创建播放模块?   Android中匿名类的java实例化异常问题   java两个停靠组件,其中第二个组件填充剩余空间   java如何在按钮延迟时启用它   Java中正在运行的应用程序中的后台进程   java我正试图从一个字符串打印出这个字符输出   如何使用java socket通过两个不同的wifi连接两台电脑?   javaapachecamel:如何将分层数据从数据库转换为pojo   java Webrtc:OniconConnectionChange和onConnectionChange之间有什么区别   java如何重写已经创建的JTable方法   爪哇扫雷机堆垛机   雅加达ee Java ee EJB 3.0 Glassfish