前端通过 jspdf 和 html2canvas 工具将网页生成 pdf

由于 html2canvas 的性能问题,该方案对于页数比较多的场景生成的非常慢,可以试着使用 modern-screenshot 工具看是否性能会得到提升。

javascript 复制代码
import html2canvas from 'html2canvas'
import { jsPDF } from 'jspdf'

async function exportPdf(){
  const pages = document.querySelectorAll('.report-page')
  if (!pages.length) return
  const doc = new jsPDF({
    orientation: pageConfig.pageDirection as // 页面方向
      | 'p'
      | 'portrait'
      | 'l'
      | 'landscape'
      | undefined,
    format: pageConfig.pageSize, // 页面大小,例如 'A4'
    unit: 'mm',
  })
  for (const [i, page] of pages.entries()) {
    curPage.value = i + 1 // 当前页码
    if (i !== 0) {
      doc.addPage(
        pageConfig.pageSize,
        pageConfig.pageDirection as
          | 'p'
          | 'portrait'
          | 'l'
          | 'landscape'
          | undefined,
      )
    }
    page.style.border = 'none'
    const canvas = await html2canvas(page, {
      scale: 5,
    })
    const isNormalPage = pageConfig.value.pageDirection === 'p'
    doc.addImage({
      imageData: canvas.toDataURL('image/jpeg'),
      format: 'JPEG',
      x: 0,
      y: 0,
      width: isNormalPage
        ? pageConfig.pageWidth
        : pageConfig.pageHeight,
      height: isNormalPage
        ? pageConfig.pageHeight
        : pageConfig.pageWidth,
    })
  }
  const rawdata = doc.output('datauristring')
  window.pdfData = rawdata
  doc.save(`${pageConfig.name || '预览'}.pdf`)
}

执行完 doc.save 后会自动触发浏览器下载。

相关推荐
WeiXiao_Hyy36 分钟前
成为 Top 1% 的工程师
java·开发语言·javascript·经验分享·后端
xjt_09011 小时前
基于 Vue 3 构建企业级 Web Components 组件库
前端·javascript·vue.js
我是伪码农1 小时前
Vue 2.3
前端·javascript·vue.js
辰风沐阳2 小时前
JavaScript 的宏任务和微任务
javascript
冰暮流星3 小时前
javascript之二重循环练习
开发语言·javascript·数据库
Mr Xu_3 小时前
Vue 3 中 watch 的使用详解:监听响应式数据变化的利器
前端·javascript·vue.js
hedley(●'◡'●)4 小时前
基于cesium和vue的大疆司空模仿程序
前端·javascript·vue.js·python·typescript·无人机
百思可瑞教育4 小时前
构建自己的Vue UI组件库:从设计到发布
前端·javascript·vue.js·ui·百思可瑞教育·北京百思教育
CappuccinoRose5 小时前
JavaScript 学习文档(二)
前端·javascript·学习·数据类型·运算符·箭头函数·变量声明
全栈前端老曹5 小时前
【MongoDB】深入研究副本集与高可用性——Replica Set 架构、故障转移、读写分离
前端·javascript·数据库·mongodb·架构·nosql·副本集