移动端预览PDF,pdf.js预览PDF文件流格式

 

一开始使用了vue-pdf效果并不理想,满足不了要求还出现兼容问题,

PDF.js似乎是一个完美的解决方案,号称兼容各种浏览器.快速且高效.界面按钮可以配置,而且也比原生iframe框架好看一些,但是一轮的使用下来,确确实实躺了不少的坑,特此记录一下全过程,希望以后使用的时候注意一点.

以下是我使用过程中碰到的问题:

1.跨域问题

2.本地开发无法预览问题

3.获取PDF文件流的请求头问题。

 

下载pdf.js官网地址:https://mozilla.github.io/pdf.js/

下载后解压。

 

下面是完整的使用过程:

1.把pdf.js放在项目根目录的public文件目录下,注意:要是没有这个文件可以放在static里效果都一样

2.添加iframe标签

<iframe :src="pdfUrl" frameborder="0" class="pdf-window"></iframe>

3.js部分:

getUrl() {

  const host = window.location.host;

  const url = `${window.location.protocol}//${host}/ + 接口地址`; //  (可拼接参数)

  this.pdfUrl = `${window.location.protocol}//${host}/nts-pt/pdfjs/web/viewer.html?file=${encodeURLComponent(url)}`; // 当前环境下调起pdfjs控件

}

说白了上面代码 url 就是后端接口地址(返回pdf文件流)

可以通过`${window.location.protocol}//${host}/nts-pt/pdfjs/web/viewer.html`或`${window.location.protocol}//${host}/nts-pt/pdfjs/web/compressed.tracemonkey-pldi-09.pdf'直接在浏览器打开查看是否正常显示默认pdf

如果本地可以连接测试环境地址那就最好了,可以直接测试预览效果

如果无法连接测试环境,可以在本地试下pdf.js是否正常使用,测试方法如下:

把 this.pdfUrl = 'http//localhost:8080/pdfjs/web/compressed.tracemonkey-pldi-09.pdf'

这种方法是可以直接打开本地f的pdf(compressed.tracemonkey-pldi-09.pdf)。能打开说明pdf正常使用,

 

4.注意:必须要了解清楚接口是否需要传token值

如果需要,配置的地方是在pdfjs里面build的pdf.js里找到createPDFNetworkStream

大概在1960行左右,

把里面的httpHeaders添加你需要的参数就可以了。

 

posted @ 2023-06-07 23:34  薄荷+猫  阅读(2208)  评论(0编辑  收藏  举报