【HTML/JS】Pdf.js使用教程

本文详细介绍如何使用PDF.js在网页上展示PDF文档,并实现跨浏览器兼容,包括IE在内的主流浏览器。文章分享了从获取源码、构建到实际部署的全过程,并提供了一个简单的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.th7.cn/web/js/201505/103416.shtml


pdf.js框架的魅力所在,为其为HTML5实现的,无需任何本地支持,而且对浏览器的兼容性也是比较好,要求只有一个:浏览器支持HTML5就好了!(不过对于低版本的IE,就只能节哀了!)

据说IE9以上是OK的,因为我本地是IE11,所以我只在IE11上测试过,是通过的(当然火狐,360,我也测了一下,是可以的)。

 

因为项目开发需要,在线展示PDF,而且要兼容IE,所以就选择了pdf.js,但是网上对他的教程很少,我花了一天时间才搞定,回头看了一下,也没有想象中那么困难,所以决定写一篇博客,以便大家参考!

以下是pdf.js相关的网址:

GitHub: https://github.com/mozilla/pdf.js/

 

上面这个网址,有pdf.js的基本简介,以及如何获取源码,之后如何进行构建!

 

但是他的获取源码使用:

 

$ git clone git://github.com/mozilla/pdf.js.git

 

 

 

构建使用:

 

$ node make generic

 

 

 

不知道在Windows7上该怎么用git、node(如果有知道的,可以告诉我下,在此谢过!),所以我就改用linux进行构建(期间有很多心酸历程,感觉都可以拍成电影了!!!比如说我用git获取源码时,系统提示我git没有安装,我用node时,提示我ShellJs没有安装,安装ShellJS,他告诉我要使用npm,意料之中,npm我也没有安装...),其实,我们使用pdf.js,最终只需要构建后的内容,大家可以通过这里进行下载:

http://yunpan.cn/cwmjKF6jKY6Kb  访问密码 c14a

 

构建后的目录结构为:

 

有了构建后的build内容,我们就可以做一个简单的测试,把generic拷贝到Tomcat的webapps中

启动Tomcat后,就可以通过:

http://localhost:8080/generic/web/viewer.html

进行访问!可以看到一个很帅气的界面:

generic/web/viewer.html主要是渲染pdf阅读器的样式,而generic/web/viewer.js则是指定打开的pdf文件(当然还有其他功能,不过这些都不是我们关心的),我们看位于generic/web/viewer.js的一段代码:

我们可以看到,他默认打开generic/web/compressed.tracemonkey-pldi-09.pdf文件,再来看下面这段代码:

这就告诉我们,可以通过传递file形参来动态指定打开的pdf文件!如:

http://localhost:8080/generic/web/viewer.html?file=qbs.pdf

 

 

下面我就介绍下,具体嵌入项目中是如何运用的!

可以把generic中的内容作为第三方插件进行使用,在项目中可以像如下存放:

然后页面可以使用<iframe>标签来加载pdf

1 <iframe src="<c:url value="/resources/plugin/pdfJs/generic/web/viewer.html" />?file=<c:url value="/publicity/displayPDF.do" />" width="100%" height="800"></iframe>

效果图,如下:

实质就是我们直接访问generic/web/viewer.html,然后为其指定一个file形参,用于指定打开的pdf文件!我上面使用的流的方式进行指定的。

 

 

 

至此,pdf.js插件的介绍就告一段落了,第一次写博客,如有不到之处,希望大家可以不吝赐教,谢谢!

在此感谢pdf.js的两位作者!(真心佩服这些外国大师,2个人可以写一个这么好的框架,而且还是开源的!)。

感谢hyhbyl先生!他的文章指引了我!附网址一份:

http://blog.youkuaiyun.com/hyhbyl/article/details/20994945





使用 `pdfjs-dist` 时,如果需要兼容较旧版本的浏览器(例如 Chrome 119 以下),官方提供的默认构建可能会因使用了较新的 JavaScript 特性(如 `Promise.withResolvers`)而导致运行时报错。为了解决这个问题,可以通过引入 `legacy` 构建版本来实现更好的兼容性。 ### 安装与引入 pdfjs-dist 的 legacy 版本中的 `pdf.min.js` 要安装并使用 `pdfjs-dist` 中的 `legacy` 版本及其 `pdf.min.js` 文件,可以通过 npm 或 yarn 进行安装,并在代码中指定路径到 `legacy/build/pdf.min.js` 文件: ```bash npm install pdfjs-dist ``` 安装完成后,可以在项目中直接引入 `legacy` 构建版本的 `pdf.min.js` 文件: ```javascript import * as pdfjsLib from 'pdfjs-dist/legacy/build/pdf.min.js'; ``` 此外,为了确保 PDF 渲染器正常工作,还需要设置 worker 文件的路径。可以使用如下方式引入: ```javascript import workerSrc from 'pdfjs-dist/legacy/build/pdf.worker.entry'; pdfjsLib.GlobalWorkerOptions.workerSrc = workerSrc; ``` 这种方式能够有效避免因浏览器不支持新语法而引发的错误,同时保持对旧版浏览器的良好兼容性[^2]。 ### 使用 CDN 引入(备选方案) 如果希望避免通过 npm 安装,也可以选择使用 CDN 链接引入 `pdfjs-dist` 的 `legacy` 构建版本。但需要注意的是,CDN 加载可能在某些网络环境下存在超时风险: ```html <script src="https://unpkg.com/pdfjs-dist@legacy/legacy/build/pdf.min.js"></script> ``` 然后在全局对象中访问 `window.pdfjsLib` 来获取库实例,并手动设置 worker 路径: ```javascript window.pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://unpkg.com/pdfjs-dist@legacy/legacy/build/pdf.worker.min.js'; ``` ### 手动下载并本地引用 若 CDN 不稳定或希望完全控制依赖文件,可以选择将 `pdfjs-dist` 的 `legacy` 构建版本手动下载至本地目录。具体操作是将 `pdf.min.js` 和 `pdf.worker.min.js` 文件放入项目的静态资源目录,并在代码中进行引用: ```javascript const pdfjsLib = require("path/to/local/pdfjs-dist/legacy/build/pdf.min.js"); import workerSrc from "path/to/local/pdfjs-dist/legacy/build/pdf.worker.entry"; pdfjsLib.GlobalWorkerOptions.workerSrc = workerSrc; ``` 此方法虽然增加了维护成本,但在某些特定部署环境中可能是必要的选择[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值