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