vue3.0使用vue-pdf-embed在线预览pdf 控制页码显示范围不生效问题解决

目录
  • vue3.0使用vue-pdf-embed在线预览pdf 控制页码显示范围不生效问题
    • 1.先安装vue-pdf-embed
    • 2.安装后 在使用页面引入
  • PS:vue3.0借用vue-pdf-embed实现在线预览pdf文件
    • 实现效果
    • 实现步骤
    • 一:安装依赖
    • 二:页面使用
    • 三:可能报错一
    • 问题解决
    • 1:下载依赖
    • 2:配置vue.config.js文件
    • 三:可能报错二
    • 问题原因
    • 问题解决

vue3.0使用vue-pdf-embed在线预览pdf 控制页码显示范围不生效问题

本来想的很简单 觉得 把要展示到第几页的页码给到v-for的 i in PageRange 中的PageRange即可 但是本地没问题 打包部署就不显示pdf

1.先安装vue-pdf-embed

具体的安装使用方法可以参考文章末尾介绍。
安装使用中可能遇到的问题都有写 很详细,跳转到文末详细讲解。

2.安装后 在使用页面引入

  import VuePdfEmbed from "vue-pdf-embed";
 components:{
    VuePdfEmbed,
 },
 <div>
    <vue-pdf-embed v-for="i in PageRange" :source="pdfSrc " :key="i" :page="i"></vue-pdf-embed>
  </div>
 data () {
      return {
        pdfSrc : '',
        PageRange: undefined, // pdf显示的页码范围
      }
    },
 	// 获取pdf
      getPdf() {
        this.pdfSrc = 'data:application/pdf;base64,' + ‘base64'
        this.PageRange= parseInt('10') // 这里是需要显示的页码范围 eg: 10 50 100
      }

之前本地控制页面显示范围一直没有什么问题 打包部署 pdf不加载
以为是加载顺序导致的 尝试多次修改后无效 我甚至还翻译了官方文档

我的神奇同事找到的最终原因:
parseInt()
这货竟然要parseInt一下才行!!!

PS:vue3.0借用vue-pdf-embed实现在线预览pdf文件

在需求中,经常遇见pdf的在线预览效果
很多pdf插件不支持vue3,或者是没有集成翻页放大缩小功能,比如vue-pdf。
实现原理:借用依赖vue-pdf-embed(pdf预览),pdfjs-dist(获取pdf总页数)
借用文档:https://juejin.cn/post/6995856687106261000

实现效果

实现步骤

一:安装依赖

npm i vue-pdf-embed -S
npm install --save pdfjs-dist

二:页面使用

vue文件中

<template>
  <div>
    <div class="div">
        <p class="arrow" style="text-align:center">
	        <!-- // 上一页 -->
	        <van-tag color="#7232dd" plain @click="prev">上一页</van-tag>
	        {{pageNum}} / {{numPages}}
	        <!-- // 下一页 -->
	        <van-tag color="#7232dd" @click="next" style="margin-left: 5px>下一页</van-tag>
	    </p>
	    <p style="text-align:center">
	      <van-tag color="#7232dd" plain @click="zoomA">放大</van-tag>
	      <van-tag color="#7232dd" @click="zoomB" style="margin-left: 5px">缩小</van-tag>
	    </p>
    </div>
    <vue-pdf-embed :source="source"
      class="vue-pdf-embed"
      :style="scaleFun"
      :page="pageNum" />
  </div>
</template>
<style scoped>
.div {
  top: 0;
  position: fixed;
  z-index: 999;
}
.vue-pdf-embed {
  text-align: center;
}
</style>

js文件中

// 引入组件
import VuePdfEmbed from "vue-pdf-embed";
const PDF = require('pdfjs-dist')
// 页面报错解决,在将 pdfjs-dist/build/pdf.worker.js 复制一份放到项目 public 目录下后引入
PDF.GlobalWorkerOptions.workerSrc = '/pdf.worker.js'
// 引入文件
import pdfUrl from '@/assets/file/example.pdf'
export default {
  components: {
    VuePdfEmbed,
  },
  data() {
    return {
      source: pdfUrl, // 文件路径
      pageNum: 1, // 当前页数
      scale: 1,  // 缩放比例
      numPages: 0, // 总页数
    };
  },
  mounted() {
    // 获取总页数
    this.getPdfNumPages()
  },
  computed: {
    scaleFun(index) { // 缩放
     var scale = this.scale;
      return `transform:scale(${scale})`;
    },
  },
  methods: {
     getPdfNumPages() {
      const url = this.source
      const loadingTask = PDFJS.getDocument(url)
      loadingTask.promise.then(pdf => {
        this.numPages = pdf.numPages
      })
    },
    prev() {
      if (this.pageNum > 1) {
        this.pageNum -= 1;
      }
    },
    next() {
      if (this.pageNum < this.numPages) {
        this.pageNum += 1;
      }
    },
    zoomA() {
      this.scale += 0.1;
    },
    zoomB() {
      this.scale -= 0.1;
    },
  },
};

