vue将页面保存为pdf 使用 jspdf 和 html2canvas

1.安装

npm install jspdf

npm install html2canvas

 2.引入

  import { jsPDF } from 'jspdf'
  import html2canvas from 'html2canvas'

3.使用

页面<div id="body">...</div>

点击按钮

download () {
        const that = this
        // 要形成图片的div
        const canvas2 = document.getElementById('body')
        html2canvas(canvas2, {
          imageTimeout: 15000,
          logging: false,
          scale: 2
        }).then(function (canvas) {
          // 获取canvas画布的宽高
          var contentWidth = canvas.width / 2
          var contentHeight = canvas.height / 2
          //一页pdf显示html页面生成的canvas高度;
          // 设置边框
          const padding = 10
          // 到pdf里的页面高度
          var pageHeight = contentWidth / (592.28 - padding * 2) * (841.89 - padding * 2)
          //未生成pdf的html页面高度
          var leftHeight = contentHeight
          //页面偏移
          var position = 0
          //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
          var imgWidth = 595.28 - padding * 2
          var imgHeight = (595.28 - padding * 2)/contentWidth * contentHeight
          var pageData = canvas.toDataURL()
          var PDF = new jsPDF('p', 'pt', 'a4') // 第一个参数 p竖向 1横向
          //有两个高度需要区分,一个是html页面的实际高度,和生成pdf的页面高度(841.89)
          //当内容未超过pdf一页显示的范围,无需分页
          if (leftHeight < pageHeight) {
            PDF.addImage(pageData, 'JPEG', padding, padding, imgWidth, imgHeight )
          }else {
            while(leftHeight > 0) {
              PDF.addImage(pageData, 'JPEG', padding, position, imgWidth, imgHeight)
              leftHeight -= pageHeight
              position -= 841.89 - padding * 2
              //避免添加空白页
              if(leftHeight > 0) {
                PDF.addPage()
              }
            }
          }
          const title = that.param.isYer ? that.param.year + '年入料质量统计.pdf' : that.param.year + '年' + that.param.month + '月入料质量统计.pdf'
          PDF.save(title)
        })
      },

 html2canvas 配置参数 

名称默认描述
useCORSFALSE是否尝试使用CORS从服务器加载图像
allowTaintFALSE是否允许跨域图像。会污染画布,导致无法使用canvas.toDataURL 方法
proxynull代理将用于加载跨域图像的网址。如果保留为空,则不会加载跨域图像。
backgroundColor#ffffff画布背景色(如果未在DOM中指定)。设置null为透明
canvasnull现有canvas元素用作绘图的基础
foreignObjectRenderingFALSE如果浏览器支持,是否使用ForeignObject渲染
imageTimeout15000加载图像的超时时间(以毫秒为单位)。设置0为禁用超时。
ignoreElements(element) => false谓词功能,可从渲染中删除匹配的元素。
loggingTRUE启用日志以进行调试
onclonenull克隆文档以进行渲染时调用的回调函数可用于修改将要渲染的内容,而不会影响原始源文档。
removeContainerTRUE是否清除html2canvas临时创建的克隆DOM元素
scalewindow.devicePixelRatio用于渲染的比例。默认为浏览器设备像素比率。
widthElement 宽度canvas的宽度
heightElement 高度canvas的高度
XElement X偏移裁剪画布X坐标
ÿElement y偏移裁剪画布y坐标
scrollXElement 滚动X渲染元素时要使用的x滚动位置(例如,如果Element使用position: fixed)
scrollYElement 滚动Y呈现元素时要使用的y-scroll位置(例如,如果Element使用position: fixed)
windowWidthWindow.innerWidth渲染时使用的窗口宽度Element,这可能会影响媒体查询之类的内容
windowHeightWindow.innerHeight渲染时要使用的窗口高度Element,这可能会影响媒体查询之类的内容

 jspdf()

第一个参数: l:横向  p:纵向

第二个参数:测量单位("pt","mm", "cm", "m", "in" or "px")

第三个参数:可以是下面格式,默认为“a4”

  • a0 - a10
  • b0 - b10
  • c0 - c10
  • dl
  • letter
  • government-letter
  • legal
  • junior-legal
  • ledger
  • tabloid
  • credit-card

pdf.addImage()  将图像添加到PDF,addImage参数设置如下

imageDatacanvas图像
format文件格式,默认jpeg
x相当于 left 距左边位置x开始
y相当于 top 距上边位置y开始
width图片的宽度(单位是申明时的单位)
height图片的高度(单位是申明时的单位)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值