<div><!-- 打印单模板 --><!-- 给div加 page-wrapper 样式,使 list 中的每一项都单独分页,使用a5纸张 --><div v-for="(page, i) in list" :key="i" class="page-wrapper printer-a5"><!-- 打印内容 --><div class="page-content" style="font-family: 楷体">打印单详情</div></div>
</div>
@page {/* 页边距 1mm,去掉默认的页眉页脚 */margin: 0.1cm;
}.page-wrapper {padding: 1cm; /* 将页面的边距转移到这里,10mm */width: 100%;height: 100%;page-break-after: always; /* 强行分页 *//* page-break-before: always; */
}
.page-wrapper:last-child {/* 最后一个元素避免分页 */page-break-after: avoid;
}/* 打印内容 */
.page-content {height: 100%;position: relative;
}/* 通过css代码,将页面大小设置为 A5 纸张 */
.printer-a5 {
/*标准 A5 纸张大小为 148mm X 210mm,但是前面为了去掉默认的页眉页脚,设置了页面距为0.1cm,所以这里要减去这0.1cm*/width: 207mm !important;height: 145mm !important;/* transform: rotate(90deg); *//* transform-origin: 74mm 74mm; */
}
/* 通过css代码,将页面大小设置为 A4 纸张 */
.printer-a4 {width: 210mm !important; /* 标准 A4 纸张大小为 210mm X 297mm */height: 297mm !important;
}html, body {/* 将三个属性归零 */padding: 0;margin: 0;border: 0;width: 100%;height: 100%;
}.bgcWhite {background-color: #fff;/* 兼容打印背景颜色 */-webkit-print-color-adjust: exact;color-adjust: exact;
}
在打印单中,我们经常需要打印背影颜色或背景图案等,但通过css代码设置的背景颜色等不会被打印出来。
两种解决方案:
-webkit-print-color-adjust: exact
。看如下代码:.bgcWhite {background-color: #fff;/* 兼容打印背景颜色 */-webkit-print-color-adjust: exact;color-adjust: exact;
}
在页面中,我们可以通过调用 window.print()
来调出打印弹窗。
但是在实际开发中,我们经常会遇到需要配置打印模式的需求,例如在当前端口打印
或在新窗口打印
。如下:
使用 iframe
加载打印单模板的页面,然后长宽给他设置为0。如下:
// 打印之前清空iframe
if (this.timer) {clearTimeout(this.timer);
}this.timer = setTimeout(() => {const iframes = document.querySelectorAll('iframe');for (let i = 0; i < iframes.length; i++) {veChild(iframes[i]);}
}, 1000 * 60 * 5);
// 创建 iframe
const iframe = ateElement('iframe');
iframe.src = url;
iframe.style = 'width:0;height:0';
document.body.appendChild(iframe);
然后在打印单模板页面调用打印接口
window.print()
还可以进行一层封装,确保页面加载完成后再调用
export const autoPrint = (delayed = 2000) => {setTimeout(() => {window.print()console.log('version:', version)}, delayed)
}
// 直接打开新的标签页跳转到打印单模板的页面
window.open(url);
然后在打印单模板页面调用打印接口
window.print()
还可以进行一层封装,确保页面加载完成后再调用
export const autoPrint = (delayed = 2000) => {setTimeout(() => {window.print()console.log('version:', version)}, delayed)
}
if (isInner) {const iframe: any = ateElement('iframe');iframe.src = url;iframe.style = 'width:0;height:0';document.body.appendChild(iframe);
} else if (printModule === 'out') {window.open(url);
}
还可以配置打印单模板是 A4 还是 A5 页面等等。
本文发布于:2024-02-01 06:57:25,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170674184634716.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |