成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

vue 使用 vue-pdf 實現pdf在線預覽的示例代碼

瀏覽:5日期:2023-01-24 14:56:49

背景

之前的demo增加了圖片預覽,于是今天下午追完番劇就突然想到能不能把pdf在線預覽也做了,說干就干,剛開始查了很多教程,我發現很多人都在說什么pdf.js這個庫,這當然沒什么問題,pdf.js的確可以非常完美的實現pdf在線預覽的過程,但是感覺這樣直接進去有點不太優雅,于是找找看看有沒有什么現成的組件,發現有vue-pdf這個組件,雖然說它沒有原生那樣強大,比如不支持pdf文字復制,打印會亂碼,但是我感覺已經足以滿足我的需求了。本篇筆記循序漸進,從基礎的demo,到一個可用的程度,文末列出了大家在實際使用的過程中可能會遇到的問題和解決方案。

安裝:

這個沒有啥背景知識可講,我們直接跳到安裝環節,vue-pdf 和其他vue組件的安裝并無不同,打開命令行,敲入:

npm install --save vue-pdf

注意路徑。別在桌面調出來個終端安裝了,這種直接打回去重學Vue。

vue-pdf 初體驗:

安裝完之后,使用vue-pdf非常簡單,和其他的組件并沒有什么不同,上代碼:

首先我們需要引入這個組件:

<script>import pdf from ’vue-pdf’export default { components:{ pdf }, data(){ return { url:'http://storage.xuetangx.com/public_assets/xuetangx/PDF/PlayerAPI_v1.0.6.pdf', } }</script>

然后在頁面使用vue-pdf,只需要添加標簽:

<template><div> <pdf ref='pdf' :src='http://www.piao2010.com/bcjs/url'> </pdf></div></template>

重啟你的項目,訪問這個界面,你大概率會發現pdf已經成功顯示在你的界面上了。這沒有任何問題,但是,正當你準備拿起一根煙,點上,伴著舒適的《美麗的梭羅河》,欣賞你成功的杰作的時候,你會發現,我擦,為啥只有一頁,當玻璃杯碰在一起,滿世界都是夢破碎的聲音。

所以,這只是初體驗,如果你的pdf只有一頁,這樣寫當然沒什么問題,但是當我們呢pdf 有很多頁的時候,你會發現,這行不通了。所以,接下來,我們來看看怎么讓它顯示多頁。

vue-pdf 漸入佳境:

其實,想要顯示多頁也沒那么復雜,你每次就顯示一頁,我,直接v-for 循環,直接顯示完,簡單粗暴。

頁面代碼:

<template> <div> <pdf v-for='i in numPages' :key='i' :src='http://www.piao2010.com/bcjs/url' :page='i'></pdf> </div></template><script> import pdf from ’vue-pdf’ export default { components: { pdf }, data(){ return{ url: ’’, numPages:1, } }, mounted: function() { this.getNumPages('http://storage.xuetangx.com/public_assets/xuetangx/PDF/PlayerAPI_v1.0.6.pdf') }, methods: { getNumPages(url) { var loadingTask = pdf.createLoadingTask(url) loadingTask.then(pdf => { this.url = loadingTask this.numPages = pdf.numPages }).catch((err) => { console.error(’pdf加載失敗’) }) }, } }</script>

各個屬性:

url :pdf 文件的路徑,可以是本地路徑,也可以是在線路徑。 numPages : pdf 文件總頁數。

getNumPages 計算總頁數,順便給url和numPages賦值。

唯一需要大家注意的是這句:

this.getNumPages('http://storage.xuetangx.com/public_assets/xuetangx/PDF/PlayerAPI_v1.0.6.pdf')

注意啊,這句不一定非要寫到mounted里面,你想寫哪就寫哪,比如你前端請求后端,后端返回一個pdf 的url,在那里寫就行,寫在你需要的地方。

vue-pdf 輕車熟路:

很多人看到這,就這,就這?萬一,我pdf有一千頁,我瀏覽器還不得裂開,我追求的是那種在微醺的下午,一頁一頁的翻看的感覺,你能給我嗎?

我不能,才怪,保證滿足你。

<template> <div> <div class='tools'> <bk-button :theme='’default’' type='submit' :title='’基礎按鈕’' @click.stop='prePage' class='mr10'> 上一頁</bk-button> <bk-button :theme='’default’' type='submit' :title='’基礎按鈕’' @click.stop='nextPage' class='mr10'> 下一頁</bk-button> <div class='page'>{{pageNum}}/{{pageTotalNum}} </div> <bk-button :theme='’default’' type='submit' :title='’基礎按鈕’' @click.stop='clock' class='mr10'> 順時針</bk-button> <bk-button :theme='’default’' type='submit' :title='’基礎按鈕’' @click.stop='counterClock' class='mr10'> 逆時針</bk-button> </div> <pdf ref='pdf' :src='http://www.piao2010.com/bcjs/url' :page='pageNum' :rotate='pageRotate' @progress='loadedRatio = $event' @page-loaded='pageLoaded($event)' @num-pages='pageTotalNum=$event' @error='pdfError($event)' @link-clicked='page = $event'> </pdf> </div></template>

接下來,我們一一介紹這些都是個啥。

參數介紹:

page: 當前顯示的頁數,比如第一頁page=1 rotate : 旋轉角度,比如0就是不旋轉,+90,-90 就是水平旋轉。 progress :當前頁面的加載進度,范圍是0-1 ,等于1的時候代表當前頁已經完全加載完成了。 page-loaded :頁面加載成功的回調函數,不咋能用到。 num-pages :總頁數 error :加載錯誤的回調 link-clicked:單機pdf內的鏈接會觸發。

其他:

print 這個是打印函數。 注意:谷歌瀏覽器會出現亂碼,這個和字體有關系。

來,js代碼走一個:

<script> import pdf from ’vue-pdf’ export default { name: ’Home’, components: { pdf }, data() { return { url: 'http://storage.xuetangx.com/public_assets/xuetangx/PDF/PlayerAPI_v1.0.6.pdf', pageNum: 1, pageTotalNum: 1, pageRotate: 0, // 加載進度 loadedRatio: 0, curPageNum: 0, } }, mounted: function() {}, methods: { // 上一頁函數, prePage() { var page = this.pageNum page = page > 1 ? page - 1 : this.pageTotalNum this.pageNum = page }, // 下一頁函數 nextPage() { var page = this.pageNum page = page < this.pageTotalNum ? page + 1 : 1 this.pageNum = page }, // 頁面順時針翻轉90度。 clock() { this.pageRotate += 90 }, // 頁面逆時針翻轉90度。 counterClock() { this.pageRotate -= 90 }, // 頁面加載回調函數,其中e為當前頁數 pageLoaded(e) { this.curPageNum = e }, // 其他的一些回調函數。 pdfError(error) { console.error(error) }, } }</script>

其他騷操作:

// 打印全部pdfPrintAll() { this.$refs.pdf.print() },// 打印指定部分pdfPrint() { this.$refs.pdf.print(100, [1, 2]) },

具體樣式什么的我就不貼出來了,這些都不是重點,完全可以改成自己喜歡的。

成品展示:

vue 使用 vue-pdf 實現pdf在線預覽的示例代碼

其他問題以及解決方案:

跨域問題:網上用pdf.js 很多都會遇到跨域問題,這個我今天實際應用到自己的項目里面了,由于我服務端設置了跨域,所以沒有出現跨域的問題,如果出現跨域需要修改你后端的請求頭。

打印界面字符亂碼:這個我倒是碰到了,谷歌瀏覽器打印的時候,預覽界面真的變成了 真·方塊字 ,全是方塊。這個問題是因為你pdf中使用了自定義字體導致的,具體解決方案如下:

首先,找到這個文件:node_modules/vue-pdf/src/pdfjsWrapper.js

然后根據github上這個issue,其中紅色的是要刪掉的,綠色的是要加上去的,照著改就可以解決了。

地址: https://github.com/FranckFreiburger/vue-pdf/pull/130/commits/253f6186ff0676abf9277786087dda8d95dd8ea7

根據我的實際測試,是可以解決打印亂碼的問題的。

到此這篇關于vue 使用 vue-pdf 實現pdf在線預覽的示例代碼的文章就介紹到這了,更多相關vue pdf在線預覽內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美国产三区| 欧美成人艳星乳罩| 精品视频一区 二区 三区| 久久精品一区四区| 中文一区二区| 国产精品嫩草99av在线| 精品国产成人在线影院| 调教+趴+乳夹+国产+精品| 欧美另类视频在线| 日韩免费电影网站| 寂寞少妇一区二区三区| 国产精品一区视频| 国产欧美日韩在线看| 日韩激情在线观看| 亚洲国产免费| 国产精品入口麻豆原神| 国产aⅴ综合色| 欧美一级网站| 日本一区二区电影| 成人av中文字幕| 制服丝袜在线91| 另类中文字幕网| 精品1区2区| 欧美一区二区三区在线观看视频| 亚洲6080在线| 99精品视频免费观看视频| 久久综合中文字幕| 国产精品996| 欧美另类一区二区三区| 日本一区中文字幕| 色综合久久久网| 亚洲h在线观看| 99re6热在线精品视频播放速度| 久久午夜电影网| 岛国av在线一区| 日韩一区二区三区视频在线 | 一区二区三区小说| 亚洲国产日韩在线| 中文字幕一区二区三区视频| 欧美91大片| 国产欧美日韩在线看| 91麻豆国产福利精品| 国产亚洲欧美中文| 91美女片黄在线观看91美女| 精品国产人成亚洲区| 蜜桃av一区二区三区电影| 欧美在线视频日韩| 美女视频一区在线观看| 欧美中文字幕一区二区三区| 偷拍亚洲欧洲综合| 色先锋aa成人| 免费亚洲电影在线| 欧美日韩亚洲另类| 韩国女主播一区| 91.xcao| 国产一区二区福利| 日韩一区二区三区免费观看| 成人永久aaa| www国产亚洲精品久久麻豆| 99久久精品99国产精品| 欧美极品少妇xxxxⅹ高跟鞋| 欧美午夜国产| 国产精品久久久久一区二区三区| 亚洲精品乱码视频| 亚洲一区二区精品视频| 久久久精品日韩| 久久精品国产色蜜蜜麻豆| 欧美人妇做爰xxxⅹ性高电影| 成人免费视频网站在线观看| 国产夜色精品一区二区av| 亚洲视频免费| 亚洲成av人在线观看| 欧美日韩一本到| 不卡一区中文字幕| 中文字幕av在线一区二区三区| 99精品国产高清一区二区| 亚洲成人动漫精品| 在线观看一区不卡| 国产xxx精品视频大全| 久久综合色婷婷| 欧美国产专区| 亚洲日本青草视频在线怡红院 | 欧美日本国产| 亚洲精品少妇30p| 久久精品官网| 国产专区综合网| 久久久久国产免费免费| 日韩午夜精品| 日本不卡一区二区三区| 7777精品伊人久久久大香线蕉经典版下载 | 久久久夜夜夜| 久久精品国产精品亚洲精品| 日韩一区二区三区电影| 成人av在线播放网站| 欧美国产欧美综合| 国产精品久久久久久久免费软件| 蜜桃视频一区二区| 日韩一区和二区| 国产精品yjizz| 图片区小说区区亚洲影院| 欧美久久久久免费| 欧美国产一区二区三区激情无套| 一区二区三区.www| 欧美精品色综合| 欧美特黄一区| 天天操天天干天天综合网| 欧美精品vⅰdeose4hd| 99久久精品国产精品久久| 一区二区三区在线视频免费观看| 欧美日韩色一区| 欧美日本一区二区视频在线观看 | 亚洲欧美综合一区| 亚洲3atv精品一区二区三区| 欧美猛男gaygay网站| 欧美日韩p片| 亚洲二区在线视频| 91福利资源站| 国产综合色产| 日本强好片久久久久久aaa| 欧美tickling挠脚心丨vk| 国产女主播一区二区三区| 国产成人在线网站| 亚洲精品国产一区二区三区四区在线 | 国产精品美女一区二区在线观看| 香蕉成人久久| 国产成人午夜99999| 亚洲色图制服丝袜| 日韩欧美在线网站| 国产日韩一区欧美| 国产.欧美.日韩| 亚洲电影视频在线| 久久久99精品免费观看不卡| 日本高清无吗v一区| 欧美一区视频| 国产一区二区精品久久| 亚洲一区二区视频在线观看| 精品国产不卡一区二区三区| 久久只有精品| 欧美激情aⅴ一区二区三区| 午夜精品福利一区二区三区av | 91精品在线免费观看| 精品1区2区| 国产成人免费在线观看不卡| 亚洲亚洲人成综合网络| 久久综合精品国产一区二区三区 | 久久一区亚洲| 欧美一区国产一区| 久久aⅴ国产欧美74aaa| 亚洲青青青在线视频| 欧美一级欧美三级| 老司机亚洲精品| 亚洲国产sm捆绑调教视频| 中文字幕亚洲区| 国产精品久线在线观看| 国产婷婷色一区二区三区四区| 2023国产精品| 精品理论电影在线| 2023国产一二三区日本精品2022| 欧美xxxxx牲另类人与| 日韩欧美国产精品一区| 日韩精品一区二区三区四区视频| 欧美精品1区2区3区| 欧美妇女性影城| 欧美一级夜夜爽| 欧美二区三区的天堂| 欧美日韩高清在线播放| 欧美日韩黄色影视| 欧美猛男gaygay网站| 69久久夜色精品国产69蝌蚪网| 7777精品久久久大香线蕉| 欧美一区永久视频免费观看| 91精品国产黑色紧身裤美女| 日韩视频中午一区| ww亚洲ww在线观看国产| 国产日产精品1区| 成人免费在线观看入口| 亚洲美女视频在线观看| 亚洲国产毛片aaaaa无费看| 日韩精品成人一区二区在线| 日韩国产一区二| 奇米精品一区二区三区四区| 久久精品国产免费| 国产精品123区| 不卡的电视剧免费网站有什么| 成年人午夜久久久| 欧美国产一区二区三区激情无套| 欧美午夜精彩| 日韩亚洲国产欧美| 午夜一区二区三视频在线观看| 一本色道a无线码一区v| 欧美人妇做爰xxxⅹ性高电影| 日韩一区二区麻豆国产| 26uuu亚洲综合色| 国产精品视频观看| 亚洲三级视频在线观看| 亚洲一区二区视频在线观看| 青青草国产成人av片免费| 国产福利一区二区三区视频在线| av欧美精品.com| 激情国产一区|