一个基于ATFile对象的Plone 4产品,用于生成存储在其上的PDF文件的图像缩略预览。
项目描述
简介
PdfPeek是一个Plone 4插件产品,它使用GNU Ghostscript生成上传到基于ATFile内容的对象上的PDF文件的图像缩略预览。在2.0.0版本中添加了对Dexterity(以及plone.app.contenttypes)的支持。
当此产品安装在Plone 4.x站点上时,将自动生成上传的PDF文件每页的预览和缩略图,并将它们存储在包含PDF文件的正文对象上。
从PDF文件生成图片是异步处理的,这样用户就不必等待图片生成,从而可以继续使用网站,因为处理大型PDF文件可能需要几分钟的时间。
从2.0.0版本开始,pdfpeek支持使用rabbitmq消息队列生成缩略图,请参阅安装部分以获取更多详细信息。
当文件对象初始化或编辑时,PdfPeek会检查是否上传了PDF文件。如果是的话,会在pdfpeek作业队列中添加一个ghostscript图像转换作业(或者在< span class="docutils literal">collective.zamqp使用情况下为rabbitmq)。
如果上传的文件不是内容类型“application/pdf”,则会在pdfpeek作业队列中添加一个图像删除作业。这个作业队列由cron作业或zope时钟服务器进程定期处理。图像转换作业将IPDF接口添加到内容对象中,并将每个PDF页面的结果图像预览和缩略图存储在内容对象本身上。图像删除作业将从内容对象中删除图像注释和IPDF接口。
如果作业失败,它将从处理队列中删除并附加到失败作业列表中。如果作业成功,它将从处理队列中删除并附加到成功完成作业列表中。
小部件
PdfPeek附带了默认开启的示例用户界面。此UI在用户在浏览器中查看内容对象时显示PDF文件的每一页的缩略图。此示例UI尚未完全工作,它只是一个示例。我并不声称自己是javascript大师。
有一个自定义遍历器,可以方便地直接访问图像和预览,以及构建包含文件内容图像预览的定制视图。
安装
使用zc.buildout进行安装。如果您想使用< span class="docutils literal">collective.zamqp进行异步队列处理,则可能需要添加collective.pdfpeek [zamqp]。使用
collective.pdfpeek [dexterity]以支持dexterity
collective.pdfpeek [archetype]以支持archetype
collective.pdfpeek [zamqp]以支持collective.zamqp
您还可以将这些额外功能组合起来,如下所示(有关有效构建配置,请参阅buildout-zamqp.cfg)
[buildout] ... parts = instance [instance] recipe = plone.recipe.zope2instance user = admin:admin http-address = 8080 eggs = ... collective.pdfpeek [dexterity, zamqp] zope-conf-additional = %import collective.zamqp <amqp-broker-connection> connection_id superuser hostname 127.0.0.1 port 5672 username guest password guest heartbeat 120 keepalive 60 </amqp-broker-connection>
配置
PdfPeek附带了configlet,允许站点管理员调整生成的预览和缩略图图像的大小,以及切换示例用户界面和默认事件处理器的开关。
需求
Plone 4.1+
需要在$PATH上提供GNU ghostscript gs二进制文件!
在符合POSIX的系统上进行测试,例如LINUX和MacOS 10.8。
在Windows系统上未进行测试。(如果您能安装gs,它应该可以工作,不会感到惊讶)。
从版本0.17开始,Plone 3.x不再官方支持。
代码、问题、评论
在github上报告错误:https://github.com/collective/collective.pdfpeek/issues
有关问题和评论,请联系db@davidbrenneman.com
待办事项
实现一个可以异步处理文件(一次处理多个文件)的处理队列模型(应该使用RabbitMQ,但可能会引起冲突错误)。
实现用于在包含PDF文件的文件对象上添加和删除图像预览的控制面板。
安装
通过zc.buildout
推荐使用集体.pdfpeek的方法是通过安装zc.buildout使用plone.recipe.zope2instance食谱。PdfPeek使用z3c.autoinclude来加载它的zcml,所以你不需要zcml别名。
将collective.pdfpeek添加到buildout.cfg实例部分中的egg列表中,如下所示
[instance] ... eggs = ... collective.pdfpeek ...
然后按照如下方式重新运行buildout以激活安装
$ bin/buildout
通过setuptools
要使用传统的Zope 2实例将collective.pdfpeek安装到全局Python环境(或virtualenv),你可以这样做
当你阅读这个时,你可能已经运行了easy_install collective.pdfpeek。有关安装setuptools(和EasyInstall)的信息,请参阅:http://peak.telecommunity.com/DevCenter/EasyInstall
如果你正在使用Zope 2.9(不是2.10),获取pythonproducts并通过以下方式安装它
python setup.py install --home /path/to/instance
到你的Zope实例中。
在/path/to/instance/etc/package-includes目录中创建一个名为collective.pdfpeek-configure.zcml的文件。该文件应只包含以下内容
<include package="collective.pdfpeek" />
配置
通过zc.buildout
对于自动处理PdfPeek作业队列,使用curl或wget的简单cron脚本就足够了。然而,将项目的所有配置都保存在buildout中会更方便。因此,推荐使用zope clock server进程来自动处理作业队列。你可以在buildout配置中的[instance]部分添加以下片段来实现这一点
[instance] ... zope-conf-additional= # process the job queue every 5 seconds <clock-server> method /Plone/@@pdfpeek.utils/process_conversion_queue period 5 user admin password admin host localhost </clock-server> ...
您需要编辑上述片段以自定义plone站点的名称、管理员用户名和密码,以及实例运行的hostname。您还可以调整clock server处理队列的间隔。
然后按照如下方式重新运行buildout以激活clock server
$ bin/buildout
通过cron
安装wget。
编辑你的crontab文件并添加以下行
5 * * * * wget --user=admin --password=admin https://127.0.0.1:8080/Plone/@@pdfpeek.utils/process_conversion_queue
您需要将上述行中的hostname、端口号、用户名、密码和plone实例的路径自定义。
保存您的crontab文件,wget现在将每五分钟调用一次触发PDF转换队列处理的视图方法。
通过RabbitMQ
在你的机器上安装rabbitmq-server。rabbitmq网站上有非常好的文档,请参阅:https://rabbitmq.cn/download.html
而不是配置clockserver,你应该配置collective.zamqp以工作,请参阅以下示例
[buildout] parts = instance worker ... [instance] recipe = plone.recipe.zope2instance http-address = 8080 eggs = ... collective.pdfpeek [zamqp] ... zope-conf-additional = %import collective.zamqp <amqp-broker-connection> connection_id superuser hostname my.rabbithostname.com port 5672 username guest password guest heartbeat 120 keepalive 60 </amqp-broker-connection> [worker] <= instance http-address = 8081 zserver-threads = 1 environment-vars = ZAMQP_LOGLEVEL INFO zope-conf-additional = ${instance:zope-conf-additional} <amqp-consuming-server> connection_id superuser site_id Plone user_id admin </amqp-consuming-server>
有关高级配置,请参阅collective.zamqp文档,请参阅:https://pypi.python.org/pypi/collective.zamqp
变更日志
2.0.0 (2014-12-04)
更新README.rst以包含配置示例[saily]
通过将元数据包含到已处理文件的注释存储中修复失败的测试。测试更新[saily]
将abc.ABCMeta用作抽象基类的元类[saily]
修复依赖关系,不要将collective.zamqp包含到测试中,以便允许测试默认的事件处理器[saily]
更新事件,并添加对IObjectCreatedEvent的订阅器[agitator]
取消对Plone 4.1的支持,使用plone.app.contenttypes修复测试设置[saily]
使用plone.recipe.codeanalysis进行Flake8、PEP8清理,删除双引号,PEP3101,jshint,jscs和csslint检查。这也在travis上完成[saily]
更新buildout和travis配置[saily]
更新bootstrap.py以兼容buildout 2.x[saily]
2.0b2 (2013-10-17)
修复包中缺少README.rst的问题[saily]
2.0b1 (2013-10-17)
为用户添加基本行为,允许他们为自定义的dexterity内容类型创建PDF缩略图。[saily]
添加 collective.zamqp 集成,允许将PDF缩略图作业排队到RabbitMQ消息队列服务器。[saily]
切换到PyPDF2,与pyPdf相比得到维护,可以作为直接替换项。[saily]
为Plone 4.1、Plone 4.2和Plone 4.3添加travis-ci。[saily]
使用 plone.app.testing 和层进行测试。为dexterity和ATContentTypes添加更多测试。[saily]
进行大量重构,用更灵活的适配器替换转换器和函数。[saily]
通过从 zope.app.component 移除已弃用的导入,实现Plone 4.3兼容性。[saily]
添加一个新的 .gitignore 文件。[saily]
添加包含egg的buildout。将 *.txt 重命名为 *.rst 以直接支持github标记语言。[saily]
使用 IPrimaryFieldInfo 适配器进行字段检索,将Dexterity类型集成。这为 plone.app.contenttypes 带来了完整的功能。[saily]
更新文档。[saily]
1.3 (2011-05-31)
从JPEG切换到PNG。[dbrenneman]
1.2 (2010-12-7)
修复了如果在同一zope中的多个Plone实例上安装了pdfpeek,本地工具将发生冲突的问题。[dbrenneman]
修复了卸载配置文件,以便在卸载产品时删除本地持久性工具和图像注释。[dbrenneman]
1.0 (2010-5-27)
修复了jQuery UI。[reedobrien]
0.19 (2010-4-8)
修改转换,使用cStringIO而不是StringIO,希望使事情更加高效。[dbrenneman]
修改转换函数,使用 getFile 方法从对象中获取文件数据,因为这是 正确 的做法…[dbrenneman]
0.18 (2010-2-26)
修复了更改日志的reST渲染中的错误。[dbrenneman]
0.17 (2010-2-26)
添加了各种pdf文件以运行通过单元测试的ghostscript图像转换。[dbrenneman]
添加了针对低级ghostscript转换的单元测试。[dbrenneman]
重构转换代码,使类和方法名称更有意义。[dbrenneman]
更新README,包括配置时钟服务器的说明。[dbrenneman]
添加异步处理队列以处理ghostscript转换作业。[dbrenneman]
更新功能文档测试,使其在Plone 4和blobfile存储上运行。[dbrenneman]
更新功能文档测试以测试转换队列。[dbrenneman]
更新文档。[dbrenneman]
添加单元测试框架。[dbrenneman]
0.16 (2009-12-12)
错误修复版本。[dbrenneman]
0.15 (2009-12-12)
添加可配置的预览和缩略图大小。[claytron]
reST警察!修复文档,以便它们可能被正确渲染。[claytron]
0.13 (2009-11-12)
重构转换代码以更好地处理加密的PDF文件。[dbrenneman]
使转换代码更健壮。[dbrenneman]
添加了切换默认事件处理器开和关的功能。[dbrenneman]
0.12 (2009-10-25)
错误修复版本。[dbrenneman]
0.11 (2009-10-25)
错误修复版本。[dbrenneman]
0.10 (2009-10-25)
添加了检查PDF文件数据字符串末尾是否有EOF的代码,如果没有,则插入一个。修复了许多损坏的PDF文件。[dbrenneman]
0.9 (2009-10-13)
修复了转换代码中的另一个错误,允许与任何名为file的filefield一起工作。[dbrenneman]
0.8 (2009-10-13)
修复了转换代码中的错误,允许与任何名为file的filefield一起工作。[dbrenneman]
0.7 (2009-10-13)
简化了转换代码。[dbrenneman]
添加了通过configlet切换pdfpeek视口显示开和关的功能。[dbrenneman]
0.6 (2009-10-05)
错误修复版本。[dbrenneman]
0.5 (2009-10-05)
添加了控制面板configlet。[dbrenneman]
从卸载配置文件中删除了不需要的xml文件。[dbrenneman]
优化了转换。[dbrenneman]
添加了存储图像缩略图的功能,与使用PIL生成的图像一起。[dbrenneman]
将注释更改为将图像存储在字典中而不是列表中。[dbrenneman]
将事件处理器更改为监听所有基于AT的对象,而不是ATFile。[dbrenneman]
为configlet添加了自定义pdfpeek图标。[dbrenneman]
为允许轻松访问存储在IPDF对象上的OFS.Image.Image()对象添加了自定义遍历器。[dbrenneman]
修改了pdfpeek视口代码,使用自定义遍历器显示图像。[dbrenneman]
使用jQuery Tools添加了自定义可滚动画廊并带有工具提示到pdfpeek视图中。[dbrenneman]
0.4 (2009-10-01)
重构存储,使用OFS.Image.Image()对象而不是以字符串格式存储原始二进制数据。[dbrenneman]
重构事件处理对象变量名称。[dbrenneman]
从默认GS Ext.配置文件中移除了不必要的文件。[dbrenneman]
移除了不必要的javascript文件以及相关的图片和css。[dbrenneman]
0.3 - 2009-08-03
修复了多页pdf文件解析问题。[piv]
0.1 - 未发布
初始发布
项目详情
collective.pdfpeek-2.0.0.zip的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3a0f87962c35065dc6a670f1d4a2566839b469b2e562627c41142fe7f8c9b097 |
|
MD5 | f57ad997f8a5d655e7f771edd173db26 |
|
BLAKE2b-256 | d7fb2b3aa4ed6b6d0853dad7fe3e463b99006d2ea600fa7176ef5c32d1646d06 |