vue中pdf.js的使用之pdf显示、跳转指定页面及高亮关键词
作者:T-shmily
一、下载pdf.js
https://github.com/mozilla/pdf.js
里面有很多的版本, 高版本的可能浏览器不兼容或者还要考虑手机上面的,最好下载低版本的,这里是v2.16.105-dist版本
二、引入到本地的项目中
在本地static里面创建文件夹pdfjs,然后将下载包里面的文件放进pdfjs。
pdf.js包的目录结构
三、实现预览pdf
1、本地的PDF文件,直接在浏览器地址栏输入打开
利用 web里面的viewer.html就可以直接打开pdf,里面有默认的一个pdf文档。
直接在浏览器地址栏打开pdf: 开发地址 + 存放viewer.html文件夹地址
比如按照以上步骤方法为 http://192.168.0.109:8081/static/pdfjs/web/viewer.html
只要能打开没有报错就没有什么问题
2、实现自己的pdf预览包括后端返回的pdf地址, 这里是创建组件利用iframe显示pdf文件
<template> <div> <iframe id="myIframe" :src="iframeSrc" width="100%" height="100%"></iframe> </div> </template> <script> export default { components: {}, data() { return { iframeSrc: "../../../static/pdfjs/web/viewer.html", }; }, }
只需要在上面的连接上加上一个?file=your-pdf-url
就行了:(这里是组件注意viewer.html存放的位置)
比如:我的显示地址是:
this.iframeSrc='../../../static/pdfjs/web/viewer.html?file='+pdfUrl
解决报错:
出现这个错误就是跨域的问题,找到pdfjs/web/viewer.js文件,注销跨域代码就可以
// if (fileOrigin !== viewerOrigin) {
// throw new Error("file origin does not match viewer's");
// }
四、跳转到指定页面
根据pdf.js内置函数,可直接修改当前页面,没有太大的跳动,利用Iframe.
最好在pdf或iframe加载完成之后跳转页面
方法一:
const pdfFrame = document.getElementById('myIframe').contentWindow pdfFrame.PDFViewerApplication.page = 10
方法二:
可以直接在地址栏上最后拼接参数#page=6
iframeSrc: "../../../static/pdfjs2.16.105/web/viewer.html?#page=6",
五、利用pdf里面的find查找关键词并可以监听updatefindcontrolstate统计个数
search() { const _iframe = document.getElementById('myIframe').contentWindow _iframe.PDFViewerApplication.eventBus.dispatch("find", { source: "", type: "", query: "政府组织", phraseSearch: "", caseSensitive: false, entireWord: false, highlightAll: true, //是否所有高亮 findPrevious: true, matchDiacritics: true },); // 利用updatefindcontrolstate统计每页搜索条数 _iframe.PDFViewerApplication.eventBus.on('updatefindcontrolstate', (e) => { console.log(e) console.log(e.source._pageMatches);//这里面是一个数组, }) },
六、修改页面大小为实际大小
修改viewer.js页面的代码
const DEFAULT_SCALE_VALUE = "auto" // 修改成 const DEFAULT_SCALE_VALUE = "page-actual" //实际大小
修改viewer.html页面的代码
找到id="scaleSelectContainer" 下面的id="pageActualOption",如果有selected,就修改成selected="selected",没有就不改。
七、每次加载pdf都是在第一页
修改viewer.js页面的代码
找到 setInitialView函数 在里面添加一句代码:
this.pdfViewer.currentPageNumber=1;
八、修改pdf滚动方式为横向
修改viewer.html页面的代码
找到id="scrollModeButtons" 下面的id="scrollWrapped", 在这个button上面的class上面添加一个toggled 同时修改 aria-checked="true"
修改viewer.js页面的代码
this._scrollMode = _ui_utils.ScrollMode.VERTICAL;
修改成
this._scrollMode = _ui_utils.ScrollMode.WRAPPED;
九、清除pdf缓存
修改viewer.js页面的代码
async _writeToStorage() { const databaseStr = JSON.stringify(this.database); // 清除pdf缓存 注销这句代码 // localStorage.setItem("pdfjs.history", databaseStr); } // 不起作用就在注释这句代码, async _writeToStorage(prefObj) { // localStorage.setItem("pdfjs.preferences", JSON.stringify(prefObj)); }
十、pdf.js实现分片加载
分片加载就是pdf先将前面内容显示出来,后面的在下载,用户是无感知的。体验提升。
第一:web服务器必须要能支持,分片下载。nginx 1.09 版本已上默认的就支持了
第二:浏览器支持,谷歌和火狐都支持,火狐的分片逻辑有问题。
修改pdf.js页面的代码
// rangeChunkSize : 就是分块大小,默认:65536(64k)。修改数值就可以
比如65536*5
const DEFAULT_RANGE_CHUNK_SIZE = 65536;
十一、后端返回的是流的形式,转成可用的本地的pdf文件的链接地址
getObjectURL(file) { let url = null if (window.createObjectURL !== undefined) { // basic url = window.createObjectURL(file) } else if (window.webkitURL !== undefined) { // webkit or chrome try { url = window.webkitURL.createObjectURL(file) } catch (error) { console.log(error) } } else if (window.URL !== undefined) { // mozilla(firefox) try { url = window.URL.createObjectURL(file) } catch (error) { console.log(error) } } return url }, 你的pdfUrl=getObjectURL(file)
也可以利用encodeURIComponent(pdfInfoUrl)
十二、修改默认语言为简体中文
修改viewer.js页面的代码
defaultOptions.locale = { // value: navigator.language || "en-US", value: "zh-Cn", kind: OptionKind.VIEWER };
十三、修改主题色
修改viewer.js页面的代码
const ViewerCssTheme = { AUTOMATIC: 0, //跟随浏览器颜色 LIGHT: 1,//亮色 DARK: 2,//暗色 };
总结
到此这篇关于vue中pdf.js的使用之pdf显示、跳转指定页面及高亮关键词的文章就介绍到这了,更多相关vue中pdf.js使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!