vue-pdf.js 在线预览问题

JavaScript027

vue-pdf.js 在线预览问题,第1张

最近修改公司vue项目中使用pdf.js来实现在线预览上传的各类文件.由于使用pdf.js在预览时是直接在标签内将src属性赋值为要请求的地址.这就导致一个问题,会直接请求服务器的文件路径地址,而这个服务器文件路径就会暴露出来。处于安全性考虑在预览请求时不再返回地址,改为通过调用普通接口,而是统一返回流(word,pdf)或者base64(jpg,png...)。.前端再进行解析并实现在线预览.

此时遇到第一个问题:

        这个请求是在插件中进行的无法携带项目中封装的各类请求头信息(token..等)。 翻看pdf.js源码及网上总结.发现一个底层方法 

         该方法可传一个对象作为参数,对象内可以添加url(所请求的接口),headers(请求头信息)等.... . 有了这个方法就好处理了.

         最后在将该方法当做变量赋值给pdf的src.大功告成.

         最后再补充一些 : @loaded="docLoaded" @page-loaded ="pageLoaded" 这两个方法为加载预览文件时的loading事件,

最后引一波示例,

react 实现 pdf 文档可翻页查看,可放大缩小及全屏等功能,选的是 react-pdf 插件, react-file-viewer 插件也试了下,可以查看 pdf ,不过是一次性加载全部,最终选了前者

Ant Design Pro + react-pdf 插件

插件地址:

https://www.npmjs.com/package/react-pdf

运行后报错:

解决:

可以加载出pdf即可

先按自己想要的样式把界面搭好

一些功能主要是修改 Page 组件参数来达到想要的效果

修改 Page 的 pageNumber 属性值,加一些特定约束,比如已经翻到了第一页或者最后一页,输入的数值最小为1,最大为pdf的总页数值

修改 Page 的 width 属性值,如果单纯放大缩小,也可以用 scale 属性,不过跟宽度同时用会有点乱,索性只用了宽度

放大缩小过程中发现问题,页面居中用的 flex 布局, pdf 放大溢出后,无法通过滚动条完全展示

子元素加了样式,已修复

样式:

js:

直接在 <Document file={{url:xxx,withCredentials:true}}/> 不行,要放到 state 中

见插件相关issues:

https://github.com/wojtekmaj/react-pdf/issues/308#issuecomment-443538284

你这个问题比较专业,回答起来比较麻烦,我们先来理一理该如何去解决问题,问题是:你是向要将PDF文件进行在线打开,去发现无法将文件进行打开。

原因可能是:

1.你的PDF文件和电脑起到冲突的原因

2.可能是文件在接收或者在下载的时候收到损坏!

如果是这个问题的话那就简单,小编可以教你使用一个方法可以将它解决!

1.其实我们可以使用在线PDF转换器就可以了,不仅可以对它进行在线的阅读,还可以对它进行其他格式的在线转换或者PDF文件的编辑!

2.我们打开网站之后就可以将文件进行上传上去,但是要记住,文件大小不要超过2M,然后进行上传!

3.点击上传之后我们就可以看到文件,然后我们就可以对文件进行阅读或者将不足的地方进行编辑,达到完善的结果!

以上就是我的个人见解,希望对小伙伴们有所帮助!