一个用于生成Plone对象LaTeX表示的库。
项目描述
简介
ftw.pdfgenerator 旨在用于从结构化数据生成 PDF,使用预定义的 LaTeX 视图。它不适合将完整的 HTML 页面转换为 LaTeX / PDF,尽管它能够将小的 HTML 片段转换为 LaTeX。
认证: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 子转换器进行更复杂的转换。转换器可高度自定义。
自定义子转换器
脚注
通过将任何文本包裹在具有类 footnote 的 span 中来生成脚注。在 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)。
链接
版权
本软件包版权所有 4teamwork。
ftw.pdfgenerator 采用 GNU 通用公共许可证,版本 2。
变更日志
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的哈希值
ftw.pdfgenerator-1.6.11.tar.gz的哈希值 算法 哈希摘要 SHA256 279ce70794a8916f34ff63708461abd6b7c03fb1298889d270b3197667a8809b
MD5 ed3503f4acf4666351443c63ba022b44
BLAKE2b-256 53cc09596d748ea018f7b8111ea710b51cc3f2c62f1f6451e8ab696815316a1d