Vue PDF文件预览打印vue-pdf

Vue PDF文件预览vue-pdf

最近做项目,遇到预览PDF这个功能,在网上找了找,大多推荐的是pdf.js,不过在Vue中还是想偷懒直接npm组件,最后找到了一个还不错的Vue-pdf 组件,GitHub地址:https://github.com/FranckFreiburger/vue-pdf#readme

不过一般GitHub上的注释比较简洁,所以这里把自己实际使用的过程总结了一下,下面贴代码

本博客源码: https://github.com/shengbid/vue-demo 这个项目里会把平时博客写的一些功能的代码都放在里面,有需要可以下载看看,有帮助的话点个star哈

引用: npm install --save vue-pdf

template代码:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bh0RKIrm-1665987646306)(//common.cnblogs.com/images/copycode.gif)]

// 上一页

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pz09FEFn-1665987646307)(//common.cnblogs.com/images/copycode.gif)]

js代码:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mqlPGiBG-1665987646308)(//common.cnblogs.com/images/copycode.gif)]

import pdf from ‘vue-pdf’ export default {
components: {pdf},
data () { return {
currentPage: 0, // pdf文件页码
pageCount: 0, // pdf文件总页数
fileType: ‘pdf’, // 文件类型
     src: ‘’, // pdf文件地址
}
},
  created: {
    // 有时PDF文件地址会出现跨域的情况,这里最好处理一下
    this.src = pdf.createLoadingTask(this.src)

}
method: { // 改变PDF页码,val传过来区分上一页下一页的值,0上一页,1下一页
changePdfPage (val) { // console.log(val)
if (val === 0 && this.currentPage > 1) { this.currentPage–
// console.log(this.currentPage)
} if (val === 1 && this.currentPage < this.pageCount) { this.currentPage++
// console.log(this.currentPage)
}
}, // pdf加载时
loadPdfHandler (e) { this.currentPage = 1 // 加载的时候先加载第一页
}
}
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hjXcBapr-1665987646309)(//common.cnblogs.com/images/copycode.gif)]

实际效果

问题补充: 文件打印乱码问题解决方法

之前有人问了关于PDF打印乱码问题,我自己试了确实有这个问题,在官网找了一下,有人提交了代码解决了这个问题,现在我把方法附上

原始的打印页面,PDF格式乱码,主要是因为PDF里使用了自定义字体,不能识别

需要修改vue-pdf安装包的pdfjsWrapper.js文件

上面后缀为1的文件是原始的,红线框起来的是我修改之后的文件

替换之后,打印就能正常显示了,

博客园貌似不能上传文件,代码太多就不放上来了,如果有需要可以找我邮箱发你,或者到官网自己修改文件

git-hup地址:https://github.com/FranckFreiburger/vue-pdf/pull/130/commits/253f6186ff0676abf9277786087dda8d95dd8ea7,

上面提供的解决文件打印乱码的问题,实现起来比较麻烦,而且现在vue-pdf的版本已经更新了,用这个方法可能还会出现空白页的问题.如果对项目没什么要求,可用用iframe来预览打印,效果会更好些,这里把方法放上来,有需要的可以试试

这里的例子是把PDF文件放在elment的弹框中,当然你可以根据你自己的适用场景来决定

html:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GzfDeD3y-1665987646312)(//common.cnblogs.com/images/copycode.gif)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gb9hpGqb-1665987646313)(//common.cnblogs.com/images/copycode.gif)]

js:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qi4FMowB-1665987646314)(//common.cnblogs.com/images/copycode.gif)]

data () { return {
src: '/static/file/中国互联网整体网民发展状况——《第31次中国互联网发展状况调查报告(上)》.pdf**', //pdf地址,这里我用的是我本地的文件,你也可以使用后台的文件

dialogVisible: true }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tIo5Q5TB-1665987646315)(//common.cnblogs.com/images/copycode.gif)]

效果展示:

打印效果:

补充内容:

朋友们,关于跨域问题,我这里说明一下,如果你是在本地localhost环境请求后台接口返回的文件地址,一般都会跨域,报错如下

这个文件地址我在浏览器可以直接打开预览

遇到这种问题,是因为你本地的localhost和你后台返回的域名不一致,可以先用一个本地静态文件调试效果,在线上环境即通过打包部署的环境(域名和返回的PDF域名一致的环境)再看效果.

另外补充一下打印的问题,通过vue-pdf自带的打印功能,打印出来的效果一般是这样

这个作者在git上也说了,现在vue-pdf的打印功能还在试验阶段,没有完善,所以寄希望于这个方法实现打印还需一段时日,上面的内容里我用了标签来预览打印,但是现在iframe已经不怎么使用了,有些项目还不允许用,这里我再补充两种打印方法

  1. 先把PDF内容转成图片后再打印

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C94moQmS-1665987646319)(//common.cnblogs.com/images/copycode.gif)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HTMH1dFr-1665987646319)(//common.cnblogs.com/images/copycode.gif)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EDMu7PIO-1665987646320)(//common.cnblogs.com/images/copycode.gif)]

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值