最近在用vue做項目的時候,頁面中需要展示后端返回的PDF文件,於是便用到了vue-pdf,其使用方法為 :
npm install --save vue-pdf
官網地址:https://www.npmjs.com/package/vue-pdf
不多說了,直接上代碼:
<template> <div> <div class="parent"> <button @click="$refs.pdf.print()">打印</button> <pdf ref="pdf" :src="src" :page='currentPage' @progress='getProgress' @page-loaded="currentPage=$event" @loaded="loadPdfHandler"></pdf> </div> <el-pagination background layout="prev, pager, next" :page-size="1" :total="numPages" @current-change="changePage"> </el-pagination> </div> </template> <script> import pdf from 'vue-pdf' const src = pdf.createLoadingTask('./static/bm.pdf'); export default { data() { return { src, numPages: 100, currentPage: 1 } }, methods: { changePage(page) { this.currentPage = page; }, getProgress(e) { console.log('加載進度:',e); }, loadPdfHandler(){ console.log('PDF加載完成啦'); } }, mounted() { this.src.then(pdf => { this.numPages = pdf.numPages; }); }, components: { pdf }, } </script> <style scoped> .parent { width: 1000px; margin: 0 auto; } </style>
代碼中引用了element-UI中的分頁,可以將PDF文件分頁展示在頁面中,但是在點擊打印按鈕時,卻出現了亂碼:
最后通過尋找答案,發現原始的打印頁面,PDF格式亂碼,主要是因為PDF里使用了自定義字體,不能識別,其解決方案為:
需要修改 node_moduls 中 vue-pdf 安裝包的 pdfjsWrapper.js 文件
其中pdfjsWrapper.js為我修改后的文件,pdfWrapper1.js為原始未修改過的文件。
其修改可參考以下鏈接:
git-hup地址:https://github.com/FranckFreiburger/vue-pdf/pull/130/commits/253f6186ff0676abf9277786087dda8d95dd8ea7,
修改之后,在此點擊打印按鈕,發現已經正常了: