import html2canvas from 'html2canvas'
import jsPDF from 'jspdf'

export default (id, name) => {
  const demo = document.getElementById(id)
  demo.style.overflow = 'visible'
  html2canvas(demo, {
    useCORS: true, // 允许跨域
    scrollX: -8, // 修正x轴偏移
    height: document.getElementById(id).scrollHeight, //
    width: document.getElementById(id).scrollWidth, // 为了使横向滚动条的内容全部展示，这里必须指定
    background: '#FFFFFF' // 如果指定的div没有设置背景色会默认成黑色
  }).then(canvas => {
    var contentWidth = canvas.width
    var contentHeight = canvas.height
    // 一页pdf显示html页面生成的canvas高度;
    var pageHeight = (contentWidth / 595.28) * 841.89
    // 未生成pdf的html页面高度
    var leftHeight = contentHeight
    // pdf页面偏移
    var position = 0
    // a4纸的尺寸[595.28,841.89]，html页面生成的canvas在pdf中图片的宽高
    var imgWidth = 555.28
    var imgHeight = (555.28 / contentWidth) * contentHeight
    console.time('222')
    var pageData = canvas.toDataURL('image/png', 1)
    // eslint-disable-next-line new-cap
    var pdf = new jsPDF('', 'pt', 'a4')
    console.timeEnd('222')
    // 有两个高度需要区分，一个是html页面的实际高度，和生成pdf的页面高度(841.89)
    // 当内容未超过pdf一页显示的范围，无需分页
    console.time('444')

    if (leftHeight < pageHeight) {
      pdf.addImage(pageData, 'JPEG', 20, 0, imgWidth, imgHeight)
    } else {
      while (leftHeight > 0) {
        pdf.addImage(pageData, 'JPEG', 20, position, imgWidth, imgHeight)
        leftHeight -= pageHeight
        position -= 841.89
        // 避免添加空白页
        if (leftHeight > 0) {
          pdf.addPage()
        }
      }
    }
    console.timeEnd('444')

    console.time('555')

    pdf.save(name + '.pdf')
    console.timeEnd('555')
  })
  demo.style.overflow = 'auto'
}
