第一种是用: <iframe> 嵌套显示

先上效果图:

注:这种还带样式的是我后面修改源码的 js添加的 :   customToolbar.js

//创建一个新样式
let sheet = (function() {let style = document.createElement("style");style.appendChild(document.createTextNode(""));document.head.appendChild(style);return style.sheet;
})();//调整页面大小时,PDF 预览组件会隐藏,打开就会彻底隐藏所有功能变成一个纯预览工具。
function editToolBar(){removeGrowRules();//将功能按钮放在工具栏左侧addElemFromSecondaryToPrimary('pageRotateCcw', 'toolbarViewerLeft')addElemFromSecondaryToPrimary('pageRotateCw', 'toolbarViewerLeft')addElemFromSecondaryToPrimary('zoomIn', 'toolbarViewerLeft')addElemFromSecondaryToPrimary('zoomOut', 'toolbarViewerLeft')//将功能按钮放在工具栏中间addElemFromSecondaryToPrimary('previous', 'toolbarViewerMiddle')addElemFromSecondaryToPrimary('pageNumber', 'toolbarViewerMiddle')addElemFromSecondaryToPrimary('numPages', 'toolbarViewerMiddle')addElemFromSecondaryToPrimary('next', 'toolbarViewerMiddle')//将功能按钮放在工具栏右侧addElemFromSecondaryToPrimary('secondaryOpenFile', 'toolbarViewerRight')// 更改功能按钮的图标changeIcon('previous', 'icons/baseline-navigate_before-24px.svg')changeIcon('next', 'icons/baseline-navigate_next-24px.svg')changeIcon('pageRotateCcw', 'icons/baseline-rotate_left-24px.svg')changeIcon('pageRotateCw', 'icons/baseline-rotate_right-24px.svg')changeIcon('viewFind', 'icons/baseline-search-24px.svg');changeIcon('zoomOut', 'icons/baseline-zoom_out-24px.svg')changeIcon('zoomIn', 'icons/baseline-zoom_in-24px.svg')changeIcon('sidebarToggle', 'icons/baseline-toc-24px.svg')changeIcon('secondaryOpenFile', './icons/baseline-open_in_browser-24px.svg')// 隐藏某些功能removeElement('secondaryToolbarToggle')removeElement('scaleSelectContainer')removeElement('presentationMode')removeElement('openFile')removeElement('print')removeElement('download')removeElement('viewBookmark')
}function changeIcon(elemID, iconUrl){let element = document.getElementById(elemID);let classNames = element.className;classNames = elemID.includes('Toggle')? 'toolbarButton#'+ elemID :classNames.split(' ').join('.');classNames = elemID.includes('view')? '#'+ elemID +'.toolbarButton' : '.'+ classNamesclassNames+= "::before";addCSSRule(sheet, classNames, `content: url(${iconUrl}) !important`, 0)
}function addElemFromSecondaryToPrimary(elemID, parentID){let element = document.getElementById(elemID);let parent = document.getElementById(parentID);element.style.minWidth = "0px";element.innerHTML =''parent.append(element);
}function removeElement(elemID){let element = document.getElementById(elemID);element.parentNode.removeChild(element);
}function removeGrowRules(){addCSSRule(sheet, '.hiddenSmallView *', 'display:block !important');addCSSRule(sheet, '.hiddenMediumView', 'display:block !important');addCSSRule(sheet, '.hiddenLargeView', 'display:block !important');addCSSRule(sheet, '.visibleSmallView', 'display:block !important');addCSSRule(sheet, '.visibleMediumView', 'display:block !important');addCSSRule(sheet, '.visibleLargeView', 'display:block !important');
}function addCSSRule(sheet, selector, rules, index) {if ("insertRule" in sheet) {sheet.insertRule(selector + "{" + rules + "}", index);} else if("addRule" in sheet) {sheet.addRule(selector, rules, index);}
}window.onload = editToolBar

html代码如下: 

<iframe :src="iframeUrl" style="width: 100%; height: 500px;overflow-y: auto;overflow-x: auto;"></iframe>

js 代码:

data(){return {iframeUrl: '' ,}
}methods:{preview(){}
}

这里需要你去下载pdf,js 文件:

