<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本來想的很簡單 覺得 把要展示到第幾頁的頁碼給到v-for的 i in PageRange 中的PageRange即可 但是本地沒問題 打包部署就不顯示pdf
具體的安裝使用方法可以參考文章末尾介紹。
安裝使用中可能遇到的問題都有寫 很詳細,跳轉到文末詳細講解。
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一下才行!!!
在需求中,經常遇見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
file-loader:file-loader可以用來幫助webpack打包處理一系列的檔案;比如:.png 、 .jpg 、.jepg等格式的圖片,pdf格式的檔案等等
npm install --save-dev file-loader or cnpm install --save-dev file-loader
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 控制頁碼顯示範圍不生效內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45