知识库模块,知识库新建功能中,文件内容支持富文本编辑和文件上传两种方式,其中文件上传支持word,excel,ppt,pdf几种格式。对应的知识库内容展示页面,根据上传的方式不同也有两种方式展示。

  1. 对于富文本的内容,直接在div标签中用v-html予以展示。
  2. 对于上传的文件,若为pdf文件,直接存储;若为office的三个类型文件,分成六种尾缀('doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx')在服务器通过openOffice转成pdf的格式存储。然后统一在iframe标签中运用pdf.js插件展示。

对于只展示pdf文件的情况,可以直接在iframe标签中,src指向地址,不用通过pdf.js插件展示,这是因为浏览器都自带有pdf阅读器可以解析。但不同浏览器的pdf阅读器都不同,无法要求pdf阅读器禁止用户下载,搜索等定制化要求。由于需求要求统计文档下载次数,我们单独做了下载的入口,故需要将pdf阅读器中的下载隐藏,我们引入pdf.js插件解析。

首先肯定是导入插件,从官网直接下载,链接:http://mozilla.github.io/pdf.js/getting_started/#download,注意放在static文件目录下,

这里面有核心的pdf.js和pdf.worker.js,以及展示pdf的viewer页面把它作为静态资源来编译,基本想要的build和web这两个重要文件夹的东西都正常编译。

关键代码:

<iframe ref="mainiframe" v-if="this.isPdf" :src="fullURL" :style="{height: maxHeight+'px'}" width="100%" @load="vueFunc"></iframe>

preBase: '/gacenter',

base: '/static/pdf/web/viewer.html?file=',

// pdf流的接口为'/knowledge/word/getPdfStreamById?id='

// url必须进行encode编码  把参数file后传入的动态参数中特殊字符转义

this.checkURL = encodeURIComponent(this.preUrl + '/knowledge/word/getPdfStreamById?id=' + this.detailInfo.id);

// 在测试服务器上,viewer.html的路径发生了变化,需要加上this.preBase '/gacenter'

if (this.axios.defaults.baseURL === '/gacenter/api/v1') {

this.fullURL = this.preBase;

}

this.fullURL = this.fullURL + this.base + this.checkURL;

  1. 后台要返回数据流

用这种方式必不可少的是跨域问题,你存储文件的服务器路径会和项目产生跨域,我的解决办法是,让后台返回流的形式返回文件,后台代码案例:

  1. 修改源码支持跨域

pdf.js是不支持跨域文件加载的  直接加载是不会成功的。会报  “file origin doesnot match viewer”错误。 所以我们得改变一下源码

把这句警告直接注释就行了。

  1. 打包后viewer.html相对路径发生变化

打开config/index.js,看其中的assetsPublicPath值改为,在引用的iframe中base: '/static/pdf/web/viewer.html?file=', 前加入前缀。

  1. 前后端分离在pdf.js中修改withCredentials默认false为true支持跨域。

