需求说明:后台返回PDF文件流,前端使用vue-pdf插件进行展示

最开始搜索出的插件都是pdf.js,但由于该vue项目不是特别完整的结构,没有public/assets文件夹,一直报找不到那个文件,最后只好放弃换一个方式。

最终采用了vue-pdf插件,可以直接安装,方便快捷

下载vue-pdf

1
npm install vue-pdf -D

页面使用

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;//base64文件流
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