vue中pdf.js的使用之pdf显示、跳转指定页面及高亮关键词

 更新时间:2025年08月09日 10:42:09   作者:T-shmily  
pdf.js是由Mozilla基金会开发的一个纯JavaScript库,用于在Web浏览器中显示PDF文档,这篇文章主要介绍了vue中pdf.js的使用之pdf显示、跳转指定页面及高亮关键词的相关资料,需要的朋友可以参考下

一、下载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使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue中wangEditor5编辑器的基本使用

    vue中wangEditor5编辑器的基本使用

    wangEditor是一个轻量级web富文本编辑器,配置方便,使用简单,下面这篇文章主要给大家介绍了关于vue中wangEditor5编辑器的基本使用,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • Vue计算属性与监视属性实现方法详解

    Vue计算属性与监视属性实现方法详解

    最近在学习vue,学习中遇到了一些感觉挺重要的知识点,感觉有必要整理下来,这篇文章主要给大家介绍了关于Vue.js中计算属性、监视属性的相关资料,需要的朋友可以参考下
    2022-08-08
  • vue ajax 拦截原理与实现方法示例

    vue ajax 拦截原理与实现方法示例

    这篇文章主要介绍了vue ajax 拦截原理与实现方法,结合实例形式分析了vue.js基于ajax拦截实现无刷新登录的相关原理与操作技巧,需要的朋友可以参考下
    2019-11-11
  • Vue2中Element DatePicker组件设置默认日期及控制日期范围

    Vue2中Element DatePicker组件设置默认日期及控制日期范围

    后台项目想使用时间选择器选择一段时间进行数据筛选,所以下面这篇文章主要给大家介绍了关于Vue2中Element DatePicker组件设置默认日期及控制日期范围的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • vue.js基于v-for实现批量渲染 Json数组对象列表数据示例

    vue.js基于v-for实现批量渲染 Json数组对象列表数据示例

    这篇文章主要介绍了vue.js基于v-for实现批量渲染 Json数组对象列表数据,结合实例形式分析了vue.js使用v-for遍历json格式数据渲染列表相关操作技巧,需要的朋友可以参考下
    2019-08-08
  • Vue页面切换空白与刷新404问题的深度解析

    Vue页面切换空白与刷新404问题的深度解析

    在使用 Vue.js 开发单页应用 (SPA) 的过程中,开发者经常会遇到两个常见问题,页面切换时出现短暂的空白屏幕,以及刷新页面时返回 404 错误,下面我们就来讲讲这两个问题该如何将解决吧
    2025-05-05
  • Vue中使用setTimeout问题

    Vue中使用setTimeout问题

    这篇文章主要介绍了Vue中使用setTimeout问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • vue学习笔记之v-if和v-show的区别

    vue学习笔记之v-if和v-show的区别

    本篇文章主要介绍了vue学习笔记之v-if和v-show的区别,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Vue组件传参11种方式举例介绍

    Vue组件传参11种方式举例介绍

    这篇文章主要给大家介绍了关于Vue组件传参11种方式的相关资料,文中通过代码示例介绍的非常详细,对大家学习或者使用vue具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • 在vue2.0中引用element-ui组件库的方法

    在vue2.0中引用element-ui组件库的方法

    这篇文章主要介绍了在vue2.0中引用element-ui组件库,需要的朋友可以参考下
    2018-06-06

最新评论