vue 使用pdf.js相关推荐

  1. vue使用pdf.js实现移动端在线PDF文件预览

    背景 产品需求涉及到动态的PDF展示,PDF是由后端去生成的,然后下发给前端在线的cdn地址,H5需要实现在线PDF预览的能力 方案 H5展示合同PDF,有很多实现方式.但是通过尝试后发现在不同操作系 ...

  2. springboot+vue整合pdf.js实现预览pdf

    前景回顾: 上一次说到使用浏览器自带的预览pdf功能所遗留的问题,360浏览器不够给力,IE的我没测,估计也不行,于是乎我又翻阅资料(度娘)找到了一种新的实现方式,使用pdf.js实现 如果想看使用浏 ...

  3. vue版pdf.js 在线预览pdf文件流

    1.简介 由于我使用的是若依版的vue前端框架(ElementUI二开),因此不知道为什么在前端配置pdf.js一直无法生效,所以换了一个思路,将pdf.js相关文件放置在后台代码中,以访问后台页面的 ...

  4. 使用vue引入pdf文件

    vue使用iframe引入pdf文件 在网上找的很多文章都显示需要添加pdf.js来引入vue文件,但是还有一个很简单的办法就是使用iframe框架引入pdf 效果 使用iframe框架引入的话代码会 ...

  5. fis3+vue+pdf.js制作预览PDF文件或其他

    人生第一篇博客,的确有点紧张,但有些许兴奋,因为这对于我来说应该是一个好的开始,以此励志在技术的道路上越走越远. 看过了多多少少的技术博客,给自己带来了很多技术上的收获,也因此在想什么时候自己也可以赠 ...

  6. Vue项目中使用基于pdf.js的vue-pdf插件在pc浏览器下阅览PDF文件

    最近项目中需求为在浏览器上阅览PDF格式的文件,之前没有写过,随即上网查阅,发现大家常使用的为两个插件. 其一是火狐出品的pdf.js,github地址:https://github.com/mozi ...

  7. php+预览和下载pdf文件,vue实现在线预览pdf文件和下载(pdf.js)

    最近做项目遇到在线预览和下载pdf文件,试了多种pdf插件,例如jquery.media.js(ie无法直接浏览) 最后选择了pdf.js插件(兼容ie10及以上.谷歌.安卓,苹果) 强烈推荐改插件, ...

  8. Vue项目中利用pdf.js实现pdf内容滑选文字展示与搜索功能

    Vue项目中利用pdf.js实现pdf内容滑选文字展示与搜索功能 需求:在pdf中鼠标滑动选中一段文字,将选中文字展示到input框中(pdf在iframe中) 完成效果: 关于pdf的引用:我是直接 ...

  9. 前端vue项目(使用pdf.js) pdf展示及pdf工具栏放大缩小功能实现

    前端vue项目(使用pdf.js) pdf展示及pdf工具栏放大缩小功能实现 1.vue项目pdf展示 2.pdf工具栏放大缩小功能 文章目录 前端vue项目(使用pdf.js) pdf展示及pdf工 ...

最新文章

  1. SSH项目的简单table及其分页框架
  2. 当redis执行flush操作后的补救措施
  3. UI debug mode
  4. 前后端分离中的权限管理思路
  5. FCC 中级算法题 Where art thou
  6. oracle取_后的数字,Oracle SQL语句实现数字四舍五入取整
  7. C语言 几种排序方法(冒泡、选择、插入、归并、快速)
  8. ORACLE专有模式与共享模式
  9. ios 表情符号 键盘_如何在iPhone和iPad上从键盘上删除表情符号按钮
  10. 头脑王者 物理化学生物
  11. JMeter-Ramp-up Period解释
  12. 矩母函数求期望与方差
  13. 积沙成塔之VC不规则按钮的创建
  14. 通过检查table_locks_waited和table_locks_immediate状态变量来分析系统上的表锁定争夺
  15. JAVA工具类-根据身份证进行性别和年龄计算
  16. 什么软件可以听学业水平测试网课,免费听网课app推荐
  17. 我最喜爱的九位历史人物 - 曾国藩(Space搬家)
  18. 嘿嘿,我的读者拿到阿里offer,复盘他的时间轴
  19. Hamming distance - 汉明距离
  20. 智能算法集成测试平台V0.1实战开发

热门文章

  1. MySQL学习博客第一篇
  2. 计算机电子信息类专业大学排名,电子信息工程专业大学排名 2020全国排行榜
  3. 鸿蒙系统拟物化图标,疑Flyme8 UI曝光:极致拟物化设计引领icon风
  4. 特里回归战世界杯 英足总主席力挺 霍奇森已拒绝
  5. CCF201709-2 公共钥匙盒(JAVA)
  6. JAVA游戏土行孙_挖掘机的三种形态《非人学园》土行孙快速上手指南
  7. 吴穹:金融行业已来到全面推行数字化研发管理的时点
  8. macOS Mojave 10.14.2 原版镜像
  9. TUANDUIZUOYE
  10. android禁止手机访问某个ip,如何禁止手机访问某个网站