移动端PDF预览
微信内置浏览器预览pdf文件,不同操作系统的表现不同:
-
IPhone:基本可以预览各式各样的文件格式。微信自带的预览功能(**不能分享,**页面是微信自己的,改不了),可以直接预览PDF文件。如果图文复杂的word,微信预览也会有点错乱。
-
Android:打开
PDF
文件,会跳转到浏览器下载页面。
解决方案
通过
PDF.JS
来实现PDF文件的在线预览(无需下载其他插件)。
其原理是将PDF文件转换成canvas/svg,在html页面上展示
。
即自己开发一个页面,调用PDF.JS提供的接口,以PDF文件的地址为参数,接收接口返回的canvas或svg数据。这种自己开发的页面,还可以自行增加微信转发功能。
**word文件的预览:**服务端将word转成PDF文件,当然,也可以直接转换成图片。
前端我暂时没找到好的将word转换成PDF办法。服务端用linux转的话,如果图文比较复杂,会出现图文错乱的问题。
可以通过购买Window系统的服务器来转换(坑),也可以在阿里云市场购买服务(👀不太推荐,还是有点小贵的)
pdf.js
是基于HTML5技术构建的,用于展示可移植文档格式的文件(PDF),它可以在现代浏览器中使用且无需安装任何第三方插件。
有以下两种实现方法:
script标签引入方式
使用npm的方式
安装:
npm install pdfjs-dist -S
这两个文件包含了获取、解析和展示PDF文档的方法,但是解析和渲染PDF需要较长的时间,可能会阻塞其它JS代码的运行。
为解决该问题,pdf.js依赖了HTML5引入的 Web Workers ——通过从主线程中移除大量CPU操作(如解析和渲染)来提升性能。
PDF.js
的API都会返回一个Promise,使得我们可以优雅的处理异步操作。数据返回后的渲染方法,与上方
renderPageAsync
方法类似。
pdfh5.js
是基于
pdf.js
和
jQuery
,在移动端预览PDF的插件。
支持手势捏合缩放、支持
canvas、svg
两种渲染模式、支持
ajax、fetch
两种请求方式、支持懒加载。
web/h5/移动端PDF预览手势缩放插件。支持
canvas、svg
两种渲染模式,支持
ajax、fetch
两种请求方式。支持懒加载。
有以下两种实现方法:
script标签引入方式
需下载pdfh5项目下所有文件,包css、js、bcmap等。
使用npm的方式
安装:
npm install pdfh5 -S
手机兼容性
机型 | 编号 | 系统版本 | 备注 |
---|---|---|---|
lenovo(白色) |
08-201600-021 |
4.3 |
异常。页面一直在加载状态 |
oppo(深蓝) |
08-201600-034 |
4.4.4 |
正常 |
vivo X27 |
- |
9 |
正常 |
iphone 8 |
- |
12.4 |
正常 |
小米 note3 |
08-201703-191 |
5.1.1 |
正常 |
注意问题
跨域问题
-
本地开发:webpack中添加代理
-
修改服务器(nginx)配置
-
后端提供api,将pdf文件转成byte[],然后用
pdf.js
解析data
版本问题
引入1.8.**版本,采用svg模式,部分手机会(如:小米 note3)有bug。
引用最新pdf.js版本
乱码问题
pdf文件因字体、编码的问题,可能出会现乱码问题,需引入一些 资源文件 。