官网(https://mozilla.github.io/pdf.js/getting_started/#download)下载PDFJS,

注意放在static文件目录下,如果vue最新版本放在public文件中(本项目@vue/cli 4.4.6)

嫌麻烦的请去传送门下载:https://download.csdn.net/download/qq_41646249/85200156?spm=1001.2014.3001.5501

记住:在axios请求中设置响应类型,此方法是自己项目中封装的axios请求,可根据自己情况加这行代码

responseType: 'blob',

在预览的方法里面: preview()

  this.$axios({url: "/api/c3/report/toAutoPdfFiles", method: 'post',responseType: 'blob',data: formData,headers: {'Content-Type': 'multipart/form-data'}}).then(res=>{console.log("res:", res)// res.data  是后端返回的 pdf 文件流let urlPdf  = window.URL.createObjectURL(new Blob([res.data]))console.log('urlPdf:', urlPdf)  //blob:http://localhost:8080/e8451cb8-3238-4272-b490-0420df4a5b88this.iframeUrl = '/pdf/web/viewer.html?file=' + encodeURIComponent(urlPdf)})

注: 后台返回的文件流:res.data

第二种是用 window.open(fileURL) 打开新的窗口显示

 方法如下:

 this.$axios({url: "/api/c3/report/toAutoPdfFiles", method: 'post',responseType: 'blob',data: formData,headers: {'Content-Type': 'multipart/form-data'}}).then(res=>{console.log("window.open", res)let blob = new Blob([res.data], {type: 'application/pdf' });let fileURL = URL.createObjectURL(blob);window.open(fileURL);    //这里是直接打开新窗口})

效果如下:

第三种方法是用 vue-pdf

下载vue-pdf包

npm i vue-pdf -save

局部引入使用:

 <el-dialog title="PDF 预览" :visible.sync="viewVisible" width="70%" center><template><pdf :src="pdfUrl"></pdf></template></el-dialog>
<script>
import pdf from 'vue-pdf'
export default {components: {pdf},data:{return {pdfUrl : ""}}create(){let path = 'http://image.cache.timepack.cn/nodejs.pdf' //后台返回pdf文件路径this.pdfUrl = pdf.createLoadingTask(path)}
}
</script>

( 推荐使用iframe方法 )或者 window.open(url)

最后为了方便大家的沟通与交流请加QQ群: 625787746

请进QQ群交流:【IT博客技术分享群①】:正在跳转

vueCli3.0文件上传后,后端返回流,前端转换成pdf预览的3种方式相关推荐

  1. php104.tmp,ThinkPHP5.0多个文件上传后找不到临时文件的修改方法

    这是修改之前的代码 if(!empty($_FILES)){ if(!empty($_FILES[org_positive])){ $org_positive = request()->file ...

  2. 文件上传——选择文件之后自动上传||文件上传的后端代码

    选择文件之后自动上传 //普通图片上传var uploadInst = upload.render({elem: '#test1', url: 'file/upload.action', accept ...

  3. WEB漏洞-文件上传之后端黑白名单绕过

    WEB漏洞-文件上传之后端黑白名单绕过 文件上传常见验证:后缀名,类型,文件头 后缀名:黑名单,白名单 黑名单:asp php jsp aspx cgi war- 白名单: txt jpg zip r ...

  4. 第21天-WEB漏洞-文件上传之后端黑白名单绕过

    思维导图 文件上传常见验证 后缀名,类型,文件头等 黑名单:明确不允许上传的格式后缀 如:$deny_ext = array('.asp','.aspx','.php','.jsp'); 不允许上传后 ...

  5. php上传文件自动删除,jsp-解决文件上传后重启Tomcat时文件自动删除问题

    吼吼,我遇到的问题是这样的...... 我写了一个图片上传的方法,上传时,判断没有这个目录就自动建立一个.然后开始上传图片,能成功,能在服务器找到文件夹和相应的文件.但是,重启项目,或者清理缓存之后, ...

  6. 华为服务器上传文件后怎么通过链接查看,远程服务器文件上传后的操作

    远程服务器文件上传后的操作 内容精选 换一换 本节指导您基于Linux操作系统环境完成镜像文件快速导入,推荐使用云平台的EulerOS云服务器作为转换镜像格式和生成位表文件的环境.Linux操作系统环 ...

  7. Office文档上传后实时转换为PDF格式_图片文件上传后实时裁剪_实现在线预览Office文档

    Office文档上传后实时转换为PDF格式_图片文件上传后实时裁剪 前置条件 安装LibreOffice 安装OpenOffice 安装Unoconv 安装ImageMagick.x86_64 安装G ...

  8. 2020小迪培训(第21天 WEB 漏洞-文件上传之后端黑白名单绕过)

    WEB 漏洞-文件上传之后端黑白名单绕过 前言 文件上传常见验证 后缀名,类型,文件头等 后缀名:黑名单,白名单 黑名单:明确不允许上传的格式后缀 asp php jsp cgi war- 缺陷:在定 ...

  9. vue2 + elementui el-upload文件上传后回显及重新提交思路

    回显: :file-list="fileList" 可用于预览图片列表,数组内的对象格式为{name: '', url:"'}. 文件上传后,需让后端返回文件标识和服务器 ...

最新文章

  1. mongodb文档操作
  2. 使用HTML5在浏览器中开发虚拟现实业务
  3. 浅谈python的对象的三大特性之封装
  4. 《C++覆辙录》——2.9:自反初始化
  5. C++(0)--mac 使用VScode 进行C++编译、运行、调试
  6. python判断是不是整数1002python判断是不是整数_Python判断一个数是不是为整数的方法...
  7. java session 持久化_自定义实现session持久化
  8. 土拍熔断意味着什么_火爆!楼面价14615元/㎡,土拍过后房价涨,常州买房正当时!...
  9. MyBatis学习总结(20)——MyBatis完全使用指南
  10. LA2218半平面交
  11. 蔡奇视察奇安信:对成功登陆科创板表示祝贺
  12. matlab中的myerr,Error in 'MPC1/S-Function' while executing MATLAB S-function 'MY_MPCCon...
  13. 智慧公厕管理系统不断提升公厕管理水平
  14. MATLAB程序界面介绍
  15. python下载电影天堂_Python爬虫之《电影天堂》电影详情+下载地址爬取
  16. linux用户权限不够解析及解决方案
  17. H3C S3610 交换机组播静态路由的配置
  18. 中医文化之熏蒸的历史
  19. RS232和RS485概念与区别
  20. Android自定义控件开发入门与实战(11)Xfermode,Android程序员如何有效提升学习效率

热门文章

  1. 【2016阿里安全峰会】风声与暗算,无中又生有:威胁情报应用的那些事儿【附PDF下载】...
  2. TS-MPEG2视频数字水印演示程序
  3. ios c语言与windows,微软Win10直接运行iOS应用解读
  4. androiduboot reset流程
  5. TikTok投4.2亿欧元在爱尔兰开建首个欧洲数据中心,海外总部也设于英国伦敦
  6. 【转】牧羊人与领头羊
  7. 从对web services的支持来比较J2EE和.NET (转)
  8. Ajax的简历技能如何写,web前端工程师简历专业技能怎么写
  9. 关于程序员修改电脑用户名中文为字母那些事
  10. 如何使用Java技术实现微信公众号海报裂变功能