vue项目前端页面导出PDF(开箱即用解决方案)

一、首先为考虑为啥用前端导出PDF?

个人看法:当客户想要页面上得内容导出PDF文件时,并且想要页面得样式。

其他情况:导出这个功能后端做更合适一些 ~

二、网上很多人用html2Canvas+jsPDF去做前端截图导出(个人发现有不少坑)

1. html2canvas不能导出文本域textarea多行内容(只能导出一行)

2. 还有黑背景等问题(网上很多)

三、直接上代码(CV试一试)

因为发现了上面html2Canvas得问题,所以我采用了dom-to-image,jsPDF 这个组合(平替方案)

yarn add dom-to-image jspdf
import domtoimage from 'dom-to-image'

import jsPDF from 'jspdf'
  // 导出
  async takeScreenshot() {
        //获取你想要导出得页面元素
    const element = this.$refs.formWrap as HTMLElement

    const options = {
      quality: 1,
      width: element.offsetWidth,
      height: element.offsetHeight
    }

    const imgData = await domtoimage.toPng(element, options)

    const pdf = new jsPDF({
      orientation: 'portrait', // 纵向
      unit: 'mm', // 单位为毫米
      format: 'a4' // A4纸张大小
    })

    // 计算需要多少页A4纸
    const pageHeight = pdf.internal.pageSize.getHeight()
    let imgHeight = (options.height * 210) / options.width
    let heightLeft = imgHeight

    let position = 0
    pdf.addImage(imgData, 'PNG', 0, position, 210, imgHeight)
    heightLeft -= pageHeight

    // 分页
    while (heightLeft >= 0) {
      position = heightLeft - imgHeight
      pdf.addPage()
      pdf.addImage(imgData, 'PNG', 0, position, 210, imgHeight)
      heightLeft -= pageHeight
    }

    pdf.save('导出得文件名字.pdf')
  }
  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值