前段时间有个支持在线学习功能的项目,有需要在线预览pdf格式课件的功能,我就想在线预览pdf多简单,因为大部分浏览器都支持打开pdf文件,所以直接放个iframe然后src是pdf文件的地址不就行了吗,so easy!!(什么?兼容性?兼容性是什么东西?(づ ̄3 ̄)づ不是Chrome别跟我说话)

本来以为就这样了,可惜,天不遂人愿,领导来提需求了,我们这是支持教学、学习的平台,所以pdf的内容需要支持复制的,并且因为老师要讲课,最好能够支持类似PPT播放的功能......相顾无言,浏览器直接打开的就支持复制,但是播放功能是什么鬼哟!(我好惨一男的)

c0246d7ad8fbf75776d478d44e0af20a 吐槽一番,还是老老实实去实现功能吧,但是GitHub找了一圈vue项目的pdf轮子,基本都是大同小异,基本思想就是使用canvas把pdf内容绘制出来,但是这样最大的一个问题就是pdf的内容完全没办法复制了,第一个需求就不满足了,没办法只能扩大搜索范围,最终瞄准了pdf.js,在官网的

demo

里试了下,领导的需求完全满足,所以只能排除万难把pdf.js引入项目了。

导入pdf.js插件

1.官网下载源包

贴上地址,不想踩坑就老老实实下载稳定版本吧

34ffbe5c7727d0ad52cb53856241ab1e

2.放入项目

放在vue项目static目录下,目录结构如下:

2849fc453e58715328827a51f0c9f298

3.修改一些源码配置

因为pdf.js是不支持跨域文件加载的 直接加载是不会成功的。会报 “file origin doesnot match viewer”错误,所以需要把viewer.js文件内的抛出错误这一行报错注释掉,这个修改是看了这位老哥的博客,贴上他的文章地址:链接

7d86474c7f1d60ed261f4138c48fb8db

项目使用

使用的话很简单,页面放一个iframe,然后src等于到viewer.html的相对路径,然后file=后端返回的文件路径 '/static/pdfjs/web/viewer.html?file=' + pdfVisitUrl ,这样就大功告成了..........才怪!!!坑还是要爬的,当然后端返回流文件形式前端解析打开当然是更好了,这个可以看一下上面贴的那个博客

坑1

因为服务端返回的是文件链接,但是为了保证文件的保密性,防止链接直接复制给其他人其他人就可以随便打开使用这个问题,后端开发人员在文件链接后面添加了一些具有时效性的token之类的东西,然后文件链接就变成这样了 http://10.20.124.151/group1/M00/00/02/ChR8l1zBdSuAXoATAAvc4itpNIU648.pdf?token=ee94d7d3b3452c62b18364698839834b ,但是pdf.js默认只允许传简单路径,因为pdf.js无法判断token是viewer.html的参数还是所要预览文件的参数,所以需要先对返回的文件链接进行encodeURIComponent编码

:src="`/static/pdfjs/web/viewer.html?file=${encodeURIComponent(pdfVisitUrl)}`"

frameborder="0"

class="pdf-window"

>

复制代码

这样的话这个坑算是爬过了

坑2

解决了上面的问题,是不是觉得差不多了,我能说到这个时候我程序都还没法运行,页面还是黑的吗?因为pdf.js作为静态资源根本没被识别打包,相对路径根本找不到,我使用npm run build打包尝试了一下发现打包后的文件中根本找不到pdf.js

3a3b1bbbca33fa813f3a69a880a51b5d

后来研究了webpage,发现针对静态资源打包主要是使用一个copy-webpack-plugin的插件,所以在webpack.prod.conf.js和webpack.dev.conf.js两个文件中加上下面代码

const CopyWebpackPlugin = require('copy-webpack-plugin')

new CopyWebpackPlugin([

{

from: path.resolve(__dirname, '../src/static'), // 这个路径使用的是static目录相对于当前js文件的相对路径

to: config.dev.assetsSubDirectory,

ignore: ['.*'] // 匹配所有,把static目录下文件一股脑全部作为静态资源打包,省的一些幺蛾子

}

])

复制代码

保存,重新npm run dev,这次终于ojbk了,可以洗洗睡了

但是,后面我看了一下其他版本的vue-cli发现很多版本的都能够直接把pdf.js作为静态资源正常打包,可能就我们项目使用的这个版本是个坑吧,所以如果你在开发中发现静态资源可以正常打包就忽略坑2吧。

看看时间也差不多了,准备下班

