export function loadPrintStyle() { let style = getStyle(); document.body.appendChild(style); } export function printHtml(html) { let container = getContainer(html); document.body.appendChild(container); getLoadPromise(container).then(() => { window.print(); document.body.removeChild(container); }); } // 设置打印样式 function getStyle() { let styleContent = `#print-container { display: none; } @media print { body > :not(.print-container) { display: none; } html, body { display: block !important; } #print-container { display: block; } } @page { margin-top: 0; margin-bottom: 0 } `; let style = document.createElement("style"); style.innerHTML = styleContent; return style; } // 清空打印内容 function cleanPrint() { let div = document.getElementById('print-container') if (!!div) { document.querySelector('body').removeChild(div) } } // 新建DOM,将需要打印的内容填充到DOM function getContainer(html) { cleanPrint() let container = document.createElement("div"); container.setAttribute("id", "print-container"); container.innerHTML = html; return container; } // 图片完全加载后再调用打印方法 function getLoadPromise(dom) { let imgs = dom.querySelectorAll("img"); imgs = [].slice.call(imgs); if (imgs.length === 0) { return Promise.resolve(); } let finishedCount = 0; return new Promise(resolve => { function check() { finishedCount++; if (finishedCount === imgs.length) { resolve(); } } imgs.forEach(img => { img.addEventListener("load", check); img.addEventListener("error", check); }) }); }