三:可能报错一

问题原因

缺少解析pdf所需loader

问题解决

1:下载依赖

file-loader:file-loader可以用来帮助webpack打包处理一系列的文件;比如:.png 、 .jpg 、.jepg等格式的图片,pdf格式的文件等等

npm install --save-dev file-loader
or
cnpm install --save-dev file-loader

2:配置vue.config.js文件

const path = require('path');
module.exports = {
	// webpack配置
	chainWebpack: config => {
	   config.module.rule('pdfjs-dist').test({
         test: /\.js$/,
         include: path.join(__dirname, 'node_modules/pdfjs-dist')
       }).use('babel-loader').loader('babel-loader').options({
         presets: ['@babel/preset-env'],
         plugins: ['@babel/plugin-proposal-optional-chaining']
       }),
	  config.module
	  .rule('pdf')
	  .test(/\.pdf$/)
	  .use('file')
	    .loader('file-loader')
	    .end();
	}
}

三:可能报错二

问题原因

需要在引入 pdfjs-dist 之后配置 workerSrc ,但是引入 pdfjs-dist/build/pdf.worker.entry 之后浏览器还是有个警告:Warning: Setting up fake worker. ,经过各种原因查找,最终找到了一句描述:pdf.worker.js必须位于自己的文件中(而不是与pdf.js捆绑在一起)。否则它不能在服务工作线程中运行。

问题解决

将 pdfjs-dist/build/pdf.worker.js 复制一份放到项目 public 目录下

1:放置文件

在node-module文件夹中,如图找到pdfjs-dist/build/pdf.worker.js
放置到项目 public,与index.html同级

2:配置页面中的js文件

// 也就是本文js文件中,最上方引入的代码
PDF.GlobalWorkerOptions.workerSrc = '/pdf.worker.js'