下班我是一定要走的,耶稣都拦不住,我说的!!

6bfea81372b7ef2f7d9cb9999094e082

php vue pdf预览,Vue项目使用pdf.js相关推荐

  1. antd 实现pdf 预览_React下实现pdf在线预览

    问题背景 因为项目需要,在react项目中需要实现pdf文件的预览. 环境配置 node: v10.18.1 react: v16.8.x yarn: v1.21.1 技术调研 截止2020年2月,市 ...

  2. java pdf预览打印_Android实现PDF预览打印功能

    最近在做一个项目,需要用到android手机连接打印机进行打印的功能,目前在网上找到的教程介绍的都是蓝牙连接热敏打印机(pos机大小的打印机)和蓝牙打印机,如果连接日常所见到的网络打印机,进行打印,很 ...

  3. Vue前端JavaScript实现PDF预览与图片预览

    Vue前端JavaScript实现PDF预览与图片预览 说明 PDF.JS 代码实现 预览测试 embed与iframe标签 `<embed>` `<iframe>` 浏览器预 ...

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

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

  5. 文档在线预览(四)使用js前端实现word、excel、pdf、ppt 在线预览

    文章目录 实现方案 一.docx文件实现前端预览 1.docx-preview 2.Mammoth 二.PDF文件实现前端预览 1.pdf.js 2.pdfobject.js 3.vue-pdf 4. ...

  6. vue 项目中实现pdf预览 pdf打印 pdf下载

    在Vue项目中实现PDF预览.打印和下载可以通过以下步骤来实现: 安装pdf.js pdf.js是一个JavaScript库,可以用于在Web上渲染PDF文件. 可以使用npm安装pdf.js,命令如 ...

  7. pdf预览在vue项目中的使用兼容ie浏览器

    最近做项目有需求需要pdf在线预览并支持下载,而且还要兼容ie浏览器,之前又是使用过vue-pdf插件在chrome上没有问题但是在ie上不兼容.最后使用了pdf.Js这个原生库,虽然网上有许多使用教 ...

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

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

  9. PDF预览完整解决方案及各种兼容(VUE版)

    PDF预览完整解决方案及各种兼容(VUE版) PDF预览完整解决方案及各种兼容(VUE版) - 掘金 前端学习使者正在上传-重新上传取消 2021年11月12日 16:57 ·  阅读 2547 一. ...

最新文章

  1. 互联网50年类脑架构技术演化图
  2. 【HoorayOS】开源的Web桌面应用框架(第二版 v120311)
  3. 三十一、Python读写docx文件
  4. 前端学习(3171):react-hello-react之reduce
  5. Spring笔记③--spring的命名空间
  6. zoj 3761(并查集+搜索)
  7. java logback 使用_java日志配置之logback的使用
  8. Word字体样式及样式库的使用
  9. Windows:文件系统FAT32、NTFS和exFAT
  10. java画图抗锯齿_Android编程画图之抗锯齿解决方法
  11. 使用CCHttpClient进行cocos2d-x网络编程
  12. python爬虫excel数据_最简单的爬数据方法:Excel爬取数据,仅需6步
  13. 最新Axure RP 9.0.0.3675 授权码 license
  14. ssh登录ubuntu
  15. violate,synchronized
  16. linux 扫描wifi
  17. fetch用英语解释_fetch是什么意思中文翻译
  18. 今天股票分化好严重,一些大盘股奔涨停,一些小盘股奔跌停
  19. xAd:南京大学大二学生开发的视频内广告动态植入技术
  20. 领导说,不懂汇报,怎么给你升职?让我学习麦肯锡的:金字塔原理、MECE法则...

热门文章

  1. linux系统桌面黑屏,Ubuntu10.04启动黑屏解决办法
  2. n6 tenda 固件_腾达N6无线路由器的设置教程
  3. 开挂的00后!17岁「天才少女」被8所世界名校录取,最终选择MIT计算机系
  4. 【moeCTF题解-0x05】Misc
  5. jpeg压缩简单介绍及huffman table
  6. OPPO发布智能眼镜有点中二,外表酷似龙珠“战五渣测试仪”,可悬浮显示通知和导航翻译...
  7. linux tcp bind 失败,【技术分享】开发Linux上带有基本认证的TCP Bind Shell
  8. 精品软件-每日更新20131015
  9. Flash中使用AS3改变元件整体颜色,模拟涂鸦
  10. 对于清北学堂2018国庆刷题班的学习总结