主要技术canvas
绘制图片时要注意设置
image.crossOrigin = "Anonymous";
allowtainted
allowcross
// 主要试用基本都是图片组合在一起的页面,字体不太好处理
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
await page.screenshot({path: 'example.png'});
await browser.close();
})();
// 可以实现特定页面的整体截图,选定区域截图,但是页面进行滚动后就不太容易实现
let svgText = Dom.innerHTML.toString()
if (!svgText.match(/xmlns=\"/mi)){
svgText = svgText.replace ('<svg ','<svg xmlns="http://www.w3.org/2000/svg" ') ;
}
var svg = new Blob([svgText], {
type: "image/svg+xml;charset=utf-8"
});
let objectURL = URL.createObjectURL(svg)
var canvas = document.createElement('canvas'),
ctx = canvas.getContext('2d');
canvas.width = w;
canvas.height = h;
var img = new Image();
img.src = objectURL
img.crossOrigin = 'Anonymous';
img.onload = function () {
ctx.drawImage(this, 0, 0, w, h);
var png = canvas.toDataURL('image/png');
let a = document.createElement('a');
a.download = 'defaultName.png';
a.href = png;
a.addEventListener('click', function(ev) {
console.log('下载');
}, false);
// let event = document.createEvent('MouseEvents');
// event.initEvent('click');
let clickEvent = new MouseEvent('click', {
'view': window,
'bubbles': true,
'cancelable': false
});
a.dispatchEvent(clickEvent);
};
// 外部样式和字体存在问题。
参见
https://github.com/guoguangkun/jsScreenShot/blob/main/js/screenShot.js