Skip to main content

下载为 PDF

项目描述

开发 掌握

此软件包允许您的用户将 Plone 内容下载为 PDF 文件。作为管理员,您可以为每种内容类型定义特定的 PDF 主题。

内容

<nav class="contents" id="topic-1">

内容

</nav>

主要特点

  1. 在页面底部添加下载为 PDF 操作

  2. 可以为每种内容类型定义自定义 PDF 主题

  3. 异步生成 PDF 文件并在 PDF 准备就绪时通过电子邮件通知用户

  4. 可以通过在上下文中添加一个名为“action-download-pdf”的项目来暂时禁用动态 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

入门

  1. 转到站点设置 > PDF 设置

  2. 自定义现有 PDF 主题或添加新主题

  3. 进入首页并点击页面底部的下载为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 目录的 XSL 页面模板。有关 XSL 格式的更多信息,请参阅wkhtmltopdf 文档。留空以禁用目录。默认值:pdf.toc

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 作业而遇到问题,您可以使用与上述相同的方式限制它们。

依赖项

  1. eea.converter

  2. eea.downloads

  3. wkhtmltopdf

  4. plone.app.async

  5. eea.cache(可选)

源代码

资金

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)

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]

  • 初始发行

项目详情