到此这篇关于vue3.0使用vue-pdf-embed在线预览pdf 控制页码显示范围不生效问题的文章就介绍到这了,更多相关vue3.0在线预览pdf 控制页码显示范围不生效内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Vue3 + Vue-PDF 实现PDF 文件在线预览实战

    目录 概述 项目实战 创建 vue3 项目 添加 PDF 预览插件 概述 今天我们用 Vue3 + Vue-PDF 实现 Vue 版本的 PDF 文件在线预览功能. 我们先来看看完成后效果: 项目实战 创建 vue3 项目 我们先创建一个的 Vue3 项目, 在终端中输入命令 pnpm create vite vue-pdf-preview 选择 vue-ts 回车,cd 进入项目根目录,执行 pnpm install, 等待项目依赖包安装完成. 项目依赖包安装完成后,我们来启动项目, 执行命令

  • vue3如何实现PDF文件在线预览功能

    目录 概述 正文 创建 vue3 项目 添加 PDF 预览插件 总结 概述 之前我们用 Reactjs + React-PDF 实现了 React 版的 PDF 文件预览,今天我们用 Vue3 + Vue-PDF 实现 Vue 版本的 PDF 文件在线预览功能. 我们先来看看完成后效果 正文 创建 vue3 项目 我们先创建一个的 Vue3 项目, 在终端中输入命令 pnpm create vite vue-pdf-preview 选择 vue-ts 回车,cd 进入项目根目录,执行 pnpm

  • vue在线预览word、excel、pdf、txt、图片的方法实例

    目录 excel文件预览 word文件预览 pdf文件预览 一.查看word 引用mammoth.js 二.查看Excel 引用sheetjs 写的项目 1.页面 2.数据 补充:vue移动端实现word在线预览 总结 excel文件预览 word文件预览 pdf文件预览 一.查看word 引用mammoth.js 安装 npm install --save mammoth 引入import mammoth from “mammoth”; 1.页面 <div id="wordView&qu

  • vue项目中常见的三种文件类型在线预览实现(pdf/word/excel表格)

    目录 前言 一.预览word文件 1.安装 npm 依赖 2.预览在线地址文件 3.预览本地文件 二.预览excel表格 1.安装依赖 2.预览在线表格 三.pdf预览 1.安装依赖vue-pdf 2.在需要的页面注册 3.使用 4.加载本地pdf文件 5.解决pdf使用自定义字体预览和打印乱码问题:pdfjsWrapper.js 总结 前言 之前做PDF预览一直用的pdf.js,这次没有太多附加需求比较简单简,所以决定用vue-pdf这个组件,虽然说它没有原生那样强大,但已经满足常用的需求了,

  • vue实现在线预览pdf文件和下载(pdf.js)

    最近做项目遇到在线预览和下载pdf文件,试了多种pdf插件,例如jquery.media.js(ie无法直接浏览) 最后选择了pdf.js插件(兼容ie10及以上.谷歌.安卓,苹果) 强烈推荐改插件,以下介绍用法 (1)下载插件 下载路径: pdf.js (2)将下载构建后的插件放到文件中public(vue/cli 3.0) (3)在vue文件中直接使用,贴上完整代码 <template> <div class="wrap"> <iframe :src=

  • Vue实现在线预览pdf文件功能(利用pdf.js/iframe/embed)

    前言 最近在做一个精品课程,需要在线预览课件ppt,我们的思路是将ppt转换为pdf在线预览,所以问题就是如何实现在线预览pdf了. 在实现的过程中,为了更好地显示效果,我采用了多种不同的方法,最终选择效果最好的pdf.js. 实现方法: 1:iframe 采取iframe将pdf嵌入网页从而达到预览效果,想法很美好,实现很简单,但显示很残酷- 虽然一行代码简洁明了,打开谷歌浏览器效果也还行,但缺点也是十分明显的!!!! <iframe src="http......" widt

  • vue3.0使用vue-pdf-embed在线预览pdf 控制页码显示范围不生效问题解决

    目录 vue3.0使用vue-pdf-embed在线预览pdf 控制页码显示范围不生效问题 1.先安装vue-pdf-embed 2.安装后 在使用页面引入 PS:vue3.0借用vue-pdf-embed实现在线预览pdf文件 实现效果 实现步骤 一:安装依赖 二:页面使用 三:可能报错一 问题解决 1:下载依赖 2:配置vue.config.js文件 三:可能报错二 问题原因 问题解决 vue3.0使用vue-pdf-embed在线预览pdf 控制页码显示范围不生效问题 本来想的很简单 觉得

  • vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法

    目前大多数PC浏览器支持在线预览pdf文件,但大多数手机浏览器还未支持,尝试用手机浏览器打开一个pdf文件会弹出是否下载的提示框.网上查了一些资料,在实现的过程中,还是走了比较多的弯路,最后采用了备受推荐的pdf.js插件来实现. pdf.js可以从github上clone下来,然后本地gulp生成可用的pdf.js和pdf.worker.js(参考readme即可). 不过更简单的方法是使用cnpm来安装: cnpm isntall --save pdfjs-dist,然后可以在项目中使用了,

  • 浅谈实现在线预览PDF的几种解决办法

    因客户需要实现PDF的预览处理,在网上找了一些PDF在线预览的解决方案,有的用PDFJS的在线预览方式,有的使用PDFObject的嵌入式显示,有的通过转换JPG/PNG方式实现间接显示的方式,开始是想通过简单的方式,能够使用JS插件实现预览最好,可是在线预览总是有一些不足,如不同浏览器的兼容问题,甚至不同的手机平台中展示的效果也不一样,不过最好还是采用了间接的方式,把PDF转换为图片展示效果,达到客户的要求. 1.在线实现预览的方式 一开始我还是很倾向使用这种方式,希望能采用一个较为好的JS插

  • Vue-pdf实现在线预览PDF文件

    前言 在大多数项目中都会遇到在线预览PDF文件,项目使用的是element ui,使用vue-pdf实现. 安装依赖 npm install --save vue-pdf 相关参数 参数介绍: url :pdf 文件的路径,可以是本地路径,也可以是在线路径. page: 当前显示的页数,比如第一页page=1 rotate : 旋转角度,比如0就是不旋转,+90,-90 就是水平旋转. progress :当前页面的加载进度,范围是0-1 ,等于1的时候代表当前页已经完全加载完成了. page-

  • 如何在vue中使用pdfjs预览pdf文件

    目录 前言 在写项目的过程中,偶尔会有使用到pdf的文件,当我们想看pdf文件的时候,你的操作是不是先把pdf文件下载下来,通过电脑安装的专用于打开pdf的软件来查看pdf文件呢.如果有个需求说不要让用户安装软件呢,毕竟还是有很多用户不知道怎么安装软件或者这个东西需要什么东西才能打开嘛.ok,有了这样的需求那我们是不是也得去实现嘛,毕竟这理由咱也没法反驳啊. 思考 既然都提出来了,那就想想怎么使用咯.既然需要用到pdf.不知道有没有关于js能够操作的库文件来帮我呢?果断一百度,咱们今天的主角就来

  • Android实现pdf在线预览或本地预览的方法

    最近项目中需要使用在线预览pdf,并要能实现自动播放,我想这样的需求无论如何来说都是很操蛋的 由于本人水平有限,最后讨论将项目需求改成将pdf下载到本地再实现自动播放. 接下来总结下目前能够实现pdf阅读的方案,开发当中需要根据实际需求去选择相应的方案. 1.使用Google doc支持来展示word,excel,pdf,txt(WebView方式在线预览): <span style="font-size:18px;">WebView urlWebView = (WebVi

随机推荐