需求说明:后台返回PDF文件流,前端使用vue-pdf插件进行展示
最开始搜索出的插件都是pdf.js,但由于该vue项目不是特别完整的结构,没有public/assets文件夹,一直报找不到那个文件,最后只好放弃换一个方式。
最终采用了vue-pdf插件,可以直接安装,方便快捷
下载vue-pdf
npm install vue-pdf -D
页面使用
<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:
1、该方法会在控制台报一些错误,但不影响功能使用
更新:
PS:2、该插件在第一次请求时正常显示,第二次请求会乱码,目前没有找到解决方法,使用强制刷新来避免这个问题
参考
https://blog.csdn.net/yuanmengdage/article/details/111871993