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);
|
})
|
});
|
}
|