一、使用

1、安装

  1. npm install --save html2canvas

2、引入

  1. import html2canvas from "html2canvas";

3、封装方法和使用

  1. //方法
  2. convertToImage(container, options = {}){
  3. //document.body.scrollTop = document.documentElement.scrollTop = 0;//解决渲染不完整问题
  4. // 设置放大倍数
  5. const scale = window.devicePixelRatio;
  6. // const scale = 2; //最好用2,避免不同电脑浏览器产生效果不同
  7. // 传入节点原始宽高
  8. const width = container.offsetWidth;
  9. // const width = 375;
  10. const height = container.offsetHeight;
  11. // html2canvas配置项
  12. const ops = {
  13. scale,
  14. width,
  15. height,
  16. useCORS: true,
  17. allowTaint: false,
  18. ...options
  19. };
  20. return html2canvas(container, ops).then(canvas => {
  21. // 返回图片的二进制数据
  22. return canvas.toDataURL("image/png");
  23. });
  24. }
  25. //使用
  26. async getImg(){
  27. this.imgBlobData = await this.convertToImage(this.$refs.container);
  28. },

二、html包含图片,图不显示问题


当html中含有图片时,html2canvas对其进行渲染会产生跨域问题,解决方案如下:

1. 首先设置useCORS: true,不需要allowTaint: true

添加了allowTaint: true属性生成的canvas会导致toDataURL方法调用失败

  1. html2canvas(document.getElementById('download'), {
  2. backgroundColor: null,
  3. useCORS:true,
  4. // width: document.getElementById('download').width,
  5. // height: document.getElementById('download').height,
  6. // scrollY: 0,
  7. // scrollX: 0,
  8. // logging:true
  9. }).then((canvas) => {
  10. let url = canvas.toDataURL('image/png');
  11. this.$refs.downimg.src = url
  12. this.imgUrl = true
  13. })

2. img标签设置crossorigin=”anonymous” 属性

3.清理浏览器缓存或者给img的url后面拼上伪版本号,像这样

三、html2canvs文字重叠问题

在要转化的html的css中添加属性

  1. letter-spacing: 0.5px;