最近准备对项目中的一个在线PDF查看器组件进行重构下,这个组件最开始用的浏览器内置的pdf查看的功能实现的,在使用中,遇到了很多不大容易解决的问题:
-
不同的浏览器样式不一样
-
禁止默认查看器中自带的下载,打印工具栏按钮
-
支持不同比例的初始打开方式
-
定位到指定页
对于这些问题,最直接想到的方式是使用pdfjs自绘制来实现,试了一下后,发现工作量还不小。同时,发现官方自带的实例就有一个非常完整功能的pdf查看器Demo。
官方的这个实例基本上该有的都有了,所以我就不准备重复造轮子了,就在官方的这个基础上改了下。本文简单的记录了下探索过程。
程序包下载
首先可以从它官方的发布页中下载最新的发布包,解压后可以看到这样的文件结构。
其中build\pdf.js就是pdfjs的渲染内核,web文件夹下则是默认的查看器,它依赖于build\pdf.js渲染,如果我们完全是自己制作查看器的话是可以不需要web文件夹的,由于这里我是基于默认的查看器修改的,所以一并带了进来。
将pdf.js的发布包直接作为静态页面挂到站点上,就可以从viewer.html中查看到和官方几乎一样的界面了。
语言包加载
和官方示例最大的区别是:我们的查看器不是中文的,分析下可以看出,资源文件加载失败了。
查看了下本地文件是有的,那么加载失败的原因应该就是.properties这个特殊的后缀被站点给拒了。解决方案也比较简单,把这种类型的扩展名放开了即可。
再次加载即可看到中文的界面了。
文件url的传入
作为一个查看器,最基础的需求是能动态加载不同的pdf文件,查看一下,这个功能默认以及支持了,通过file参数传入即可。官方示例为:
https://mozilla.github.io/pdf.js/web/viewer.html?file=compressed.tracemonkey-pldi-09.pdf
默认控制参数
默认控制参数官方文档中也有提及。通过#的锚点方式传入,示例为:#page=2&zoom=200
具体支持的参数为:
-
page: 页码,例: page=2
-
zoom: 缩放比例. 例: zoom=200 。此参数还支持几个特殊的值:
-
auto:自动缩放
-
page-actual:实际大小
-
page-fit:适合页面
-
page-width:适合宽度
-
-
nameddest: 书签,没用过
-
pagemode: 侧边栏状态,支持范围为:none thumbs bookmarks attachments
另外,查看器右侧中有一个按钮,点击它即可看到当前位置参数,可以查看当前的zoom,page参数,方便我们参考。
隐藏工具栏
官方提供的定制并不多,一般我们日常用到的更多的定制是隐藏默认工具栏上的一些按钮,不过pdfjs viewer是一个html文件,定制起来是非常容易的。
首先用F12工具获取其html代码位置,将样式设为隐藏即可。(不要直接删了,后面的js依赖着这些工具栏的)
这种方式非常原始了,后续有时间的话把代码扩展下,做成参数集成到url中更加方便些。
小结
到此为止,我的需求基本上都能满足,并不需要深入到pdfjs的核心就能快速的实现一个功能强大的pdf查看器了。如果后续有更多的需求,再继续更新此文章。