最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue中如何實(shí)現(xiàn)pdf文件預(yù)覽的方法

 更新時間:2018年07月12日 09:13:59   作者:sunxiaoying123  
這篇文章主要介紹了vue中如何實(shí)現(xiàn)pdf文件預(yù)覽的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

今天產(chǎn)品提出一個優(yōu)化的需求,就是之前我們做的圖片展示就是一個img標(biāo)簽搞定,由于我們做的是海外后臺管理系統(tǒng),那邊的人上傳的文件時pdf格式,vue本事是不支持這種格式文件展示的,于是就google搜索,發(fā)現(xiàn)有iframe、embed、vueshowpdf(測試了不咋好用)、pdf等,本文說一下pdf插件的使用過程。

說明:iframe標(biāo)簽這種,對于有的鏈接是可以的,比如這種鏈接在服務(wù)器端沒有設(shè)置享有頭content-disposition,就可以直接顯示,如下:

想復(fù)制代碼如下:

<iframe src="http://storage.xuetangx.com/public_assets/xuetangx/PDF/PlayerAPI_v1.0.6.pdf" width="100%" height="100%">
 This browser does not support PDFs. Please download the PDF to view it: <a href="/test.pdf" rel="external nofollow" >Download PDF</a>
</iframe>

顯示效果如下:

如果pdf有很多頁,也不用考慮分頁功能,自動可以向下滑動就翻頁,看著挺好,但是,且往下繼續(xù)看----->

我們把上邊的鏈接換成' https://ecs7.tokopedia.net/instant-loan/file/29a2218e-bef9-44cb-b92b-8e81bc4d5228_DOC-20171013-WA0035.pdf ',發(fā)現(xiàn)什么了?快看截圖。。。同樣是pdf鏈接,怎么這個就不行?

什么情況,下載框,必須下載才能看到,那多影響體驗(yàn),下到本地還占我磁盤,不行不行,把上邊那個連接放到瀏覽器,回車看一下響應(yīng)頭部:

content-disposition :attachment; filename="DOC-20171013-WA0035.pdf"

就是它,讓我們必須彈出下載框,由于這些文件是在遠(yuǎn)程服務(wù)器上存貯著,想著讓后端看能不能檢測到這個響應(yīng)頭,他們也懶得處理,后來只能自己處理了,鑒于這種情況,網(wǎng)上也是有很多解決辦法的,本人試驗(yàn)過可以的。中間也是借用了一篇文章 ,根據(jù)自己需求,做了簡單的處理。

http://m.fzitv.net/article/143646.htm

過程如下:

  • 執(zhí)行npm install pdf-dist --save
  • 在comments目錄下創(chuàng)建兩個文件:pdf.vue 和 index.js
< !--pdf.vue--><template >
 <div id = "container": class = "{'back': isShow}" >
 <canvas id = "the-canvas" > 
</canvas> 
 <!-- / / 添加關(guān)閉pdf功能-->
<span: class = "{'close':isShow}"@click = "closePdf" > close < /span> 
 <p class="foot" v-if="pdfDoc"> 
 <Button class="left" @click="onPrevPage" v-if="pageNum>1">上一頁</Button >
 <Button class = "right"@click = "onNextPage"v -if = "pageNum<pdfDoc.numPages" > 下一頁 < /Button> 
 </p > 
</div>
 </template > 
<script >
 import PDFJS from 'pdfjs-dist'export
default {
 data() {
  return {
  isShow:
  false,
  //通過該屬性動態(tài)添加類,讓pdf顯示或隱藏 
  pdfDoc: null,
  //可以打印發(fā)現(xiàn)是一個對象,里面有頁數(shù)信息等 
  pageNum: 1,
  pageRendering: false,
  pageNumPending: null,
  scale: 0.9
  }
 },
 methods: {
  closePdf() {
  this.isShow = false
  },
  showPDF(url) {
  this.isShow = true let _this = this PDFJS.getDocument(url).then(function(pdf) {
   _this.pdfDoc = pdf

   _this.renderPage(1)
  })
  },
  renderPage(num) {
  this.pageRendering = true let _this = this this.pdfDoc.getPage(num).then(function(page) {
   var viewport = page.getViewport(_this.scale) let canvas = document.getElementById('the-canvas') canvas.height = viewport.height canvas.width = viewport.width // Render PDF page into canvas context 
   var renderContext = {
   canvasContext: canvas.getContext('2d'),
   viewport: viewport
   }
   var renderTask = page.render(renderContext) // Wait for rendering to finish 
   renderTask.promise.then(function() {
   _this.pageRendering = false
   if (_this.pageNumPending !== null) {
    // New page rendering is pending 
    this.renderPage(_this.pageNumPending) _this.pageNumPending = null
   }
   })
  })
  },
  queueRenderPage(num) {
  if (this.pageRendering) {
   this.pageNumPending = num
  } else {
   this.renderPage(num)
  }
  },
  onPrevPage() {
  if (this.pageNum <= 1) {
   return
  }
  this.pageNum--this.queueRenderPage(this.pageNum)
  },
  onNextPage() {
  if (this.pageNum >= this.pdfDoc.numPages) {
   return
  }
  this.pageNum++this.queueRenderPage(this.pageNum)
  }
 }
 } 
< /script>
<style scoped="" type="text/css ">
.back { 
background-color: rgba(0, 0, 0, 0.788); position:fixed; 
width: 100%; 
 height: 100%; 
top: 0; left: 0; 
 text-align: center; 
 padding: 20px; 
z-index: 100; 
 overflow: scroll;
}
.close{ 
 position: absolute; 
 right: 20px; 
 top: 20px; 
z-index: 200; 
color: #fff; 
cursor: pointer;
} 
.foot {
 position: absolute; 
bottom: 50px; 
left: 50%; 
 transform: translate(-50%,0);
}
</style>"
// index.js
import PDF from './pdf'
var $vmexport
default {
 install(Vue, options) {
  if (!$vm) {
  const PDFPlugin = Vue.extend(PDF)
  $vm = new PDFPlugin().$mount()
  document.body.appendChild($vm.$el)
  }
  Vue.prototype.$showPDF = function(url) {
  $vm.showPDF(url)
  }
 }
 }

3. 在main.js中引入

import pdf from './components/pdf'
Vue.use(pdf)

這樣就可以全局使用了,使用的時候就直接使用,本文是在一個圖片展示 的地方加上一個點(diǎn)擊事件,點(diǎn)擊時觸發(fā)該函數(shù)即可;

function showPdf() {
 let url = 'http://storage.xuetangx.com/public_assets/xuetangx/PDF/PlayerAPI_v1.0.6.pdf'
 // let url = 'https://ecs7.tokopedia.net/instant-loan/file/29a2218e-bef9-44cb-b92b-8e81bc4d5228_DOC-20171013-WA0035.pdf' 
 this.$showPDF(url)
}

文中添加了關(guān)閉功能,點(diǎn)擊close即可關(guān)閉pdf的展示, 同時組件中也有分頁功能,如果頁數(shù)大于1就會顯示下一頁按鈕;

以上既是本人實(shí)現(xiàn)的過程,至于跨域問題,我這邊還沒遇到,現(xiàn)在是本地訪問可以的,等到線上再看看行不行,如果不行后邊再追加方法實(shí)現(xiàn)。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue-cli瀏覽器實(shí)現(xiàn)熱更新的步驟

    vue-cli瀏覽器實(shí)現(xiàn)熱更新的步驟

    這篇文章主要介紹了vue-cli-瀏覽器實(shí)現(xiàn)熱更新,最常用的是webpack-dev-server,它是一個小型的Node.js?Express服務(wù)器,它使用webpack-dev-middleware來服務(wù)于webpack的包,本文結(jié)合實(shí)例代碼介紹的非常詳細(xì),需要的朋友參考下吧
    2024-03-03
  • Vue3+Vite中不支持require的方式引入本地圖片的解決方案

    Vue3+Vite中不支持require的方式引入本地圖片的解決方案

    這篇文章主要介紹了Vue3+Vite中不支持require的方式引入本地圖片的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 使用vue-router設(shè)置每個頁面的title方法

    使用vue-router設(shè)置每個頁面的title方法

    下面小編就為大家分享一篇使用vue-router設(shè)置每個頁面的title方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • vue中axios請求的封裝實(shí)例代碼

    vue中axios請求的封裝實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于vue中axios請求封裝的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧要的朋友可以參考下
    2019-03-03
  • vue3自定義組件之v-model實(shí)現(xiàn)父子組件雙向綁定

    vue3自定義組件之v-model實(shí)現(xiàn)父子組件雙向綁定

    這篇文章主要介紹了vue3自定義組件之v-model實(shí)現(xiàn)父子組件雙向綁定方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue+jquery+lodash實(shí)現(xiàn)滑動時頂部懸浮固定效果

    vue+jquery+lodash實(shí)現(xiàn)滑動時頂部懸浮固定效果

    這篇文章主要為大家詳細(xì)介紹了vue+jquery+lodash實(shí)現(xiàn)滑動時頂部懸浮固定效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • 詳解Vue用自定義指令完成一個下拉菜單(select組件)

    詳解Vue用自定義指令完成一個下拉菜單(select組件)

    本篇文章主要介紹了詳解Vue用自定義指令完成一個下拉菜單(select組件),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • vue升降版本以及如何查看項(xiàng)目版本

    vue升降版本以及如何查看項(xiàng)目版本

    這篇文章主要給大家介紹了關(guān)于vue升降版本以及如何查看項(xiàng)目版本的相關(guān)資料,在開發(fā)和維護(hù)Vue.js應(yīng)用程序時了解所使用的Vue.js版本非常重要,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • vue表單驗(yàn)證rules及validator驗(yàn)證器的使用方法實(shí)例

    vue表單驗(yàn)證rules及validator驗(yàn)證器的使用方法實(shí)例

    在vue開發(fā)中,難免遇到各種表單校驗(yàn),下面這篇文章主要給大家介紹了關(guān)于vue表單驗(yàn)證rules及validator驗(yàn)證器使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • vue element-ui el-table組件自定義合計(summary-method)的坑

    vue element-ui el-table組件自定義合計(summary-method)的坑

    這篇文章主要介紹了vue element-ui el-table組件自定義合計(summary-method)的坑及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評論

格尔木市| 陈巴尔虎旗| 贵溪市| 马龙县| 崇阳县| 南丰县| 区。| 阿尔山市| 元氏县| 汝城县| 即墨市| 蒲江县| 祁东县| 白玉县| 屏南县| 霍林郭勒市| 平利县| 高青县| 天全县| 留坝县| 蕲春县| 措勤县| 滦南县| 宣化县| 武川县| 铁岭市| 垣曲县| 鹰潭市| 简阳市| 尚义县| 依兰县| 明水县| 桐柏县| 乌苏市| 开原市| 尼勒克县| 保定市| 新宾| 小金县| 瓦房店市| 四会市|