跳转到主要内容

一个基于ATFile对象的Plone 4产品,用于生成存储在其上的PDF文件的图像缩略预览。

项目描述

https://travis-ci.org/collective/collective.pdfpeek.png?branch=master https://coveralls.io/repos/collective/collective.pdfpeek/badge.png

简介

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不再官方支持。

代码、问题、评论

待办事项

  • 实现一个可以异步处理文件(一次处理多个文件)的处理队列模型(应该使用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 (671.5 kB 查看哈希值)

上传时间 源代码

支持者: