需求说明:后台返回PDF文件流,前端使用vue-pdf插件进行展示
最开始搜索出的插件都是pdf.js,但由于该vue项目不是特别完整的结构,没有public/assets文件夹,一直报找不到那个文件,最后只好放弃换一个方式。
最终采用了vue-pdf插件,可以直接安装,方便快捷
下载vue-pdf
页面使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| <pdf v-for="i in numPages" :key="i" :src="src" :page="i" ref="myPdfComponent"></pdf>
import pdf from 'vue-pdf'
import CMapReaderFactory from 'vue-pdf/src/CMapReaderFactory.js' export default { data () { return { src: '', numPages: 0, page: 1, currentPage: 0 }; }, components: { pdf }, methods: { createConcert() { this.$loading.showLoading(); createConcert(params) .then(res => { this.$loading.closeLoading(); let da = res.busiDataResp.pdfBase64; let datas = 'data:application/pdf;base64,' + da this.pdfUrl = pdf.createLoadingTask({ url: datas, CMapReaderFactory }); this.pdfUrl.promise.then(pdf => { this.numPages = pdf.numPages; }); }).catch(function (error) { this.$loading.closeLoading(); this.$toast.showToast(error); }); }, }, } } mounted () { this.createConcert(); },
|
PS:该方法会在控制台报一些错误,但不影响功能使用
20210825更新:
PS:2、该插件在第一次请求时正常显示,第二次请求会乱码,目前没有找到解决方法,使用强制刷新来避免这个问题
参考
https://blog.csdn.net/yuanmengdage/article/details/111871993