跳转到主要内容

一个用于生成Plone对象LaTeX表示的库。

项目描述

简介

ftw.pdfgenerator 旨在用于从结构化数据生成 PDF,使用预定义的 LaTeX 视图。它不适合将完整的 HTML 页面转换为 LaTeX / PDF,尽管它能够将小的 HTML 片段转换为 LaTeX

http://onegov.ch/approved.png/image

认证:2013年1月

要求

ftw.pdfgenerator 需要安装包含 pdflatex 可执行文件的 TeX 发行版。

以下 TeX 发行版推荐使用

该软件包与 Plone 4.3 和 5.1 兼容。

安装

ftw.pdfgenerator 添加到您的 buildout 配置中

[instance]
eggs =
  ftw.pdfgenerator

使用方法

pdfgenerator 使用 LaTeX 生成 PDF。您需要为您的上下文提供布局和视图才能创建 PDF。

实际应用示例

一些使用 ftw.pdfgenerator 的软件包

  • ftw.meeting 具有会议纪要的 PDF 导出:[https://github.com/4teamwork/ftw.meeting/tree/master/ftw/meeting/latex](https://github.com/4teamwork/ftw.meeting/tree/master/ftw/meeting/latex)

  • ftw.book 递归生成书籍的 PDF:[https://github.com/4teamwork/ftw.book/tree/master/ftw/book/latex](https://github.com/4teamwork/ftw.book/tree/master/ftw/book/latex)

定义布局

布局是一个多适配器,适配 context, request, builder。您可以使用 mako 模板引擎轻松定义一个新的布局(示例:layout.py

>>> from example.conference.session import ISession
>>> from ftw.pdfgenerator.interfaces import IBuilder
>>> from ftw.pdfgenerator.interfaces import ICustomizableLayout
>>> from ftw.pdfgenerator.layout.customizable import CustomizableLayout
>>> from zope.component import adapts
>>> from zope.interface import Interface
>>> from zope.interface import implements

>>> class SessionLayout(MakoLayoutBase):
...     adapts(ISession, Interface, IBuilder)
...     implements(ICustomizableLayout)
...
...     template_directories = ['session_templates']
...     template_name = 'layout.tex'
...
...     def before_render_hook(self):
...         self.use_babel()
...         self.use_package('inputenc', options='utf8')
...         self.use_package('fontenc', options='T1')

使用 zcml 注册布局(示例:configure.zcml

<configure
    xmlns="http://namespaces.zope.org/zope"
    xmlns:browser="http://namespaces.zope.org/browser">

    <adapter factory=".layout.SessionLayout"
             provides="ftw.pdfgenerator.interfaces.ILaTeXLayout" />

</configure>

创建一个模板,如 SessionLayout.template_name 中定义(示例:session_templates/layout.tex

<%block name="documentclass">
\documentclass[a4paper,10pt]{article}
</%block>

<%block name="usePackages">
  ${packages}
</%block>

<%block name="beneathPackages">
</%block>


<%block name="aboveDocument">
</%block>

\begin{document}

<%block name="documentTop">
  % if logo:
    ${logo}
  % endif
</%block>

${content}

<%block name="documentBottom">
</%block>

\end{document}

布局有更多方法,请参阅 ftw.pdfgenerator.interfaces.ILaTeXLayout 中的定义。

定义 LaTeX 视图

对于每个生成 PDF 的上下文,都会渲染一个 LaTeX 视图(ILaTeXView)。视图是一个多适配器,适配 context, request, layout。有一个基于 mako 模板引擎的视图,可以扩展(示例:views.py

>>> from example.conference.session import ISession
>>> from ftw.pdfgenerator.interfaces import ILaTeXLayout
>>> from ftw.pdfgenerator.interfaces import ILaTeXView
>>> from ftw.pdfgenerator.view import MakoLaTeXView
>>> from zope.component import adapts
>>> from zope.interface import Interface
>>> from zope.interface import implements

>>> class SessionLaTeXView(MakoLaTeXView):
...     adapts(ISession, Interface, ILaTeXLayout)
...     implements(ILaTeXView)
...
...     template_directories = ['session_templates']
...     template_name = 'view.tex'
...
...     def get_render_arguments(self):
...         return {'title': self.convert(self.context.Title()),
...                 'description': self.convert(self.context.description),
...                 'details': self.convert(self.context.details)}

使用 zcml 注册视图(示例:configure.zcml

<configure
    xmlns="http://namespaces.zope.org/zope"
    xmlns:browser="http://namespaces.zope.org/browser">

    <adapter factory=".views.SessionLaTeXView"
             provides="ftw.pdfgenerator.interfaces.ILaTeXView" />

</configure>

创建一个模板,其名称在类中定义(示例:session_templates/view.tex

\section*{${title}}
% if description:
  \small ${description}
% endif
\normalsize ${details}

生成 PDF

当注册了上下文的布局和视图时,只需在上下文中调用视图 @@export_pdf 即可生成 PDF。

递归视图

当扩展自 ftw.pdfgenerator.view.RecursiveLaTeXView 并在您的模板中插入变量 latex_content 时,视图将自动渲染找到 ILaTeXView 的所有子项。

HTML 到 LaTeX 转换

ftw.pdfgenerator 内置了一个简单但功能强大的 HTML 到 LaTeX 转换器,该转换器针对 Plone 中使用的常见 WYSIWYG 编辑器进行了优化。

转换器可用于

  • 在视图中使用,通过 self.convert(html)

  • 在布局中使用,通过 self.get_converter().convert(html)

它使用正则表达式进行简单转换,使用 Python 子转换器进行更复杂的转换。转换器可高度自定义。

自定义子转换器

脚注

通过将任何文本包裹在具有类 footnotespan 中来生成脚注。在 data-footnote 属性中指定脚注文本。示例

<span class="footnote" data-footnote="text in footnote">text on the page</span>

可定制的布局

当使用多个独立的插件包 ftw.pdfgenerator 时,每个包都可能实现一个新的、特定的布局。如果需要定制所有布局并添加一个标志图像,这可能很痛苦。

为了使这个过程更容易,所有可定制的布局都可以通过一个单一的适配器进行定制。这仅适用于继承自 ftw.pdfgenerator.layout.customizable.CustomizableLayout 的布局。这些布局需要遵循某些概念并在 mako 模板中提供可继承的块。确保通过继承并从 ftw.pdfgenerator.tests.test_customizable_layout.TestCustomizableLayout 运行测试来遵循标准。

当使用可定制的布局时,实现定制适配器非常简单。例如,我们更改标志图像(假设标志在 custom/mylogo.png

>>> from ftw.pdfgenerator.customization import LayoutCustomization
>>> from ftw.pdfgenerator.interfaces import ILayoutCustomization
>>> from zope.interface import implements
>>>
>>> class MyCustomization(LayoutCustomization):
...     implements(ILayoutCustomization)
...
...     template_directories = ['custom']
...     template_name = 'layout_customization.tex'
...
...     def before_render_hook(self):
...         self.add_raw_template_file('mylogo.png')
...         self.layout.use_package('graphicx')
...
...     def get_render_arguments(self, args):
...         args['logo'] = r'\includegraphics{mylogo.png}'
...         return args

还可以更改模板并填充预定义的槽位(例如:custom/layout_customization.tex

<%inherit file="original_layout" />
<%block name="documentTop">
  my branding
</%block>

布局定制适配器适配 上下文请求 和原始 布局

表格

ftw.pdfgenerator 能够将 HTML 表格转换为 LaTeX。由于 HTML 和 LaTeX 完全不同的呈现概念,转换有限。

为了获得最佳结果,应遵循以下规则

  • 定义每一列的宽度。表格将按照定义的比例拉伸到文本宽度。如果不定义宽度,LaTeX 无法动态插入换行符。

  • 使用相对宽度(%)。

  • 对于可能分页的较长的表格,使用 <thead> 定义表格标题。

CSS 类

page-break ()

强制使用 longtable 环境,允许 LaTeX 在多个页面中分割表格。

no-page-break

强制使用 tabular 环境,禁止 LaTeX 在多个页面中分割表格。如果表格超过页面长度,它将被截断 - 在这种情况下可能会丢失内容。

border-grid / listing

以网格形式显示表格:每个单元格的每一边都有边框。

notListed

当使用 <caption> 时,不要在表格列表中列出表格。

border-left

在单元格的左侧显示边框。

border-right

在单元格的右侧显示边框。

border-top

在单元格的顶部显示边框。

border-bottom

在单元格的底部显示边框。

right

将单元格的内容右对齐。

left

将单元格的内容左对齐。

center

将单元格的内容居中。

indent2

将内容缩进 0.2 厘米。

缩进10 (<td>, <th>)

内容缩进1厘米。

加粗 (<td>, <th>)

以加粗字体显示单元格内容。

灰色 (<td>, <th>)

以灰色文本颜色显示单元格内容。

小字号 (<td>, <th>)

以更小的字体大小显示单元格内容 (\footnotesize)。

脚本字号 (<td>, <th>)

以更小的字体大小显示单元格内容 (\scriptsize)。

变更日志

1.6.11 (2024-10-02)

  • 从表格环境末尾删除换行符并添加小段间距。[buchi]

1.6.10 (2021-05-06)

  • 使用 cookie 而不是会话存储来存储调试模式状态。[mathias.leimgruber]

1.6.9 (2020-03-11)

  • 添加对转换十六进制 XML/HTML 实体的支持 [Nachtalb]

1.6.8 (2020-02-11)

  • 不要使用 reference_catalog 进行 uid 查找,因为在 plone 5 中不再存在。[mathias.leimgruber]

1.6.7 (2020-02-03)

  • 不再使用会话存储 - 对于匿名用户来说,它不再与 plone 5 兼容。[mathias.leimgruber]

1.6.6 (2020-01-17)

  • 修复 Unicode 错误(当 Unicode 和非 Unicode 字符串连接时)。[busykoala]

1.6.5 (2019-10-29)

  • 修复超链接标签中下划线的转义问题。[jone]

1.6.4 (2019-03-26)

  • 增强 URL 转换的鲁棒性。[Rotonen]

1.6.3 (2019-01-07)

  • 停止支持 plone 4.2。[njohner]

  • 处理垂直制表符特殊字符。[njohner]

1.6.2 (2018-09-13)

  • 修复超链接标签中破折号字符的转义问题。[jone]

1.6.1 (2018-05-18)

  • 通过在转换表格时传递字符集提示来修复编码错误。[lgraf]

  • 添加 Plone 5 兼容性。[phgross]

  • 修复了设置 pdf 标题时导出 zip 和 latex 的问题。[phgross]

1.6.0 (2017-03-03)

  • 通过构建参数添加设置 pdf 标题的可能性。[phgross]

  • 在 Builder.add_file 中支持文件对象。[jone]

  • 停止支持 Plone 4.1。

1.5.0 (2016-06-08)

  • 实现 URL 转换器以支持 URL 中的连字符。[jone]

1.4.1 (2016-03-30)

  • 列出转换器:避免使用 beatiful soup。[jone]

  • 修复递归子转换器锁定问题。[jone]

1.4 (2016-03-02)

  • 添加脚注子转换器。[lknoepfel]

1.3.8 (2015-12-11)

  • 不要将不是所有单元格都是头单元格的行添加到表头。[tschanzt]

  • 修复在指定单元格少于预期且没有 colspan 属性时进行表格转换的错误。[tschanzt]

1.3.7 (2015-04-13)

  • 修复在 <col> 标签多于单元格时进行表格转换的错误。[jone]

  • HTML 转换器:修复字符串开头时的前导引号。[jone]

1.3.6 (2015-03-20)

  • 针对太长的 makeindex 参数导致缓冲区溢出的解决方案。[jone]

1.3.5 (2015-02-19)

  • PDF Builder:修复在制作索引后的 pdflatex。当索引中使用引用时,例如索引标题在 TOC 中,制作索引后需要多次重新运行。[jone]

1.3.4 (2014-09-30)

  • 向转换器添加 quoted_umlauts 方法。该方法将所有元音转换为引号表示法。[jone]

  • 索引:通过包含 umlaut.ist 正确排序德语元音。为此,所有 index{} 条目都必须用引号转义元音,例如 h"oflich"。[jone]

1.3.3 (2014-07-24)

  • 修复在内部超链接中包含下划线时的 PDF 渲染错误。[jone]

1.3.2 (2014-06-11)

  • 改进表格布局。

    • 增加表格单元格的垂直间距。

    • 在所有表格后添加换行符和垂直空间。

    [jone]

1.3.1 (2014-06-02)

  • 修复反斜杠 LaTeX 使用 textbackslash 而不是 \ 的问题。这解决了在表格等某些环境中的反斜杠问题。[jone]

1.3.0 (2014-03-04)

  • 在PDF构建期间创建了*.idx文件时运行makeindex。这允许仅通过使用latex命令轻松创建索引。构建者会负责正确地构建索引和重新构建PDF。[jone]

1.2.10 (2014-02-05)

  • LaTeX:使用数学模式(*),这样就不会被吞没。[jone]

1.2.9 (2014-01-17)

  • 更新法语翻译。[jone]

  • 脚注中的超链接:使用url而不是手动连字符提示。这修复了在特定版本的hyperref包中,URL中的“”是可见的。[jone]

  • 表格:修复了rowspan单元格使其他单元格交换行的错误。[jone]

  • 表格:修复了跨多列的单元格宽度。这在它们居中时尤其明显。[jone]

1.2.8 (2013-10-21)

  • 使逗号前的连字符不可分割。[jone]

  • 为一些更短的缩写使用非分隔空格。[jone]

  • 在将HTML转换为LaTeX时删除HTML注释。[jone]

  • 使用非分隔空格和连字符格式瑞士货币。[jone]

1.2.7 (2013-05-24)

  • 表格宽度计算:将“px”视为不带度量单位的宽度。[jone]

1.2.6 (2013-04-17)

  • 更新包分类器。[jone]

1.2.5 (2013-01-24)

  • 使用本地文本格式化命令,如textbf代替{bf}。#13 [jone]

  • onegov.ch批准:在readme中添加徽章。[jone]

  • 声明缺失的依赖项。[jone]

  • 使布局可注释。这允许在构建PDF时存储某些信息。[jone]

  • Plone 4.3兼容性。[jone]

1.2.4 (2012-08-21)

  • 表格:修复了使用组合css类“right”和“bold”时的错误缩进。[jone]

  • 表格:支持在单元格的“style”属性中定义宽度。#10 [jone]

  • 修复URL中&符号的转义。#11 [jone]

  • 模板化:修复了基于five的浏览器视图(包装在元类中)的模板查找。[jone]

  • 列表转换:处理空列表项。

    • 在有序列表和无序列表中删除它们。

    • 在定义列表中保留它们,因为两个标签会产生一个条目。

    [jone]

1.2.3 (2012-06-13)

  • 表格转换器:通过使用正确的LaTeX(居中而不是centervspace{-1.5em})来修复单元格内容的居中。[jone]

  • 超链接

    • 支持resolveUid(大写U)解析。[jone]

    • 从连接的相对URL中删除“./”。[jone]

    • 支持URL中的连字符分割。[jone]

    [jone]

1.2.2 (2012-06-11)

  • 改进对数学字符(utf8和html-entities)的支持。[jone]

  • 表格:支持“summary”属性作为标题(TinyMCE支持)。[jone]

  • 处理连字符字符和实体。[jone]

  • 超链接:处理URL中的下划线和hash键。[jone]

  • 修复了以前影响下方内容的表格标题的居中。[jone]

  • 修复了加粗文本周围的引号。[jone]

1.2.1 (2012-05-10)

  • 表格转换器:修复了在使用colspan而没有定义任何宽度时的TypeError。[jone]

1.2 (2012-05-09)

  • HTML到LaTeX:转义$字符。否则它启用数学模式。[jone]

  • 表格:为非浮动环境使用单独的标题实现。[jone]

  • 表格:修复了使用rowspan时的边框折叠错误。[jone]

  • 表格:在尊重tabcolsep的情况下正确计算宽度。[jone]

  • 表格:支持Plone css类(grid、listing、vertical)。[jone]

1.1.2 (2012-05-02)

  • 向转换器和视图添加convert_plain方法。[phgross]

  • 添加encode_htmlentities实用函数。[phgross]

1.1.1 (2012-04-30)

  • 列表转换器:由于LaTeX有此限制,限制嵌套列表到四层。[jone]

  • 列表转换器:修复了嵌套列表不在项目中的错误。[jone]

  • 添加provide_request_layer实用方法,直接在请求上提供接口。[eschmutz]

1.1 (2012-03-22)

  • 通过使用ftw.testing提高测试速度。[jone]

  • 添加表格转换器CSS类:indent2 -> 使内容缩进0.2cm,indent10 -> 使内容缩进1cm,bold -> 以粗体字体显示内容,grey -> 以灰色文本颜色显示单元格内容,footnotesize -> 以更小的字体大小显示单元格内容,scriptsize -> 以更小的字体大小显示单元格内容。[jone]

  • 列表转换器:清理在列表嵌套没有列表项时产生的坏HTML。FCKEditor有时会产生这种情况。[jone]

  • 实现可自定义的布局。[jone]

1.0.2 (2012-03-08)

  • 表格转换器:添加用于对齐单元格的CSS类(“right”、“center”、“left”)。[jone]

  • 表格转换器:添加单元格边框功能,使用CSS类“border-right”、“border-left”、“border-top”和“border-bottom”。[jone]

  • 表格转换器:改进网格边框,添加类“border-grid”和“listing”以启用网格边框。[jone]

  • 表格转换器:对小表格使用“tabular”。#3 [jone]

1.0.1 (2012-03-05)

  • 在布局中添加use_babel函数,启用首选语言。[jone]

1.0b2 (2012-02-28)

  • 添加了缺失的MANIFEST.in。[phgross]

1.0b1 (2012-02-24)

  • 添加了“debug-pdf”视图,临时启用pdf调试模式。[jone]

  • 添加了一些法语翻译[ttschanz]

  • 实现超链接转换器。[jone]

  • 实现定义列表的转换。[jone]

  • 将as_pdf视图重命名为export_pdf。[jone]

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

ftw.pdfgenerator-1.6.11.tar.gz (93.3 kB 查看哈希值)

上传时间