liuzichen

1、下载 html2canvas和jspdf  两个插件

npm install html2canvas jspdf --save

2、创建pdf.js, 代码如下

// 导出页面为PDF格式
import html2Canvas from \'html2canvas\'
import JsPDF from \'jspdf\'
export const getPdf = (id, title) => {
  // 特别重要:当页面超过一页,出现滚动条,滚动的部分生成的图片为空白
  window.pageYoffset = 0
  document.documentElement.scrollTop = 0
  document.body.scrollTop = 0

  let url = html2Canvas(document.querySelector(id)).then(function (canvas) {
    var contentWidth = canvas.width
    var contentHeight = canvas.height

    // 一页pdf显示html页面生成的canvas高度;
    var pageHeight = contentWidth / 592.28 * 841.89
    // 未生成pdf的html页面高度
    var leftHeight = contentHeight
    // 页面偏移
    var position = 0
    // a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
    var imgWidth = 595.28
    var imgHeight = 592.28 / contentWidth * contentHeight

    var pageData = canvas.toDataURL(\'image/jpeg\', 1.0)

    var pdf = new JsPDF(\'\', \'pt\', \'a4\')

    // 有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)
    // 当内容未超过pdf一页显示的范围,无需分页
    if (leftHeight < pageHeight) {
      pdf.addImage(pageData, \'JPEG\', 0, 0, imgWidth, imgHeight)
    } else {
      while (leftHeight > 0) {
        pdf.addImage(pageData, \'JPEG\', 0, position, imgWidth, imgHeight)
        leftHeight -= pageHeight
        position -= 841.89
        // 避免添加空白页
        if (leftHeight > 0) {
          pdf.addPage()
        }
      }
    }
    // 下载pdf
    pdf.save(title + \'.pdf\')
    // 输出base64字符串
    return pdf.output(\'datauristring\')
  }
  )
  return url
}

  

分类:

技术点:

相关文章:

  • 2021-10-14
  • 2021-11-03
  • 2021-12-06
  • 2021-04-24
  • 2021-07-31
  • 2021-10-31
  • 2021-08-05
  • 2022-02-23
猜你喜欢
  • 2021-11-11
  • 2021-07-19
  • 2021-12-08
  • 2021-12-08
  • 2021-08-13
  • 2022-01-26
相关资源
相似解决方案