html2canvas - screenshot web page

219 阅读1分钟

html2canvas 简介

html2canvas是一个实现网页截图的库,允许你直接在用户浏览器上获取网页的截图或部分内容。屏幕截图是基于DOM的,因为它不做实际的屏幕截图,而是基于页面上可用的信息构建屏幕截图,因此它可能不是100%准确的。它只能正确地描述它所理解的属性,这意味着有许多CSS属性不起作用,比如动画,iframe此类。 官网链接 ( html2canvas.hertzen.com/

// Install NPM
npm install --save html2canvas

// Install Yarn
yarn add html2canvas

// use
import html2canvas from 'html2canvas'

// html
<div id="capture" style="padding: 10px; background: #f5da55">
    <h4 style="color: #000; ">Hello world!</h4>
</div>

// js
html2canvas(document.querySelector("#capture"), { options }).then(canvas => {
    document.body.appendChild(canvas)
});

配置项options

属性名默认值描述
allowTaintfalse是否允许不同源的图片污染画布
ignoreElements(element) => false布尔函数,用于从渲染中删除匹配元素
proxynullUrl 到代理,用于加载跨域图片资源。如果留空,则不会加载跨域图片。
removeContainertrue是否清理克隆的 DOM 元素,html2canvas 暂时创建。
useCORSfalse是否尝试使用 CORS 从服务器加载图片
widthElement widthcanvas 画布宽度
heightElement heightcanvas 画布高度

Tips:

  1. 允许截屏非本地图片(比如在oss上 options需要配置 { useCORS: true, allowTaint: true } 对应的img属性需要配置 crossOrigin="anonymous"
{
    useCORS: true,
    allowTaint: true
}

<Image imgProps={{ crossOrigin: 'anonymous' }}/>
  1. 遇到img做为bggroud的时候 遇到img作为backgroud的时候,这个时候对background-image没有crossOrigin属性
//把图片提前加载,类似这样

<Image
  src={bgImgSrc}
  crossOrigin="anonymous"
  style={{ display: 'none' }}
/>
<div style={{ backgroundImage: `url('${bgImgSrc}')` }}>
</div>
  1. 截屏时候需要忽略掉部分元素
{
  ignoreElements: filterPrint,
}

 const filterPrint = (element: Element) => {
  const elementClass = element.className.toString();
  return elementClass.includes('xxx') || elementClass.includes('editText');
};