print 纸张自定义大小
项目采用vue3-print-nb 插件,具体使用可移步官网介绍
踩坑纪要
1. 样式表里的 size 属性不支持字符串
2. 在.html 文件里这样写可以访问到下列属性,但样式会覆盖到全局
vue
<style title="index" media="print">
js
for (const item of document.styleSheets)
console.log(item, item.title, item.media.mediaText);
3. 在.vue 文件里这样写打印样式才生效
js
<style scoped> @media print {} </style>
具体实现
vue 部分代码
js
<style scoped title="index">
/* @media print 必须写这里 */
@media print {
@page {
/* 1in=96px */
size: 20cm 10cm; /* 有效 */
size: "20cm" "10cm"; /*无效 */
}
}
</style>
js
js
const setPrintPageStyle = () => {
// 遍历所有样式表
for (const item of document.styleSheets) {
const list = [...item.cssRules];
list.some((rule, i) => {
// 查找打印样式表
if (rule?.media?.mediaText === "print") {
const newRule = `
@media print {
@page {
size: ${sizeObj.paperWidth}cm ${sizeObj.paperHeight}cm;
}
#printTest {
width: 100%;
height: 100%;
border: 2px solid red;
}
.button {
display: none;
}}`;
item.deleteRule(i);
item.insertRule(newRule, i);
return true;
}
});
}
};