最近,一位客户要我在公司的Drupal网站上添加一个新功能:在浏览器中显示PDF文件。当我浏览drupal.org上的选项时,我意识到这是一个完美的机会来记录我的实际决策过程,因为我选择了一个新模块。我总是说要明智地选择模块,但现在你可以看到我认为这在现实生活中如何运作。
定义你想要的东西
第一步是定义你想要的东西。在我的情况下,我想:
- 能够在Web浏览器中查看PDF文件,与此示例类似。客户端将上传公司简报的PDF文件,访问者可以轻松阅读。
- 该站点是Drupal 7,因此该模块需要匹配该主要版本。 (Drupal 7已经出现了一段时间了,所以如果模块开发人员尚未推出Drupal 7版本,他们可能不会。)
- 虽然客户没有说明这一点,但我也想避免依赖第三方服务。对于视频,我很乐意将内容发布到YouTube或Vimeo,然后将其嵌入Drupal网站,但对于PDF,我认为可能的额外曝光不会超过潜在的麻烦,破损和费用。但是,如果它是唯一的选择,我对第三方服务持开放态度。
- 尽管我希望避免第三方服务,但我知道我的选择可能需要第三方Javascript 图书馆 。虽然这会为将来的升级增加额外的一步,但我通常会更好地运行自己的库副本而不是依赖第三方服务。
- 我希望尽可能保持模块的轻量级和具体性。我不想介入一些处理或组织媒体文件的全新方式。我想要更像Colorbox的东西,它可以放大图像以便更好地观看,但仍然完全独立于您选择管理图像文件的方式。我有一种预感,这个库将是pdf.js,但我对其他可能性持开放态度。
- 像往常一样,我想遵循选择Drupal模块的一般准则。基本上,选择一个已经被几千人(如果可能的话)使用的模块一段时间,具有最少的依赖性,这似乎是由积极的开发人员维护的,他们计划继续支持项目未来并且不会需要许可费。
在Drupal.org上搜索
考虑到这些目标,下一步是在Drupal.org上进行简单搜索。是时候跳进模块优点的球坑了。
PDF模块的“比较”页面
我的第一站是(或应该是),这个页面:PDF查看器模块的比较。 Drupal.org拥有优秀的文档页面传统,概述了同一空间中各种模块的优缺点。有一个比较页面的中央列表,但它们也遍布整个网站。
PDF比较页面包含四个PDF查看器模块。我将在这里介绍它们,以及我从搜索中找到的其他几个。我将从我决定跳过的候选人开始。
现在让我们深入研究这些模块为什么(或者大部分没有)为这个项目工作的具体细节。
文件查看器
File Viewer使用Internet Archive BookReader,这引起了我的兴趣,因为我是一个Internet Archive junkie。每次去那里,我都能感受到恐惧的痒痒,在我能从以太中拔出的书山上感到压力。
话虽这么说,示范点对我来说有点难看。我可能会忍受它,但我怀疑我的客户会在什么时候pdf.js
看起来更时尚。
另外,在第二次看项目页面时,我看到了顶部的大胆声明:该模块已正式移至PDF模块。很公平。安装少于400次,与更受欢迎的PDF模块(我们将在稍后介绍)合并,似乎是一个很好的举措。永远不要下载已合并/移动/放弃的模块。
Google Viewer文件格式化程序
谷歌查看器文件格式化器就是这样的:一种使用谷歌文档在您的网页中嵌入文件显示的方法。虽然我喜欢Google Docs的多功能性,但我的目标之一是保持独立于任何第三方服务。
此外,该模块的安装次数少于100次。
Ajax文档查看器
虽然“AJAX”是一个通用的Javascript术语,但Ajax Document Viewer却依赖于特定的第三方服务。只有大约100个安装。继续…
烫伤PDF
Scald PDF只有40个安装,但我不得不看一看,因为它显然是一个名为(是)Scald的大项目的一部分。正如Scald项目页面解释:“ Scald是如何处理的创新媒体原子 在Drupal。“
这句话引发了两个巨大的危险信号:“创新拍摄”和“媒体”这个词与“Atom”配对。 “原子”显然是“事物”的改变用语,这使它成为一个红旗。 Drupal喜欢这些空盒子的词: 节点 , 实体 , 特征 ……这个词越普遍,变化就越大。
当我向下滚动时,我的怀疑得到了证实。我读到了兴奋的说法,即Scald将如何彻底改变我在网站上处理媒体的方式。
现在,事实是Drupal的媒体处理可以使用一些重塑。斯卡尔德并不是这个领域唯一雄心勃勃的项目。然而,到目前为止,安装量不到1000次,我不想进入底层。
当然,到明年这个时候,斯卡德可能会成为下一个观点。那会摇滚。但它也可能是放弃软件,有一小段破碎的网站留下来哭泣。
就目前而言,我希望坚持一个不那么雄心勃勃和危险的解决方案。请只显示PDF。这就是我所要求的。
暗箱
Shadowbox让我感到惊讶:它声称是显示各种媒体的单一解决方案,从PDF到图像再到视频。这并不像斯卡尔德那样彻底,因为它只关注 显示 媒体没有引入像“媒体原子”这样的全新概念。但正如我所提到的,我已经喜欢Colorbox了。我不想重新考虑这个决定。
但是,我确实注意到(带有内呻吟声)16,000 安装,Shadowbox可能是同一空间中更强大的替代品。一世 有 去看一看。
Shadowbox Drupal模块基本上是一个Javascript库,Shadowbox.js的桥梁,所以我检查了图书馆的网站。在那里,我发现了继续前进的两个理由:
- 图书馆需要许可费才能用于商业用途。费用足够合理,但我尽量避免使用非免费的开源软件。
- 仔细搜索FAQ后发现,与Drupal模块页面上的描述相反,PDF是 不 Shadowbox库100%支持。哎呀。我查了一下好东西。
两个竞争者:“PDF”和“PDF阅读器”
在消除了剩下的部分之后,我现在谈到了两个明显的竞争者:PDF和PDF阅读器
这两个项目有着重要的相似之处:
- 两者都有近3,000个安装,远远超过替代品(Shadowbox除外)。
- 两者都使用相同的外部Javascript库,
pdf.js
.
差异呢?
PDF阅读器 还可以选择Google Docs集成。在这种特殊情况下,我认为我的客户可能会喜欢这样,所以我喜欢有这个选项。
与此同时, PDF 被标记为寻求共同维护者
。这可能是开发人员很快就会放弃该项目的一个迹象,但另一方面,最近的提交是一周前,所以至少开发人员仍然活跃。
另一方面, PDF阅读器 被标记为积极维护
,但最近的提交是一年前。
没有明确的赢家,我决定对它们进行测试。
测试竞争者
我在我的实际网站的副本上测试了这两个模块。 (无论模块出现多么坚固无害,都不要先在现场试用。你可以打破整个网站。)
我偏向于 PDF阅读器 ,因为它似乎有更多的选择(比如Google Docs) PDF 。所以我决定尝试一下 PDF 首先,要让它脱离困境。
PDF失败:需要编译?
但是,当我安装 PDF 并阅读的README.txt
,我发现了一个我见过但在项目页面上被忽略的问题。出于某种原因,这个模块似乎要求你编译pdf.js
手动。虽然项目页面表明这不一定是必需的,的README.txt
建议是的。
以来 PDF阅读器 会使用完全相同的库而不需要这一步,我决定先尝试一下。如果它不起作用,我总是可以回去 PDF 并尝试手动编译pdf.js
.
PDF阅读器:成功!有点。
所以,最后,我试过了 PDF阅读器 。该模块提供了一个用于显示的新小部件文件
领域。您将文件字段添加到所需的内容类型并将窗口小部件类型设置为PDF阅读器
。然后,您创建此类型的节点并上载您的PDF。 PDF显示嵌入在页面上的“框”中。
您可以通过再次编辑内容类型并更改字段的显示设置来尝试不同的显示选项。
我发现每个显示选项都有利有弊:
- 该谷歌文档 读者在嵌入时工作得很好,但是当我点击它进入全屏时,我在Google文档页面上结束,该页面对我的速率限制已被超出表示道歉。哎呀。如果我将模块连接到付费的Google Apps帐户,这可能会更可靠,但我没有理由发现,因为我很确定我的客户不喜欢显示器。
- 该pdf.js 选项在Firefox和Chrome上运行得非常好。但是当我启动Internet Explorer时,该框显示为空。显然,这是一个问题
pdf.js
本身,而不是 PDF阅读器 模块。考虑到这一点,我想我应该期待这一点pdf.js
由Mozilla开发,Internet Explorer本身就是。尽管如此,我还是没有想到要证实那件事我很失望pdf.js
首先在所有浏览器中可靠地工作。 - 该嵌 选项是最可靠的。这实际上是在网页上的一个框中运行Adobe Reader。我的Firefox仍然喜欢运行
pdf.js
,但我认为这是一个浏览器设置。无论哪种方式,只要访问者拥有Firefox或PDF阅读器(如Adobe Reader),PDF就会显示。
因此,最后,我的解决方案是使用 PDF阅读器 随着嵌 显示选项。此选项允许我将PDF附加到Drupal节点,并可靠地将其显示在Drupal网页上。
不幸的是,有时“可靠”是不够的。在完成所有这些搜索之后,我不得不考虑第三方服务。