最近准备对项目中的一个在线PDF查看器组件进行重构下,这个组件最开始用的浏览器内置的pdf查看的功能实现的,在使用中,遇到了很多不大容易解决的问题:

  1. 不同的浏览器样式不一样
  2. 禁止默认查看器中自带的下载,打印工具栏按钮
  3. 支持不同比例的初始打开方式
  4. 定位到指定页

对于这些问题,最直接想到的方式是使用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查看器了。如果后续有更多的需求,再继续更新此文章。

posted on 2022-04-03 19:35  天方  阅读(2981)  评论(0编辑  收藏  举报