vue中预览pdf
情况一
如果后端返回的pdf地址,粘贴到浏览器的url框中,可以在浏览器中直接进行预览的,那么我们就用window.open,或 a标签,或iframe标签通过设置src进行预览即可
法1:可以直接使用window.open('获取到的pdf地址')重新打开一个浏览器页签
通过浏览器页签直接实现预览功能(预览页面的样式,根据浏览器的不同,会略有差异)
法2:使用iframe标签
情况二
后端返回了服务器文件pdf的地址,粘贴到浏览器的url框中,无法在浏览器中直接进行预览,或者是直接进行了下载,这种情况,上述方法解决不了,需要使用插件或者设置浏览器请求头的方式来解决
法1:使用vue-pdf进行预览
(1)安装:
npm install --save vue-pdf
(2)引入:在要使用的vue页面进行引入
import pdf from 'vue-pdf'
并引入组件
components: { pdf }
(3)使用:
单页pdf可以直接使用
:src="获取到的pdf地址"
多页pdf通过循环实现
data中定义:
data(){return{pageTotal: null,pdfUrl: "http://101.34.220.192:9000/emergency-response/integration/system_manual/RESOURCE1689663612812.pdf"}
}
// 获取pdf总页数getTotal() {// 多页pdf的src中不能直接使用后端获取的pdf地址 否则会按页数请求多次数据// 需要使用下述方法的返回值作为urlthis.pdfUrl = pdf.createLoadingTask(this.pdfUrl)// 获取页码this.pdfUrl.promise.then(pdf => this.pageTotal = pdf.numPages).catch(error => { })},
此时就可以正常预览:

法2:不使用插件,使用get请求,修改请求头类型来实现
定义一个函数:
openPdf(url) {return new Promise((resolve, reject) => {let blob = null;let xhr = new XMLHttpRequest();xhr.open("GET", 'http://101.34.220.192:9000/emergency-response/integration/system_manual/RESOURCE1689663612812.pdf');xhr.responseType = "blob";xhr.onload = () => {blob = xhr.response;const blobob = new Blob([blob], { type: 'application/pdf;charset=utf-8' });const href = window.URL.createObjectURL(blobob);window.open(href, 'newWindow');resolve(file);};xhr.onerror = (e) => {reject(e)};xhr.send();});},
使用:
预览文档
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
