当前位置: 首页> 文旅> 美景 > 通过iframe碎片实现web局部打印

通过iframe碎片实现web局部打印

时间:2025/7/9 11:12:10来源:https://blog.csdn.net/Cang_Ye/article/details/140694827 浏览次数:0次

通过iframe碎片实现web局部打印

创建打印模板

首先,创建一个出货单的 HTML 模板,并用 CSS 进行样式设计。
tips:
1、直接通过iframe碎片拉起打印,会导致样式丢失,所以需要获取当前界面的样式。

${Array.from(document.querySelectorAll('link[rel="stylesheet"], style')).map(style => style.outerHTML).join('\n');}

2、通过浏览器拉起打印机打印会有一个延迟,如果直接执行 document.body.removeChild(iframe); 移除 iframe 碎片会导致打印机获取不到碎片的内容。所以需要对 removeChild() 进行延迟处理。

<template><div id="app"><button @click="printOrder">打印出货单</button><div id="printArea"><h1>出货单</h1><p>订单编号: {{ orderNumber }}</p><p>客户名称: {{ customerName }}</p><table><thead><tr><th>商品名称</th><th>数量</th><th>单价</th><th>总价</th></tr></thead><tbody><tr v-for="item in orderItems" :key="item.id"><td>{{ item.name }}</td><td>{{ item.quantity }}</td><td>{{ item.price }}</td><td>{{ item.total }}</td></tr></tbody></table><p>总计: {{ totalAmount }}</p></div></div>
</template><script>
export default {data() {return {orderNumber: '12345',customerName: '张三',orderItems: [{ id: 1, name: '商品1', quantity: 2, price: 100, total: 200 },{ id: 2, name: '商品2', quantity: 1, price: 200, total: 200 },],totalAmount: 400,};},methods: {printOrder() {const printContent = this.$refs.printArea.innerHTML;const iframe = document.createElement('iframe');iframe.style.position = 'absolute';iframe.style.width = '0px';iframe.style.height = '0px';iframe.style.border = 'none';document.body.appendChild(iframe);const iframeDoc = iframe.contentWindow.document;iframeDoc.open();iframeDoc.write(`<!DOCTYPE html><html><head><title>出货单</title>${Array.from(document.querySelectorAll('link[rel="stylesheet"], style')).map(style => style.outerHTML).join('\n');}<style>table {width: 100%;border-collapse: collapse;}th, td {border: 1px solid #000;padding: 8px;text-align: left;}</style></head><body>${printContent}</body></html>`);iframeDoc.close();iframe.contentWindow.focus();iframe.contentWindow.print();setTimeout(()=>{document.body.removeChild(iframe);},3000);},},
};
</script><style>
#printArea {width: 100%;padding: 20px;border: 1px solid #000;
}
table {width: 100%;border-collapse: collapse;
}
th, td {border: 1px solid #000;padding: 8px;text-align: left;
}
</style>
关键字:通过iframe碎片实现web局部打印

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: