pdf.js引入方式及初始化配置

2023-11-17

官方下载地址:Getting StartedA general-purpose, web standards-based platform for parsing and rendering PDFs.http://mozilla.github.io/pdf.js/getting_started/#download

 下载后解压缩文件,解压后文件目录如下:

 将整个文件夹拷贝到项目public目录下的plugin文件夹下:

 此时已经将pdf.js完全引入到项目中,然后在使用该功能的页面中写入:

<iframe v-if="dialogVisible" :src="pdfUrl" width="100%" height="100%"></iframe>

其中通过v-if对pdf预览窗口进行重新渲染,如果没有v-if,则第二次打开同一pdf文件时,会出现pdf文件不显示的问题;

src绑定的文件地址如下:

let pdf = this.currentItem.fileUrl; 
//this.currentItem.fileUrl为后端返回的pdf文件地址
this.pdfUrl = 'plugin/pdf/web/viewer.html?file='+ pdf;

以上,就完成了pdf文件的显示功能,示例图如下:

 顶部是工具栏部分,有翻页、缩放、下载、打印,以及滚动方式等等。但有些时候,我们不需要显示这么多工具,并且还可能需要设置一些初始值,比如打开pdf后,默认显示第一页,缩放比例为“实际大小”,滚动方式为“平铺滚动”,这样我们就需要通过修改pdf.js的源码来实现。

 在plugin/pdf/web文件夹下,找到viewer.html文件,该文件中可以修改代码,隐藏工具栏中的部分内容。比如想要隐藏工具栏中右侧部分的所有工具,那么就找到

<div id="toolbarViewerRight">

设置style, style="display: none;"

注意:不能直接注释掉这部分代码,否则js会找不到该id,会报错;

此外的重点就是,如果设置我们想要的初始值,这里有两个文件需要修改,view.html和view.js

如我们要修改默认的缩放比例为“实际大小”,就要在view.html中找到

<span id="scaleSelectContainer" class="dropdownToolbarButton">
                  <select id="scaleSelect" title="Zoom" tabindex="23" data-l10n-id="zoom">
                    <option id="pageAutoOption" title="" value="auto" data-l10n-id="page_scale_auto" style="display: none;">Automatic Zoom</option>
                    <option id="pageActualOption" title="" value="page-actual" selected="selected" data-l10n-id="page_scale_actual">Actual Size</option>
                    <option id="pageFitOption" title="" value="page-fit" data-l10n-id="page_scale_fit" style="display: none;">Page Fit</option>
                    <option id="pageWidthOption" title="" value="page-width" data-l10n-id="page_scale_width" style="display: none;">Page Width</option>
                    <option id="customScaleOption" title="" value="custom" disabled="disabled" hidden="true"></option>
                    <option title="" value="0.5" data-l10n-id="page_scale_percent" data-l10n-args='{ "scale": 50 }'>50%</option>
                    <option title="" value="0.75" data-l10n-id="page_scale_percent" data-l10n-args='{ "scale": 75 }'>75%</option>
                    <option title="" value="1" data-l10n-id="page_scale_percent" data-l10n-args='{ "scale": 100 }'>100%</option>
                    <option title="" value="1.25" data-l10n-id="page_scale_percent" data-l10n-args='{ "scale": 125 }'>125%</option>
                    <option title="" value="1.5" data-l10n-id="page_scale_percent" data-l10n-args='{ "scale": 150 }'>150%</option>
                    <option title="" value="2" data-l10n-id="page_scale_percent" data-l10n-args='{ "scale": 200 }'>200%</option>
                    <option title="" value="3" data-l10n-id="page_scale_percent" data-l10n-args='{ "scale": 300 }'>300%</option>
                    <option title="" value="4" data-l10n-id="page_scale_percent" data-l10n-args='{ "scale": 400 }'>400%</option>
                  </select>
                </span>

设置其中id为pageActualOption的option的selected="selected",然后,还要在view.js文件中找到 

const DEFAULT_SCALE_VALUE = "auto";

 将其值设置为:

const DEFAULT_SCALE_VALUE = "page-actual"

这样,再次打开pdf文件时,初始的缩放就变为我们设置的“实际大小”了。

如果要修改页面的滚动方式,可以在view.html中找到这段代码:

<div id="scrollModeButtons" role="radiogroup">
              <button id="scrollPage" class="secondaryToolbarButton" title="Use Page Scrolling" tabindex="62" data-l10n-id="scroll_page" role="radio" aria-checked="false">
                <span data-l10n-id="scroll_page_label">Page Scrolling</span>
              </button>
              <button id="scrollVertical" class="secondaryToolbarButton" title="Use Vertical Scrolling" tabindex="63" data-l10n-id="scroll_vertical" role="radio" aria-checked="false">
                <span data-l10n-id="scroll_vertical_label" >Vertical Scrolling</span>
              </button>
              <button id="scrollHorizontal" class="secondaryToolbarButton" title="Use Horizontal Scrolling" tabindex="64" data-l10n-id="scroll_horizontal" role="radio" aria-checked="false">
                <span data-l10n-id="scroll_horizontal_label">Horizontal Scrolling</span>
              </button>
              <button id="scrollWrapped" class="secondaryToolbarButton toggled" title="Use Wrapped Scrolling" tabindex="65" data-l10n-id="scroll_wrapped" role="radio" aria-checked="true">
                <span data-l10n-id="scroll_wrapped_label">Wrapped Scrolling</span>
              </button>
            </div>

上面代码中,是将滚动方式设置为“平铺滚动”,即

<button id="scrollWrapped" class="secondaryToolbarButton toggled" title="Use Wrapped Scrolling" tabindex="65" data-l10n-id="scroll_wrapped" role="radio" aria-checked="true">
                <span data-l10n-id="scroll_wrapped_label">Wrapped Scrolling</span>
              </button>

上面代码与其它的区别是,class中多了一个toggled,同时后面aria-checked的值为true。

接下来修改view.js中的代码,找到:

this._scrollMode = _ui_utils.ScrollMode.VERTICAL;

将其修改为:

this._scrollMode = _ui_utils.ScrollMode.WRAPPED;

经过以上两步修改后,打开pdf文件后就会默认以“平铺滚动”方式展示了。

当一个pdf文件被访问后,再次打开时,页码会定位到上一次访问到的页码,有些场景下可能需要每次打开都显示第一页的内容,这样就需要设置打开页码始终为第一页,修改以下部分代码:

找到setInitialView函数,在其中增加一句代码:

setInitialView(storedHash, {
    rotation,
    sidebarView,
    scrollMode,
    spreadMode
  } = {}) {
    const setRotation = angle => {
      if ((0, _ui_utils.isValidRotation)(angle)) {
        this.pdfViewer.pagesRotation = angle;
      }
    };

    const setViewerModes = (scroll, spread) => {
      if ((0, _ui_utils.isValidScrollMode)(scroll)) {
        this.pdfViewer.scrollMode = scroll;
      }

      if ((0, _ui_utils.isValidSpreadMode)(spread)) {
        this.pdfViewer.spreadMode = spread;
      }
    };

    this.isInitialViewSet = true;
    this.pdfSidebar.setInitialView(sidebarView);
    setViewerModes(scrollMode, spreadMode);

    if (this.initialBookmark) {
      setRotation(this.initialRotation);
      delete this.initialRotation;
      this.pdfLinkService.setHash(this.initialBookmark);
      this.initialBookmark = null;
    } else if (storedHash) {
      setRotation(rotation);
      this.pdfLinkService.setHash(storedHash);
    }
    this.pdfViewer.currentPageNumber = 1; //设置初始页码为1,避免第二次打开时仍为上一次显示的页码;
    this.toolbar.setPageNumber(this.pdfViewer.currentPageNumber, this.pdfViewer.currentPageLabel);
    this.secondaryToolbar.setPageNumber(this.pdfViewer.currentPageNumber);

    if (!this.pdfViewer.currentScaleValue) {
      this.pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;
    }
  },

其中:this.pdfViewer.currentPageNumber = 1;这句代码就是设置初始页码为1的代码。

以上,结束,撒花,*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pdf.js引入方式及初始化配置 的相关文章

  • JVM调优参数归纳汇总

    GC通常参数 Xss 每个线程的栈大小 Xms 初始堆大小 默认物理内存的1 64 Xmx 最大堆大小 默认物理内存的1 4 Xmn 新生代大小 XX ParallelGCThreads 指定GC工作的线程数量 XX MinHeapSize

随机推荐

  • 查询局域网电脑的IP,端口号,MAC地址

    网上看到很多都是使用nmap工具 这个工具我没有使用过 我自己实现nmap工具的功能 首先我们查询局域网内有哪些电脑是alive的 下面我写了一个脚本 ping sh 这样局域网内哪些电脑的ip是alive的就可以知道 下面来查看对于IP的
  • leetcode--55--跳跃游戏

    题目描述 给定一个非负整数数组 你最初位于数组的第一个位置 数组中的每个元素代表你在该位置可以跳跃的 最大长度 判断你是否能够到达最后一个位置 示例 1 输入 2 3 1 1 4 输出 true 解释 我们可以先跳 1 步 从位置 0 到达
  • 【ChatGPT】基于WSL+Docker的ChatGPT PLUS共享服务部署

    最近买了ChatGPT PLUS服务 想通过web服务将它共享给其他人使用 搜了一下目前GitHub上比较热门的服务有 ChatGPT Next Web chatgpt web share 其中chatgpt web share支持API和
  • 【uni-app】css 关于 calc()函数计算无效

    计算符 注 计算 符前后都需要空格 否则计算无效
  • 华为OD机试真题 Java 实现【最多提取子串数目】【2023Q1 100分】

    一 题目描述 给定由 a z 26 个英文小写字母组成的字符串 A和 B 其中A中可能存在重复字母 B 中不会存在重复字母 现从字符串 A 中按规则挑选一些字母 可以组成字符串 B 挑选规则如下 同一个位置的字母只能被挑选一次 被挑选字母的
  • ue4加载本地版本_【虚幻4】创建本地数据库

    简介 这里我们主要通过使用Data table实现本地数据库 Data table可以用来保存一些用户配置 或者常用变量 或者用来实时更新外部表格数据到虚幻4中 一 创建Data table 1 首先创建Structure结构 这里我已经创
  • 我用什么写Python?

    通常来说 每个程序员都有自己趁手的兵器 代码编辑器 你要是让他换个开发环境 恐怕开发效率至少下降三成 然而 每个人对编辑器的喜好各不相同 甚至引发出诸如 神的编辑器 与 编辑器之神 这种信仰之争 但也正由此可见 个性化的编辑器对于一个程序员
  • 【FICO系列】SAP FICO 凭证错误:BKPFF$PRDCLN800在FI中达到的项目最大编号

    公众号 SAP Technical 本文作者 matinal 原文出处 http www cnblogs com SAPmatinal 原文链接 FICO系列 SAP FICO 凭证错误 BKPFF PRDCLN800在FI中达到的项目最大
  • 无法访问目标主机的原因及其和请求超时的区别

    使用ping命令时经常会遇到这两种情况 就表示网络出了问题 无法访问目标主机的原因 可以看到 无法访问目标主机 是来自一个IP的回复 实际上那个IP是一个路由器 因此 无法访问目标主机 实际上数据是发出去并且收到回复的 只不过收到的回复是别
  • 数据结构和算法(递归概念、迷宫回溯问题和八皇后问题代码实现)

    递归的概念 递归能够做解决什么问题 使用递归时需要注意的问题 递归的第一个应用 迷宫回溯问题 迷宫模拟 定义一个8 7的数组模拟迷宫 1表示围墙 0表示可以走的路 图中左上红圈为起点 右下红圈为终点 利用代码找到从起点到终点的路径 使用递归
  • 【Python】代码实现LL(1),LR(1)上下文无关文法(Stack()类)

    任务要求 针对书上第三章中的表达式文法 采用LL 1 LR 1 进行分析 相关文法 需要进行消除左递归等操作 顺手分享一下课本资源好了 可能不是最新版 排版略有点别扭 后文的书上内容就是指这本书 编译原理 陈意云 文字版 提取码 e0ag
  • Android Studio如何添加工程(project)为library(针对非gradle)

    这篇文章还是针对非gradle build的工程 gradle build有一些差别 在Eclipse要引用别的工程为本工程的library很简单 但是在Android Studio还是稍稍有点小复杂的 那如何引用别的工程为本工程的libr
  • 网络编程——TCP并发服务器模型

    1 多线程中的newfd 能否修改成全局 不行 为什么 因为如果是全局变量 文件描述符就是唯一的 所有的客户端都会在同一个文件描述符通信 2 多线程中分支线程的newfd能否不另存 直接用指针间接访问主线程中的newfd 不行 为什么 如果
  • 微信小程序-仿智行火车票12306

    微信小程序 仿智行火车票12306 微信小程序 仿智行火车票12306 主页有轮播图 有导航栏 有个人中心 可以实现火车票 飞机票 汽车票的选择 适合初学者学习 下面是示例图片 下载链接 https download csdn net do
  • Linux系统图形界面和命令行界面之间的切换

    一 系统不在虚拟机中的情况 使用ctrl alt F1 6切换到命令行界面 ctrl alt F7切换到图形界面 二 系统在虚拟机中的情况 Ctrl Alt shift F1 6切换到命令行界面 使用Alt F7返回到图形界面 注 以上方法
  • hashmap中为什么使用红黑树?

    在回答这个问题之前 我们先了解一下有关二叉树的基本内容 二叉排序树 又称二叉查找树 1 若左子树不为空 则左子树上所有结点的值均小于根结点的值 2 若右子树不为空 则右子树上所有结点的值均大于根节点的值 3 左右子树也为二叉排序树 平衡二叉
  • 2017 ICCV之语义分割:Cascaded Feature Network for Semantic Segmentation of RGB-D Images

    Cascaded Feature Network for Semantic Segmentation of RGB D Images 目前的问题 1 为了计算对象 场景关系的表示 最近大量的分割网络使用一组感受野来丰富卷积特征的文本信息 这
  • book_read_link

    结构性改革 黄奇帆 微信读书 分析与思考 黄奇帆的复旦经济课 黄奇帆 微信读书
  • java通过web3j获取ETH交易明细

    我们在项目里面如果想要得到用户的ETH交易明细怎么做呢 有两种方式 1 直接获取ETH最新块的交易明细 2 通过块获取用户的交易明细 废话不多说 直接贴代码看了 package com example demo web3jLog impor
  • pdf.js引入方式及初始化配置

    官方下载地址 Getting StartedA general purpose web standards based platform for parsing and rendering PDFs http mozilla github