使用JS进行页面截图, 包括SVG的支持

用到JS项目
html2canvas
SVG截图还需要用到 canvg

使用方法
引入js包

  <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
  <script src="https://cdn.bootcss.com/html2canvas/0.4.1/html2canvas.js"></script>
注意: 需要用jq3以上版本, 1.8的各版本会报错

增加js代码, 可以放到一个button的click事件里面
       html2canvas($("#container"), { // $("#container")是你要复制生成canvas的区域,可以自己选
        onrendered: function (canvas) {
          dataURL = canvas.toDataURL("image/png");

          //下载图片, dataURL 实际是图片的BASE64编码, 不是图片的url地址, 此时图片还没有url

          //open_button是一个打开图片的按钮
          $('#open_button').attr('href', dataURL);
        },
      })
普通网页的截图这样就可以了
但是SVG图形这样就不行了, 截出来始终是空白, 因此需要另一个项目canvg

需要在html2canvas之前加入以下代码
      scrollTo(0, 0);
      var nodesToRecover = [];
      var nodesToRemove = [];
      var svgElem = $("#container").find('svg');//divReport为需要截取成图片的dom的id
      svgElem.each(function (index, node) {
        var parentNode = node.parentNode;
        var svg = node.outerHTML.trim();

        var canvas = document.createElement('canvas');
        canvg(canvas, svg);
        if (node.style.position) {
          canvas.style.position += node.style.position;
          canvas.style.left += node.style.left;
          canvas.style.top += node.style.top;
        }

        nodesToRecover.push({
          parent: parentNode,
          child: node
        });
        parentNode.removeChild(node);

        nodesToRemove.push({
          parent: parentNode,
          child: canvas
        });

        parentNode.appendChild(canvas);
      });
        这个会把选择的容器内的svg对象转化成canvas对象, 后面再接html2canvas就行了
注意: 这段代码会替换原始的html对象, 可以在做之前把对象先复制一份, 图搞定之后再替回去

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值