目录

前言

一、下载PDF预览相关文件

二、使用步骤


前言

去年就想写一篇关于uni-app的pdf预览功能,拖很久了,补上。


一、下载PDF预览相关文件

  • 下载地址
  • 解压后效果:

二、使用步骤

  • 在  static  文件夹下新建  pdf  文件夹,将解压文件放进  pdf  文件夹下(看网上很多博主把文件夹放在根目录里,我反正之前试到最后始终无法打开预览请求的PDF文件!  避坑  :放在  static 文件夹下就没问题了)
  • 如图所示:

  • 这里以  demo  演示  pdf   预览效果
  • 新建了一个  index  页面,加了一个  预览PDF  按钮

  • 代码如下:
<template><view class="content"><view class="text-area"><button @click="previewPdf()">预览PDF</button></view></view>
</template><script>export default {data() {return {}},onLoad() {},methods: {previewPdf(){console.log('=>点击了预览pdf按钮')uni.navigateTo({//保留当前页面,跳转到应用内的某个页面url: '/pages/pdfDemo/pdfView?id='+123456//带参跳转// url: '/pages/pdfDemo/pdfView'//无参跳转})}}}
</script><style>.content {display: flex;flex-direction: column;align-items: center;justify-content: center;position: absolute;top: 0;bottom: 0;left: 0;right: 0;margin: auto;}.logo {height: 200rpx;width: 200rpx;margin-top: 200rpx;margin-left: auto;margin-right: auto;margin-bottom: 50rpx;}.text-area {display: flex;justify-content: center;}.title {font-size: 36rpx;color: #8f8f94;}
</style>
  • 新建了一个  pdfView  PDF预览页面
  • web-view  是一个 web 浏览器组件,可以用来承载网页的容器,会自动铺满整个页面,这里用它来展示PDF。

  • 代码如下(  根据业务自行更改  ):
<template><view><web-view :src="url"></web-view></view>
</template><script>export default {data() {return {url: '',//PDF路径viewerUrl:'/static/pdf/web/viewer.html',//用来渲染PDF的htmlfileUrl:'/static/pdf/web/compressed.tracemonkey-pldi-09.pdf'//pdfjs自带的默认PDF};},onLoad(option) {console.log('=>进入了PDF预览页面')console.log('获取的参数=>',option)if(option.id !=undefined && option.id !='undefined' && option.id !='' && option.id !=null){this.url =this.viewerUrl+'?file='+encodeURIComponent(this.fileUrl); // encodeURIComponent 函数可把字符串作为 URI 组件进行编码;//以发起请求的方式获取预览PDF// uni.request({//    url: '/xxx/xxx/xxx/previewPdf/'+option.id,//     method: 'GET',//  header: { 'Authorization': 'Bearer ' + uni.getStorageSync('Admin-Token') },//自定义请求头//    responseType: 'arraybuffer',//    success: (res) => {//       let blob = new Blob([res.data],{type:'application/pdf;chartset=UTF-8'});//转换blob数据类型//      let href = URL.createObjectURL(blob);//        this.url =this.viewerUrl+'?file='+encodeURIComponent(href);// encodeURIComponent 函数可把字符串作为 URI 组件进行编码;//  },// });    console.log('PDF预览成功=>')}else{//无参就不预览PDFuni.showModal({//弹出提示title:'系统提示',//提示的标题content: '参数无效',//提示的内容confirmText:'返回',//取消按钮的文字,默认为"取消"showCancel:false,//是否显示取消按钮,默认为 truesuccess: (res) => {if (res.confirm) {//监听弹窗返回按钮uni.navigateBack();//返回上一页} }});}},methods: {}}
</script><style></style>
@GetMapping("/previewPdf/{id}")
public void previewPdf(@PathVariable("id") String id) {}
  • 返回文件流(Java)
    /*** pdf预览* @author luvJie-7c* @date 2022-8-5 17:31* @param fileName 文件名* @param path 文件路径* @return void*/public static String previewPdf(String fileName, String path){//获取HttpServletResponse (静态自创建)HttpServletResponse response =((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();// 验证该文件是否是存在if(new File(path).exists()){//添加跨域访问response.setHeader("Access-Control-Allow-Origin", "*");//以流的形式传输response.setContentType("application/octet-stream");// 设置文件流编码格式response.setCharacterEncoding("UTF-8");//Content-Disposition属性名 (attachment表示以附件的方式下载;inline表示在页面内打开)response.setHeader("Content-Disposition", "attachment; fileName="+fileName+".pdf");try { //输入输出FileInputStream is = new FileInputStream(path);ServletOutputStream out = response.getOutputStream();byte[] buffer = new byte[1024];int i = 0;while ((i = is.read(buffer)) != -1) {out.write(buffer,0,i);}//缓存区的数据进行输出out.flush();//关闭流out.close();is.close();} catch (IOException e) {e.printStackTrace();}}}

uni-app实现PDF预览功能(避坑看这)相关推荐

  1. 实现微信小程序和手机app(基于vue)PDF预览功能

    引言:最近在做微信小程序和手机端app开发(基于vue),实现一个pdf预览功能. 需求:点击pdf列表,跳转到预览pdf页面,页面上强制阅读10s后,显示一个按钮返回,更新阅读状态: 要求:不能调用 ...

  2. 微信小程序实现PDF预览功能——pdf.js(含源码解析)

    文章目录 前言 一.pdf.js 是什么? 二.使用步骤 1.下载库文件 2.使用方式 微信小程序端--使用 web-view 标签 H5 端--使用 iframe 标签(使用vue框架) 3.更改源 ...

  3. 控制chrome中PDF预览工具栏

    在实际开发中,遇到使用chrome自带的PDF预览功能,前端把后台返回的地址,通过XMLHttpRequest转换成blob,并在blob地址后拼接上文件名称,通过创建embed展示PDF: 这种方法 ...

  4. 电子档案目录PDF预览

    # 需求 档案电子化  著录模块  需要PDF预览功能  方便打印标准A4纸质文档 模版如下图: 代码流程: 控制层: /*** 预览档案目录*/@GetMapping("preview-c ...

  5. APP在线演示预览网站appetize.io详细使用介绍

    appetize.io 是一个为iOS和Android提供APP在线演示的网站,只要将你的Demo程序运行后的.app文件打包UPLOAD到appetize.io,上传完成后,会给对应的邮箱发一个链接 ...

  6. vue中pdf预览组件_Vue+ElementUI使用vue-pdf实现预览功能

    Vue + ElementUI项目中使用vue-pdf实现简单预览,供大家参考,具体内容如下 1.安装 vue-pdf npm install --save vue-pdf 2.在vue页面中导入对应 ...

  7. java零碎要点010---Java实现office文档与pdf文档的在线预览功能

    最近项目有个需求要java实现office文档与pdf文档的在线预览功能,刚刚接到的时候就觉得有点难,以自己的水平难以在三四天做完.压力略大.后面查找百度资料.以及在同事与网友的帮助下,四天多把它做完 ...

  8. 前端【vue】实现文档在线预览功能,在线预览pdf、word、xls、ppt等office文件

    前端江太公 前端实现文档在线预览功能 最直接的就是使用XDOC 文档云服务 XDOC可以实现预览以DataURI表示的DOC文档,此外XDOC还可以实现文本.带参数文本.html文本.json文本.公 ...

  9. office 文档 在线预览功能实现(word,excel,pdf,ppt等多种格式)——使用https://view.xdocin.com/view 提示文档过期——基础积累

    web实现office文档在线预览功能--基础积累 最近遇到一个需求,就是要实现多种文档链接的在线预览,最简单的方式就是通过window.open(url地址)的方式来实现. 但是如果要求是在一个弹窗 ...

最新文章

  1. OpenStack如何实现高可用集群介绍
  2. Tech UP——EGO北京分会成立啦
  3. python 中map()和lamda的简单实用
  4. c++中有表示正无穷的数吗_阅读:贯穿编程人生CSAPP[2]信息表示
  5. RabbitMQ code=200, text=Goodbye比较萌新的问题大佬绕道,乌拉~!
  6. Javascript 引擎工作机制(js层面梳理)
  7. C#中主窗体Panel中加载其他多个窗体Panel控件
  8. 前端学习(2164):runtimeonly和runtimecompiler
  9. 漫步最优化二十八——三次插值法
  10. docker容器使用-图解
  11. Node的textContent属性
  12. 尚学堂马士兵linux教程之文件管理
  13. 修改HTML网站模板,SEO如何修改简单网页模板!
  14. Windows 10 Insider Preview ISO 下载地址
  15. pdf和word等文档添加水印
  16. c++ tuling123_现代编译原理-图灵计算机科学丛书.pdf
  17. 新零售时代,异业联盟怎么做?
  18. C#读取和写入文件(干货分享)
  19. 天龙八部TLBB系列 - 关于技能冷却和攻击范围数量的问题
  20. 记录一下自己常用的数据库,以备不时之需

热门文章

  1. java 直线交点_[Java教程]谈谈求线段交点的几种算法(js实现,完整版)
  2. 重温儿时经典《坦克大战》
  3. Github 怎么用?(一)
  4. 武汉大学 计算机学院 许传奇,许永超 - 教师简历 CV- 武汉大学计算机学院
  5. 从欧几里得到拓展欧几里得
  6. java语言基础总结ppt_我的java基础知识总结ppt
  7. 《CISP》(三)信息安全管理
  8. 【网络是怎么连接的】—— 1.1 生成 HTTP 请求消息
  9. CSS3解析抖音 LOGO制作
  10. 网络互连有何实际意义?进行网络互连时,有哪些共同的问题需要解决?