vue前端pdf实现

说明
其实实现这个预览代码量很少,核心代码就一行,接下来我介绍一下这个实现过程

准备工作
你首先得准备一个 pdf 插件包,比如:我这边的项目包里的 src 文件夹的 static 文件夹下面就有一个 pdf 的插件包,里面包含 build 以及 web 两个文件夹。

自己去 http://mozilla.github.io/pdf.js/getting_started/#download 下载一个稳定版本的就行,目录大致如下
 

├── build/
│   ├── pdf.js                             - display layer
│   ├── pdf.js.map                         - display layer's source map
│   ├── pdf.worker.js                      - core layer
│   └── pdf.worker.js.map                  - core layer's source map
├── web/
│   ├── cmaps/                             - character maps (required by core)
│   ├── compressed.tracemonkey-pldi-09.pdf - PDF file for testing purposes
│   ├── debugger.js                        - helpful debugging features
│   ├── images/                            - images for the viewer and annotation icons
│   ├── locale/                            - translation files
│   ├── viewer.css                         - viewer style sheet
│   ├── viewer.html                        - viewer layout
│   ├── viewer.js                          - viewer layer
│   └── viewer.js.map                      - viewer layer's source map
└── LICENSE

 

核心代码实现

1、我们在上面的基础上 用vscode 的 live server 启动一个服务,打开浏览器访问 viewer.html 文件

http://127.0.0.1:5500/apprcontrolweb/src/static/pdfjs/web/viewer.html

页面预览的 pdf 文件正是 compressed.tracemonkey-pldi-09.pdf

我们打开 viewer.js,大概在 4242 行的样子,有个默认的配置项

通过这个 defaultUrl 参数,我们可以快速找到 1818 行

从而确定链接的参数 file 参数就是我们需要的 pdf 文件路径参数

2、通过上面的分析基本确定写法

比如:我这边的写法就是下面的样子,这个就是预览的核心代码

<iframe :src="`../../..${baseUrl}static/pdfjs/web/viewer.html?file=${encodeURIComponent(previewUrl)}`">
</iframe>

第二个:encodeURIComponent(previewUrl)

encodeURIComponent() 函数可把字符串作为 URI 组件进行编码。

至于里面的 previewUrl 这个参数,就是后端的下载 pdf 的 api

看下我这边的效果如下:

大致链接:

pdf 预览效果:

3、关于打包问题,我们访问的是 ApprControlWeb/static 说明我们打包的时候需要将 static
文件打包进入 ApprControlWeb 包里,不然就没有这个资源可以访问

这个功能的实现需要 copy-webpack-plugin 插件处理,这里建议跟我的版本一样,因为不同版本可以写法不一样

npm i copy-webpack-plugin@^5.1.0 -D

安装好依赖之后

我们需要在 vue.config.js 文件里面配置

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

module.exports = {
 configureWebpack: config => {
   if (process.env.NODE_ENV === 'production') {
       // 将单个文件或整个目录复制到构建目录。
       config.plugins.push(
         new CopyWebpackPlugin([{ 
           from: 'src/static',
           to: 'static'
         }])
       );
   }
 }
};

npm run build 之后你会发现,static 打包到 ApprControlWeb 包里了 

方法二

如果以上的还是有问题,比如访问静态资源跳转首页,不妨看看第二种做法,更简单一点,我目前就是采用这种的,自己用 nginx 部署项目测试没问题

<iframe
    :src="`${baseUrl}/static/pdfjs/web/viewer.html?file=${encodeURIComponent(previewUrl)}`">
</iframe>
data() {
    return {
        baseUrl: process.env.NODE_ENV === 'production' ? '/ApprControlWeb' : '' // 基础路径
    }
}

不同之处就是 pdfjs 放置的位置不同,直接将下载的包放到 public 目录下就行

如图所示:

 

以上就是我的总结,希望对你有所帮助,如有错误欢迎指出

【pdfjs资源链接-https://github.com/mozilla/pdf.js/】

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值