使用ImageMagick等外部工具进行SVG、PNG、PDF转换器
项目描述
简介
此包提供了使用ImageMagick转换图像和PDF文件的工具。它还提供了一个通用的/download.pdf浏览器视图,允许用户下载Plone页面作为带有自定义PDF封面、免责声明和封底的PDF文件(需要在服务器上安装wkhtmltopdf系统包)。
主要功能
将Plone/Zope内容下载为PDF文件,带有自定义PDF封面、目录等;
提供工具提取PDF封面为图像(使用PyPDF2和ImageMagick);
提供从PDF中提取元数据的工具(使用PyPDF2);
提供更新PDF元数据的工具(使用PyPDF2)。
安装
确保您已安装wkhtmltopdf 0.12.1+,或者通过zc.buildout安装。
确保您已安装ImageMagick 6.3.7+,或者通过zc.buildout安装。
如果您有跨越多个物理服务器的zope实例,请确保在buildout中有一个名为EEACONVERTER_TEMP的操作系统环境。
将eea.converter添加到您的buildout eggs部分,并重新运行buildout。您可以从https://github.com/collective/eea.converter/tree/master/buildouts/plone4下载一个示例buildout。
入门
自定义输出PDF
封面
提供名为@@pdf.cover的自定义浏览器页面。
<browser:page for="my.package.interfaces.ICustomContent" name="pdf.cover" class=".app.pdfview.Cover" template="zpt/pdf.cover.pt" permission="zope2.View" />
免责声明
包含作者详情和版权的第一页,在PDF封面之后。提供名为@@pdf.cover的自定义浏览器页面。
<browser:page for="my.package.interfaces.ICustomContent" name="pdf.disclaimer" class=".app.pdfview.Disclaimer" template="zpt/pdf.disclaimer.pt" permission="zope2.View" />
主体
提供名为@@pdf.body的自定义浏览器页面。
<browser:page for="my.package.interfaces.ICustomContent" name="pdf.body" class=".app.pdfview.Body" template="zpt/pdf.body.pt" permission="zope2.View" />
封底
提供名为@@pdf.cover.back的自定义浏览器页面。
<browser:page for="my.package.interfaces.ICustomContent" name="pdf.cover.back" class=".app.pdfview.BackCover" template="zpt/pdf.cover.back.pt" permission="zope2.View" />
目录
要启用目录,提供一个名为@@pdf.toc的空浏览器页面。
<browser:page for="my.package.interfaces.ICustomContent" name="pdf.toc" template="zpt/pdf.toc.pt" permission="zope2.View" />
选项
对于PDF封面,您需要提供一个命名适配器,例如
<adapter name="pdf.cover" for=" my.package.interfaces.ICustomContent" provides="eea.converter.interfaces.IPDFOptionsMaker" factory=".adapters.CoverOptionsMaker" />
同样适用于PDF免责声明
<adapter name="pdf.disclaimer" for=" my.package.interfaces.ICustomContent" provides="eea.converter.interfaces.IPDFOptionsMaker" factory=".adapters.DisclaimerOptionsMaker" />
或者对于PDF封底
<adapter name="pdf.cover.back" for=" my.package.interfaces.ICustomContent" provides="eea.converter.interfaces.IPDFOptionsMaker" factory=".adapters.BackCoverOptionsMaker" />
对于PDF主体,您需要提供一个命名适配器,例如
<adapter name="pdf.body" for=" my.package.interfaces.ICustomContent" provides="eea.converter.interfaces.IPDFOptionsMaker" factory=".adapters.BodyOptionsMaker" />
对于全局PDF选项,提供一个无名称适配器,例如
<adapter for=" my.package.interfaces.ICustomContent" provides="eea.converter.interfaces.IPDFOptionsMaker" factory=".adapters.OptionsMaker" />
还可以添加自定义的print.css以满足您的需求。更多信息请参阅eea.pdf
限制访问和异步
为了限制对/download.pdf的访问,您需要提供一个名为pdf.support的多适配器,并具有名为can_download
的方法。例如:
<browser:page name="pdf.support" for="zope.interface.Interface" class=".support.Support" permission="zope.Public" allowed_interface="eea.converter.interfaces.ISupport" />
同样适用于异步下载,定义一个名为async
的方法。在eea.converter.browser.app.support
中查看默认实现,或在buildout.cfg中添加一个名为EEACONVERTER_ASYNC的环境变量。
[instance] ... environment-vars = EEACONVERTER_ASYNC True
内容规则
此包使用Plone内容规则在异步作业完成后通过电子邮件通知用户。因此,将在Plone > 网站设置 > 内容规则中添加3个自定义内容规则。
导出成功
通知请求PDF/ePub导出的个人,文档已成功导出,并提供可下载文件的链接。
导出失败
通知请求PDF/ePub导出的个人,导出失败。
导出失败(管理员)
通知管理员在导出PDF/ePub时出现了问题。
内容规则电子邮件字符串替换
为了能够轻松自定义此包发送的电子邮件,可以执行以下自定义电子邮件模板字符串替换:
${download_came_from_url}
作为PDF/ePub下载的Plone对象的绝对URL
${download_email}
触发下载PDF/ePub操作的用户的电子邮件地址
${download_error}
下载PDF/ePub作业失败时的错误跟踪信息
${download_from_email}
通过Plone > 网站设置 > 邮件可自定义的网站管理员电子邮件地址
${download_from_name}
通过Plone > 网站设置 > 邮件可自定义的网站管理员名称
${download_title}
作为PDF/ePub下载的Plone对象的标题
${download_url}
生成的输出PDF/ePub可以下载的绝对URL
${download_type}
下载类型:PDF/ePub
依赖项
ImageMagick (6.3.7+)
yum install ImageMagick apt-get install imagemagick
rsvg-convert (2.40.16+)
yum install rsvg-convert apt-get install librsvg2-bin
源代码
- 最新源代码(Zope 2兼容)
文档
请查看此包中的doc目录。
版权和许可
原始代码的初始所有者是欧洲环境局(EEA)。版权所有。
EEA展示(原始代码)是自由软件;您可以在自由软件基金会发布的GNU通用公共许可证的条款下重新分发它或修改它;许可证的第二版,或者(根据您的选择)任何后续版本。
更多详细信息请参阅docs/License.txt
资金
EEA - 欧洲环境局(欧盟)
变更日志
12.9 - (2020-03-31)
错误修复:使用从pdf解析得到的标题而不是来自pypdf2 getDocumentInfo方法的标题,因为该方法在解析pdf获取其元数据时将标题中的mdash错误编码[ichim-david refs #116365]
12.8 - (2019-10-11)
功能:支持SVG图像转换的缩放级别和宽高比[avoinea refs #109515]
12.7 - (2019-01-28)
Jenkins:添加sonarqube步骤[avoinea refs #101552]
12.6 - (2019-01-17)
更改:恢复封面颜色空间为sRGB[avoinea refs #101483]
12.5 - (2018-12-05)
更改:更新封面颜色空间为CMYK以与ghostscript 9.26+兼容[avoinea refs #99812]
12.4 - (2018-08-28)
功能:使用rsvg-convert将SVG转换为PNG,或者回退到ImageMagick[avoinea refs #97843]
12.3 - (2018-08-22)
更改:更新到wkhtmltopdf 0.12.4(添加—-disable-smart-shrinking选项)[avoinea refs #97586]
更改:更新指向eea.europa.eu的URL为https://[alecghica refs #95849]
更改:修复在Plone 4.3.17上运行的测试[alecghica refs #96974]
12.2 - (2018-04-20)
更改:在AsyncInfo包装器内分组下载信息[avoinea]
12.1 - (2017-12-12)
更改:将eeacms/zptlint替换为eeacms/plone-test:4 zptlint[avoinea refs #90415]
12.0 - (2017-11-07)
更改:删除Sphinx生成的文档[petchesi-iulian refs #88212]
更改:改进了日志[alecghica refs #88578]
11.9 - (2017-06-26)
更改:删除对plone.stringinterp的硬依赖[avoinea]
错误修复:修复了imagemagick convert命令,添加了颜色空间参数和页码参数[zoltan_andras refs #85638]
11.8 - (2017-05-22)
更改:修复了PyLint警告和错误[valipod refs #84949]
11.7 - (2017-05-15)
更改:修复了PyLint警告和错误[eduard-fironda refs #84949]
11.6 - (2017-05-08)
更改:如果我们在collection.pdf.body中打印,则删除pdf.header标题值,因为打印多页会导致错误标题,因为一旦我们打印下一个对象[ichim-david refs #84084]
11.5 - (2017-04-24)
更改:更新了包信息[eduard-fironda]
11.4 - (2017-03-20)
错误修复:修复了pdf.footer和pdf.header标题的编码问题,当子页面有需要转义的内容时[ichim-david refs #80861]
11.3 - (2017-01-17)
错误修复:删除了v11.2中引入的CMFPlone硬依赖[avoinea]
11.2 - (2017-01-17)
功能:在PDF目录中的“目录”处添加了国际化[irina-botez]
11.1 - (2016-11-07)
功能:将pdf_custom_fixes添加到pdf.toc.pt中,以防此模板需要自定义CSS修复[ichim-david refs #78802]
11.0 - (2016-10-14)
更改:更改了pdf.toc标题的样式[ichim-david refs #77476]
10.9 - (2016-10-06)
错误修复:修复了版本10.8中引入的关于此包定义的custom Content-Rules字符串替换的回归错误[voineali refs #77581]
10.8 - (2016-10-03)
更改:使用来自plone.stringinterp的IContextWrapper而不是自定义的IContextWrapper[avoinea]
10.7 - (2016-05-19)
更改:修复了PyLint警告和错误[ichim-david refs #71940]
10.6 - (2016-03-31)
清理:清理了pdftk特定代码[avoinea]
错误修复:如果EEACONVERTER_TEMP未设置,则警告并回退到CLIENT_HOME/tmp而不是崩溃整个应用程序[avoinea]
10.5 - (2016-02-15)
错误修复:在“目录”部分中,避免文本分页[danielm-gh refs #67840]
10.4 - (2016-02-03)
错误修复:在“目录”部分,文本(国家名称)没有在页面之间分割 [danielm-gh 参考 #67840]
10.3 - (2015-12-11)
更改:修复了wkhtmltox对centos的依赖 [voineali 参考 #31324]
10.2 - (2015-12-07)
更改:在setup.py中添加了系统依赖项 [voineali 参考 #27406]
10.1 - (2015-10-22)
错误修复:添加-flatten选项以修复#28943。它防止透明覆盖 [lucas 参考 #28943]
10.0 - (2015-09-10)
功能:添加了更新PDF元数据的工具。从eea.reports迁移 [voineali 参考 #28522]
功能:添加了从PDF中提取元数据的工具。从eea.reports迁移 [voineali 参考 #28522]
功能:添加了从PDF中提取封面图片的工具。从eea.reports迁移 [voineali 参考 #28522]
更改:删除了pdftk依赖,并使用纯Python PyPDF2包 [voineali 参考 #28522]
9.6 - (2015-08-18)
更改:添加了pdf_custom_fixes.css,由pdf.header和pdf.footer加载,以便在需要快速修复时使用 [ichimdav 参考 #27537]
错误修复:当用于指标时,修复了pdf.footer标题和页码 [ichimdav 参考 #27537]
9.5 - (2015-07-28)
更改:修改了pdf.toc.pt样式,以避免在输出列表项时出现页面中断 [ichimdav 参考 #27475]
错误修复:更新导出的PDF/ePub文件的修改时间,以便清理cron-job知道不要删除最近请求的PDFs/ePubs文件。 [voineali 参考 #27513]
9.4 - (2015-05-26)
错误修复:为了保持向后兼容性,将作业保持在wk.py中 [voineali 参考 #25755]
9.3 - (2015-05-05)
更改:更改了脚注和页眉模板,以便在使用静态脚注和页眉时保留模板逻辑 [ichimdav 参考 #23904]
9.2 - (2015-04-02)
功能:添加了限制在目录中出现的页眉标签的可能性 [ichimdav 参考 #24351]
9.1 - (2015-03-17)
更改:在jenkins构建安装脚本中切换到curl [olimpiurob 参考 #22402]
更改:更改了jenkins构建安装脚本的fetch url,将其更改为主EEA CPB存储库中的安装脚本 [olimpiurob 参考 #22402]
9.0 - (2015-02-25)
错误修复:修复了download.pdf模板中的UnicodeDecodeError [voineali 参考 #23338]
清理:从download.pdf中删除了过时的 make_pdf_cover [voineali 参考 #22971]
更改:将异步API从eea.pdf移动到eeaconverter,以便在其他异步作业(例如eeaePub)中重用 [voineali 参考 #22971]
8.7 - (2015-02-16)
功能:更新ISupport API,包括异步和电子邮件方法 [voineali 参考 #22971]
功能:添加了在导出PDF正文时使用特定ZPT宏的可能性(例如content-core) [voineali 参考 #22686]
8.6 - (2014-12-23)
错误修复:使用with语句与临时文件一起使用,以确保在退出之前安全关闭它们 [voineali 参考 #22080]
错误修复:在创建身份验证cookie-jar时,也要注意CDN资源 [voineali 参考 #22080]
8.5 - (2014-12-02)
错误修复:通过使用os.env EEACONVERTER_TEMP定义共享临时目录,添加了定义共享临时目录的可能性,以避免在使用zc.async时出现意外 [voineali 参考 #21958]
8.4 - (2014-11-28)
错误修复:使用比–cookie更稳定的–cookie-jar选项来修复使用wkhtmltopdf打印集合页眉/页脚时的重复cookie。这也修复了在之前版本中引入的PDF开头出现的空白页 [voineali 参考 #21958]
8.3 - (2014-11-20)
错误修复:修复了目录页面对齐 [voineali 参考 #21628]
错误修复:修复了打印集合页眉/页脚时的重复cookie [voineali 参考 #21628]
8.2 - (2014-10-15)
错误修复:防止随机wkhtmltopdf段错误,并重试3次以重新生成PDF [voineali 参考 #21149]
8.1 - (2014-10-01)
更改:使用包名称:eeaconverter对临时文件进行前缀 [voineali 参考 #21100]
8.0 - (2014-09-15)
功能:可以在安全模式(默认)或非安全模式(引发所有错误)中运行PDF转换作业 [voineali 参考 #20845]
更改:更改了download.pdf API,以便允许异步作业使用dry-run [voineali 参考 #20843]
更改:使@@pdf.support/can_download可通过URL访问 [voineali 参考 #20846]
7.1 - (2014-08-12)
错误修复:对齐PDF目录表尾的虚线与页码 [voineali 参考 #20431]
错误修复:修复了长PDF页眉和页脚文本,并根据页码的奇偶性左对齐或右对齐 [voineali 参考 #20431]
功能:添加了i18n翻译 [voineali 参考 #20431]
功能:添加了避免在描述中截断句子的可能性 [voineali 参考 #20456]
特性:默认在PDF导出中启用JavaScript。[voineali 引用 #20459]
特性:添加了API以限制对download.pdf的访问。[voineali 引用 #20436]
7.0 - (2014-07-15)
特性:添加了目录支持。[voineali 引用 #20268]
清理:移除collective.sendaspdf依赖。[voineali 引用 #20268]
6.8 - (2014-06-06)
特性:添加了PDF封底支持。[voineali 引用 #19882]
特性:添加了PDF免责声明支持(封面后第一页包含作者详情和版权信息)[voineali 引用 #19882]
6.7 - (2014-03-10)
错误修复:不要在PDF封面添加目录。[voineali 引用 #18630]
变更:为了解决wkhtmltopdf 0.12的问题,在header pdf模板中传递doctype以插入头信息。[ichim-david 引用 #18550]
6.6 - (2014-01-21)
错误修复:移除了README.rst中错误添加的引用块。[ichim-david 引用 #18064]
特性:添加Sphinx生成的文档,格式为Page Template。[batradav 引用 #9502]
6.5 - (2013-10-22)
错误修复:将PDF转换为图像时返回第一页;重构封面[simiamih 引用 #16799]
6.4 - (2013-10-07)
特性:添加了根据字符数截断文本的实用方法,不会在末尾切断单词[voineali 引用 #16946]
特性:添加了将相对URL转换为绝对URL的实用方法[voineali 引用 #16946]
6.3 - (2013-10-04)
错误修复:修复了PDF封面请求未发布文档凭据的问题[voineali 引用 #14904]
特性:添加了自定义PDF html-header和html-footer,以便轻松自定义(只需为您的上下文覆盖@@pdf.header和@@pdf.footer即可)[voineali 引用 #16802]
6.2 - (2013-09-23)
特性:使用自定义封面导出HTML到PDF(需要collective.sendaspdf)[voineali 引用 #14904]
6.1 - (2013-02-25)
特性:添加了贡献者信息[ciobabog 引用 #13892]
为Popen的close_fds参数添加Windows支持[erral #1]
6.0 - (2012-10-08)
修复了依赖项,清理并使包在干净的Zope上运行[ghicaale #5426]
1.1 - (2012-06-12)
添加水印工具[szabozo0]
1.0 - (2012-03-05)
首次发布[voineali]