下载为 PDF
项目描述
此软件包允许您的用户将 Plone 内容下载为 PDF 文件。作为管理员,您可以为每种内容类型定义特定的 PDF 主题。
内容
<nav class="contents" id="topic-1">内容
主要特点
在页面底部添加下载为 PDF 操作
可以为每种内容类型定义自定义 PDF 主题
异步生成 PDF 文件并在 PDF 准备就绪时通过电子邮件通知用户
可以通过在上下文中添加一个名为“action-download-pdf”的项目来暂时禁用动态 PDF 创建
安装
将 eea.pdf 添加到您的构建中的egg和zcml部分,然后重新运行构建。您可以从https://github.com/eea/eea.pdf/tree/master/buildouts/plone4下载示例构建
在站点设置 > 附加组件中安装 eea.pdf
[instance] eggs = ... eea.pdf zcml = ... eea.pdf
外部 PDF 生成器工具
确保您已经在您的机器上安装了wkhtmltopdf。您还可以从 buildout安装wkhtmltopdf :
[buildout] parts += wkhtmltopdf [wkhtmltopdf] recipe = hexagonit.recipe.download url = http://eggrepo.apps.eea.europa.eu/pypi/wkhtmltopdf/wkhtmltopdf-0.12.1.tgz [instance] environment-vars += WKHTMLTOPDF_PATH ${wkhtmltopdf:location}/wkhtmltopdf
异步设置
默认情况下,所有 PDF 都是异步生成的,因此在您的构建中需要一些额外的配置才能使其正常工作。
首先,您需要一个文件夹来存储生成的 PDF 文件。为此,您可以在 buildout:directory/var/ 中手动创建它,或者您可以让 buildout 处理它:
[buildout] parts += media-downloads media-downloads-temp media-downloads-path = ${buildout:directory}/var/downloads/pdf media-downloads-temp = ${buildout:directory}/var/downloads/tmp [media-downloads] recipe = ore.recipe.fs:mkdir path = ${buildout:media-downloads-path} mode = 0700 createpath = true [media-downloads-temp] recipe = ore.recipe.fs:mkdir path = ${buildout:media-downloads-temp} mode = 0700 createpath = true
这将在 buildout:directory/var/ 中创建一个名为downloads的文件夹
接下来,为了让这个文件夹在您的网站上可见并且您的用户能够下载生成的 PDF,您需要告诉您的 zope 实例:
[buildout] media-downloads-name = downloads media-downloads-path = ${buildout:directory}/var/downloads/pdf media-downloads-temp = ${buildout:directory}/var/downloads/tmp [instance] environment-vars += EEADOWNLOADS_NAME ${buildout:media-downloads-name} EEADOWNLOADS_PATH ${buildout:media-downloads-path} EEACONVERTER_TEMP ${buildout:media-downloads-temp}
另外,不要忘记设置plone.app.async
[buildout] [instance] eggs += plone.app.async zcml += plone.app.async-single_db_worker
入门
转到站点设置 > PDF 设置
自定义现有 PDF 主题或添加新主题
进入首页并点击页面底部的下载为pdf图标或直接访问http://localhost:8080/Plone/front-page/download.pdf
PDF 主题选项
有关 wkhtmltopdf 选项(如 XSL 文件目录、页眉和页脚参数等)的更多信息,请参阅wkhtmltopdf文档。
覆盖
用于 PDF 封面的页面模板。留空以禁用它。默认值:pdf.cover
免责声明
包含版权和作者信息的页面模板。此页面将放置在封面和 PDF 正文之间。留空以跳过它。默认值:pdf.disclaimer
身体
用于 PDF 正文的页面模板。空值将跳过 PDF 正文。默认值:pdf.body
封底
用于封底的页面模板。留空以禁用后盖。默认值:pdf.cover.back
标题
用作 PDF 正文标题的页面模板。这不会出现在封面、免责声明或封底上。留空表示没有标题。默认值:pdf.header
目录
用于 PDF 目录的 XSL 页面模板。有关 XSL 格式的更多信息,请参阅wkhtmltopdf 文档。留空以禁用目录。默认值:pdf.toc
目录链接
启用或禁用目录内部链接以及 PDF 书签(大纲) 默认值:False
JavaScript
启用或禁用 JavaScript。默认值:真
JavaScript 延迟
等待几秒钟让 javascript 完成默认值:0
暂停
在此秒数后中止 PDF 转换 默认值:3600
异步
异步生成 PDF 并在完成后向用户发送电子邮件默认值:True
抵消
从这个数字开始计算 PDF 正文中的页数。启用封面和/或免责声明时很有用。默认值:0
最大深度
此选项定义文件夹项目在 PDF 中递归包含其子项时的最大深度。默认值:1(仅包括直接子项,非文件夹子项)
最大宽度
此选项限制文件夹项目可以包含在 PDF 中的直接子项的数量。默认值:100
最大项目
文件夹项目的 PDF 导出中包含的总项目,包括深度和广度。默认值:1000
门户类型
将此主题应用于选定的门户类型。默认:
自定义权限
此软件包添加的自定义权限
可以下载PDF(eea.pdf.download)
将此权限分配给您希望能够以 PDF 格式下载内容的角色 默认值:所有者、经理、编辑
可以自定义 PDF (eea.pdf.customize)
将此权限分配给您希望能够根据上下文自定义输出 PDF 外观的角色 默认值:经理、站点管理员
内容规则
此包使用 Plone Content-rules 在异步 PDF 作业完成时通过电子邮件通知用户。因此,将在 Plone > Site Setup > Content-rules 中添加 3 个自定义内容规则
导出成功
通知请求 PDF 导出的人 PDF 已成功导出并提供可下载 PDF 的链接
导出失败
通知请求 PDF 导出的人员 PDF 导出失败。
导出失败(管理员)
通知管理员导出 PDF 时出现问题
内容规则电子邮件字符串替换
为了能够轻松自定义此包发送的电子邮件,可以进行以下自定义电子邮件模板字符串替换
${download_came_from_url}
以 PDF 格式下载的 Plone 对象的绝对 URL
${下载电子邮件}
触发下载为 PDF 操作的用户的电子邮件地址
${下载错误}
下载为 PDF 作业失败时的错误回溯
${download_from_email}
站点管理员电子邮件地址可通过 Plone > 站点设置 > 邮件自定义
${download_from_name}
站点管理员名称可通过 Plone > 站点设置 > 邮件自定义
${下载标题}
以 PDF 格式下载的 Plone 对象的标题
${下载网址}
可以下载生成的输出 PDF 的绝对 URL
${下载类型}
下载类型。此包默认为 PDF。它是特定于包的,可以是 PDF、EPUB 等。
禁用 PDF 导出
您可以通过在名为action-download-pdf 的上下文中添加静态 PDF 文件(或 Python 脚本、页面模板等)来临时禁用动态 PDF 导出。这样 /download.pdf 将返回此文件,而不是根据上下文数据生成文件。
故障排除
PDF 是使用并行 zc.async queue.quota 异步生成的。将根据plone.app.async-*_db_worker注册的 zeo-clients 的数量自动计算将并行生成 PDF 的 worker 数量。
由于每个db_worker最多可以同时处理3 个作业(在 zc.async 代理中硬编码),如果您有2 个工作人员,则同时生成的最大 PDF 数将为6(2 个工作人员 * 3)。如果您有5 个,则相同,您将 同时生成15 个 PDF。
如果出于任何原因您不希望同时生成它们,您可以在 buildout中将环境变量EEAPDF_ASYNC_THREADS设置为1 :
[buildout] ... [instance] ... environment-vars += EEAPDF_ASYNC_THREADS 1
此外,如果您因同时拥有太多 PDF 作业而遇到问题,您可以使用与上述相同的方式限制它们。
依赖项
源代码
最新源代码(兼容Plone 4): https ://github.com/collective/eea.pdf
版权和许可
原始代码的最初所有者是欧洲环境署 (EEA)。版权所有。
EEA PDF(原始代码)是免费软件;您可以根据自由软件基金会发布的 GNU 通用公共许可条款重新分发和/或修改它;许可证的第 2 版,或(由您选择)任何更高版本。
docs/License.txt 下的更多详细信息
资金
EEA - 欧洲环境署 (EU)
变更日志
9.5 - (2021-07-14)
错误修复:取消隐藏打印中的整个内容标题 [ichim-david refs #136489]
9.4 - (2021-05-11)
错误修正:使用 pdf 静态字段中上传的 pdf 文件名,否则默认为 download.pdf [ichim-david refs #133890]
9.3 - (2020-09-18)
错误修正:调整指标的 pdf 输出 [szabozo0 refs #121188]
9.2 - (2019-07-04)
更改:由于 wkhtmltopdf 的字体加载问题,使用 sans serif fallback 而不是 Open Sans [ichim-david refs #107145]
9.1 - (2019-01-28)
Jenkins:添加 sonarqube 步骤 [avoinea refs #101552]
9.0 - (2018-11-23)
更改:在“nobreak”容器中仅将带有标题 h2 和 h3 的第一段分组,以避免生成的 PDF 文件中出现许多空白块。[avoinea 参考文献#100179]
错误修复:修复了 Fiches 的 PDF 标题宽度 [avoinea refs #100179]
8.9 - (2018-08-30)
错误修复:修复了带有短标题的 PDF 生成器 [avoinea refs #97618]
8.8 - (2018-08-21)
更改:使用https:// [alecghica refs #95849]更新指向 eea.europa.eu 的 URL
8.7 - (2018-05-25)
错误修复:加速后向引用的缓存失效 [avoinea refs #95020]
8.6 - (2018-04-24)
更改:使 zc.async 日志对 PDF 下载不那么冗长 [avoinea]
8.5 - (2018-01-08)
更改:使用自定义的更改更新了 pdf.print.css [ichim-david refs #90180]
8.4 - (2017-12-12)
更改:将 eeacms/zptlint 替换为 eeacms/plone-test:4 zptlint [avoinea refs #90415]
8.3 - (2017-11-07)
更改:删除 Sphinx 生成的文档 [petchesi-iulian refs #88212]
8.2 - (2017-07-10)
更改:can_download 现在还检查 zope2.View 上下文权限。这避免了您无法查看上下文但可以触发 pdf 下载的情况 [ichim-david refs #86581]
8.1 - (2017-06-23)
错误修复:如果未找到该属性,则返回 None [iulianpetchesi #86181]
8.0 - (2017-05-22)
更改:修复了 PyLint 警告和错误 [valipod refs #84949]
7.9 - (2017-05-15)
更改:修复了 PyLint 警告和错误 [eduard-fironda refs #84949]
7.8 - (2017-04-24)
更改:更新包信息 [eduard-fironda]
7.7 - (2017-04-19)
错误修复:安全检查封面字幕 [ichim-david refs #83520]
7.6 - (2017-04-13)
功能:添加了禁用每个主题的封面字幕的功能 [ichim-david refs #83520]
7.5 - (2017-03-02)
错误修复:通过在 img 上设置 100% 高度来修复 wkhtmltopdf 分段错误,避免出现 page-break-inside [ichim-david refs #80861]
7.4 - (2017-02-21)
更改:更新 pdf.print CSS 和 JS 以隐藏更多元素 [avoinea refs #81054]
7.3 - (2016-12-05)
功能:添加翻译 [irina-botez]
7.2 - (2016-11-14)
更改:分词外部链接避免因此具有更小的 pdf 渲染 [ichim-david refs #78802]
7.1 - (2016-11-07)
功能:为封面标题类型添加了 css 类 [ichim-david refs #78802]
错误修复:修复了放置在 featureHeading 之后隐藏的数字 [ichim-david refs #78802]
7.0 - (2016-10-31)
错误修复:修复了集合 pdf 主题的 pdf 输出,其中标题和页面有很多空白空间 [ichim-david refs #77970]
错误修复:修复了图形标题与它们后面的图形图表断开连接的问题 [ichim-david refs #77970]
6.9 - (2016-10-14)
功能:图书主题现在在目录和内容中显示文件夹标题 [ichim-david refs #77476]
错误修复:从配置文件导出中删除图像属性 [ZuluPro refs #76260]
6.8 - (2016-10-03)
更改:更新为使用 plone.stringinterp IContextWrapper 适配器 [avoinea]
错误修复:生成 pdf 时包含文件夹的子项 [catalin refs #75057]
6.7 - (2016-09-05)
更改:PDFTheme 现在使用 blob 图像字段 [ichim-david refs #75045]
6.6 - (2016-02-15)
更改:固定 pdf 免责声明 qrbox 边距放置 [ichimdav refs #69095]
6.5 - (2015-12-08)
更改:对作为指标一部分的内联图表的图形标题和 googlecharts-notes 使用 Open sans [ichimdav refs #30473]
6.4 - (2015-12-07)
更改:内容表现在是显示表而不是块,以便将表拉伸到 100% 的可视空间 [ichimdav refs #30473]
6.3 - (2015-11-16)
更改:box-classification 现在在 pdf 输出中可见 [ichimdav refs #30421]
6.2 - (2015-10-22)
错误修复:pdf 分段错误 [lucas refs #28298]
功能:可以使每个主题的 PDF 批量失效 [chiridra refs #28517]
6.1 - (2015-10-05)
错误修复:避免在标题后立即出现分页符 [lucas refs #28588]
6.0 - (2015-09-10)
更改:删除 pdftk 依赖项并使用纯 Python PyPDF2 包 [voineali refs #28522]
5.9 - (2015-09-04)
更改:删除了 pdf.print.css 的指标图形样式,可以在其他 eea 包中添加对指标 pdf 大小的任何修复 [ichimdav refs #28278]
5.8 - (2015-08-18)
功能:切换到 PDF 作业的专用 zc.async 队列配额,允许多个作业并行运行。这将通过同时使用所有 plone.app.async 工作实例来加速 PDF 生成。[voineali 参考文献#28019]
错误修复:考虑到即使由于模板自定义 main 而不是 content-core 而缺少 eea.pdf viewlet,也可以找到 download.pdf [ichimdav refs #27958]
更改:现在清除 qrbox,避免 qrbox 被浮动 [ichimdav refs #27537]
更改:为 PloneHelpCenter Leaf 页面、部分、手册添加了主题。[ghitab 参考文献#27615]
升级步骤:在“Plone > Site setup > Add-ons”中单击升级按钮可用于 EEA PDF
错误修复:避免在标题后立即出现分页符 [lucas refs #27657]
Feature:实现 pdf 封面图像的随机选择 [lucas refs #27603]
5.7 - (2015-07-28)
更改:当图书主题达到 pdf 限制时附加一个 pdf 限制页面,在丢失的页面上给出视觉警告 [ichimdav refs #27539]
更改:在 egg 5.6 中添加了关于 can_download 逻辑的还原更改 [ichimdav refs #27539]
5.6 - (2015-07-28)
更改:can_download 现在在您有一个包含文件夹或集合的文件夹时返回 false,从而避免了带有空页面的主 pdf [ichimdav refs #27539]
错误修复:修复了使用 setTemplate 方法时的 toc 检索 [ichimdav refs #27475]
错误修复:删除了夸张的封面图片,改为 100% [ichimdav refs #27479]
5.5 - (2015-05-26)
错误修复:保留 async.py 模块以实现向后兼容性 [voineali refs #25755]
5.4 - (2015-05-05)
功能:为主题添加了一个新选项,允许在 pdf 输出超过 200 页时 wkhtmltopdf 崩溃的情况下提供静态页脚和页眉模板。此选项将渲染模板一次,然后继续提供它们。如果启用此功能,您应该避免在页面之间更改的 tal 条件。[ichimdav 参考文献#23904]
5.3 - (2015-04-02)
功能:添加了目录深度选项,该选项配置每个上下文在目录页面中找到哪些标题标签,以及能够禁用每个上下文的目录 [ichimdav refs #24351]
更改:为免责声明浏览器视图添加更改以使用 pdfdisclaimer.pt [ichimdav refs #23322] 中的宏
5.2 - (2015-03-17)
更改:将archiveMessage 类添加到要隐藏在打印中的项目列表中[ichim-david refs #23017]
更改:在 jenkins 构建安装脚本中切换到 curl [olimpiurob refs #22402]
更改:将 jenkins 构建安装脚本的 fetch url 更改为来自主 EEA CPB 存储库的安装脚本 [olimpiurob refs #22402]
错误修复:添加了一种方法来了解是否正在生成 PDF,即使异步工作人员已关闭或队列太忙。[voineali 参考文献#23411]
5.1 - (2015-02-26)
更改:从先前鸡蛋版本中添加的免责声明中删除了图标,因为它们没有正确打印 pdf [ichimdav refs #23322]
功能:添加了带有进入免责声明浏览器页面的逻辑的 pdfdisclaimer.pt,以便轻松修改其内容 [ichimdav refs #23322]
5.0 - (2015-02-25)
错误修复:在使用/不使用 ajax_load 调用时修复了 PDF 内存缓存 [voineali refs #23103]
错误修复:修复了 download.pdf 模板中的 UnicodeDecodeError [voineali refs #23338]
错误修复:修复了下载为 PDF 操作权限 [avoinea]
错误修复:修复了 viewlet 名称 [avoinea]
错误修复:修复了在父级中提供后备 PDF 时的下载链接 [voineali refs #23291]
更改:将异步 API 移至 eea.converter,以便将其重用于其他异步作业(例如 eea.epub)[voineali refs #22971
4.9 - (2015-02-16)
功能:增加了在名为action-download-pdf的上下文中添加备用 PDF 文件的可能性, 以暂时停止动态 PDF 生成并静态返回此项目。[voineali 参考文献#22970]
更改:不要合并 pdf.print.css 以便在 epub 导出中轻松重用它 [voineali refs #22686]
更改:在 pdf 免责声明页面上添加了时间戳和打印通知 [ichimdav refs #22442]
更改:从 pdf 免责声明页面中删除了出版社版权声明 [ichimdav refs #22442]
功能:增加了在导出收藏 PDF 正文时使用特定 ZPT 宏的可能性 [voineali refs #22686]
i18n:添加意大利语翻译 [cekk]
4.8 - (2015-02-03)
功能:还在 export_actions 类别中添加了“下载为 PDF”操作 [voineali refs #22686]
4.7 - (2014-12-23)
错误修复:对临时文件使用with语句,以确保它们在退出前安全关闭 [voineali refs #22080]
4.6 - (2014-12-02)
错误修复:使用由 eea.converter 8.5+ 定义的共享临时目录,以避免与 zc.async 一起使用时出现意外 [voineali refs #21958]
4.5 - (2014-11-20)
更改:新的 egg 版本包括文档文件夹 [ghicaale refs #21453]
4.4 - (2014-11-20)
功能:使用 PDF 选项扩展 eea.cache 失效表单,以便能够在“缓存”选项卡中手动使最新生成的 PDF 失效 [voineali refs #21630]
更改:如果使用文件夹中名为 image 的图像而不需要将图像添加到 coverImage 字段 [ichim-david refs #21637] 来安装 eea.depiction,则封面图像将得到增强
功能:将 coverImage 字段添加到文件夹内容,允许您为封面设置自定义图像 [ichimd-david refs #21637]
更改:重构默认主题:简单项目的页面和集合和文件夹项目的书籍 [avoinea]
错误修复:修复标题中的字母间距 [avoinea]
功能:更新文档 [avoinea]
4.3 - (2014-10-15)
更改:对自定义的 PDF 输出进行了几项改进。默认使用帕拉蒂诺。某些元素的边距更好。将一些 css 移至标准 print.css [demarant]
4.2 - (2014-10-01)
错误修复:在此包生成的所有情况下清理临时文件 [voineali refs #21149]
更改:使用包名称为临时文件添加前缀:eea.pdf。[voineali 参考文献#21149]
错误修复:当多个异步工作人员生成相同的文件时避免冲突 [voineali refs #21149]
功能:为每个主题添加了“javascript-delay”选项,以等待 javascript 执行 [voineali refs #21068]
错误修复:使用 PDF 内容规则安全地获取 title_or_id [voineali refs #21068]
功能:通过创建 .tmp 文件标记转换的开始 [ghicaale refs #20972]
4.1 - (2014-09-16)
错误修复:修复了 PDF 设置控制面板中的“AttributeError:异步”[avoinea]
4.0 - (2014-09-15)
升级步骤:(可选)在 Plone > Site setup > PDF Settings 中确保所有 PDF 主题都检查了异步属性并将超时增加到 3600 [voineali refs #20845]
升级步骤:(可选)在 Plone > 站点设置 > 内容规则中查看所有与 PDF 相关的内容规则。由于这些规则是由异步作业触发的,因此在发送电子邮件时不要使用其他字符串替换,而不是以$download_开头的那些 [voineali refs #20845]
升级步骤:(可选)在服务器计算机上添加清理 cron 以删除超过 7 天(或更长时间,取决于您的存储大小)生成的 PDF 文件 [voineali refs #20845]
升级步骤:在“Plone > Site setup > Add-ons”中单击升级按钮可用于 EEA PDF
功能:如果系统无法从当前用户的个人资料中获取 PDF,则当用户尝试异步导出 PDF 时询问电子邮件 [voineali refs #20846]
功能:使用 plone.app.async 异步生成 PDF。此版本默认启用。它可以从站点设置 > PDF 设置 > 主题中手动禁用 [voineali refs #20843]
3.2 - (2014-09-07)
错误修复:重新发布损坏的 3.1 版 [avoinea]
3.1 - (2014-08-27)
功能:如果存在 eea.cache,则通过使用 memcached 缓存 pdf.body 方法来加速 PDF 导出 [voineali refs #20678]
功能:为嵌入式 daviz 图表添加了打印 CSS [voineali refs #20523]
3.0 - (2014-08-12)
升级步骤:将“可以下载 PDF”权限分配给 CommonEditor
升级步骤:在“Plone > Site setup > Add-ons”中单击升级按钮可用于 EEA PDF
更改:添加了 i18n 翻译 [voineali refs #20431]
错误修复:在 PDF 导出中隐藏一些指标框 [voineali refs #20454]
错误修复:修复了关键消息和相关项目的间距 [voineali refs #20457]
错误修复:修复了用于 PDF 导出中表格的 CSS [voineali refs #20462]
更改:如果第一句的长度大于 80 个字符,则跳过 PDF 封面中的描述 [voineali refs #20456]
功能:包含 iframe 并解释 javascript。还添加了禁用每个主题的 javascript 的选项。[voineali 参考文献#20459]
清理:删除了 beautifulsoup4 依赖项并清理了使用此工具进行的所有修复 [voineali refs #20459]
功能:为集合和文件夹内容类型添加了全局和本地 PDF 设置:最大深度、最大宽度和最大项目总数 [voineali refs #20436]
功能:增加了在本地覆盖 PDF 主题以在 PDF 导出中使用的可能性 [voineali refs #20436]
功能:增加了在本地禁用 PDF 导出的可能性 [voineali refs #20436]
功能:添加了 IPDFAware 标记界面,以便轻松支持 PDF 导出。还增加了敏捷支持。[voineali 参考文献#20436]
功能:添加了“可以下载 PDF”和“可以自定义 PDF”权限 [voineali refs #20436]
更改:删除了默认的 PDF 主题概念。如果没有为内容类型分配 PDF 主题,则无法下载 PDF [voineali refs #20436]
2.0 - (2014-07-16)
功能:添加了从 PDF 中排除某些部分的样式。[demarant #20255]
升级步骤:在“Plone > Site setup > Add-ons”中单击升级按钮可用于 EEA PDF
升级步骤:在“Plone > Site setup > Add-ons”卸载collective.sendaspdf
功能:添加目录支持 [voineali refs #20268]
功能:为主题和集合内容类型添加了自定义 pdf.body,它是基于查询结果 pdf.body 的聚合页面 [voineali refs #20267]
功能:为 Plone Folder ctype 添加了自定义 pdf.body,它是基于子 pdf.body 的聚合页面 [voineali refs #20267]
清理:删除collective.sendaspdf 依赖项[voineali refs #20268]
1.1 - (2014-06-30)
错误修复:修复了使用collective.sendaspdf下载pdf时打印css失败的条件[ichimdav refs #19880]
错误修复:使用 plone.app.vocabularies.ReallyUserFriendlyTypes 获得更好的门户类型匹配 [ichim-david refs #19880]
1.0 - (2014-06-06)
升级步骤:在“Plone > Site setup > Add-ons”中安装“EEA PDF” [voineali refs #19761]
初始发行