在vue3项目中实现浏览器打印功能,可以直接使用javascript方法window.print()。如果你需要更高级的打印功能,比如打印预览、自定义打印模板等,你可能需要集成第三方库或API,以print-js为例。
效果如下:
引入PrintJS库有两种方式, 在线CDN和npm安装依赖
1.1 CDN引入:
<script src="https://printjs-4de6.kxcdn/print.min.js"></script>
1.2 npm安装:
npm install print-js –save
import printJS from 'print-js';
2. 在引入 PrintJS 库后,你可以使用 printJS() 方法来触发打印。这个方法接受两个参数:第一个参数是要打印的 HTML 元素的 ID,第二个参数是一个选项对象,用于自定义打印设置。
例如,假设你有一个 ID 为 "printFrom" 的 div,你可以这样打印它:
printJS('printFrom');
你还可以自定义打印设置。例如,以下代码将 "printFrom" div 打印成 PDF 文件,并在 PDF 文件的头部和底部添加自定义文本:
printJS({
printable: 'printFrom', // 要打印的最外层元素的id
type: 'pdf', // 打印类型,默认pdf, 还有html,image和json
header: 'My Header',
footer: 'My Footer',
documentTitle: 'My Document'
});
如果需要打印条形码, 可以使用vue3-barcode插件,但是这个插件不支持同时打印多个,最后一个总会覆盖前面的,如果只是单独打印一个条形码是完全可行性的, 如果需要循环、批量打印的话,建议使用js插件jsBarcode
安装jsbarcode
npm install jsbarcode –save
import JsBarcode from "jsbarcode";
2. 使用
<template>
<div v-for="(item, index) in newData" :key="item.id">
<img :id="'jsbarcodeImg' + index" style="width: 220px;" />
</div>
</template>
<script>
import JsBarcode from "jsbarcode";
export defaul {
data(){
return {
newData:[
{id:1, num: 12345678},
{id:2, num: 876543},
]
}
},
methods:{
getBarcode() {
this.newData.forEach((v, index) => {
JsBarcode("#jsbarcodeImg" + index, v.num+'12345678', {
format: "CODE39", // 条形码格式
width: 2, // 条形码条的宽度
height: 80, // 条形码高度
marginRight:30,
fontSize: 30,
// displayValue: false, // 是否显示条形码下方的数字, 默认true
});
});
}
}
</script>
完整代码如下:
<template>
<div id="print-template">
<div v-for="(item, index) in newData" :key="item.id">
<div style="width:20px;height: 30px;"></div>
<div>
<div style="display: inline-block">品名:{{ item?.name }}</div>
<div style="display: inline-block">RFID:{{ item?.name }}</div>
</div>
<div>
<img :id="'jsbarcodeImg' + index" style="width: 220px;" />
<qrcode-vue
:value="item?.num?.toString()"
:size="120"
:margin="5"
/>
</div>
</div>
</div>
</template>
<script>
import printJS from "print-js";
import QrcodeVue from "qrcode.vue";
import JsBarcode from "jsbarcode";
export default {
components: {
QrcodeVue,
},
data() {
return {
newData: [
{id:1, name:"乙醇", num: 12345678},
{id:2, name:"葡萄糖", num: 876543},
],
};
},
mounted() {
this.getBarcode();
setTimeout(() => {
this.handlePrint();
}, 500);
// this.changeImg();
},
beforeUnmount(){
clearTimeout()
},
methods: {
handlePrint() {
// 获取打印模板的DOM元素
const printElement = document.getElementById("print-template");
console.log(printElement);
if (printElement) {
// 显示打印模板,以便能够打印
printElement.classList.remove("print-hide");
// 使用vue-printjs打印模板内容
printJS({
printable: printElement,
type: "html",
error: (err) => {
console.log("err", err);
},
});
// 打印完成后隐藏打印模板
printElement.classList.add("print-hide");
}
},
getBarcode() {
this.newData.forEach((v, index) => {
JsBarcode("#jsbarcodeImg" + index, v.num+'12345678', {
format: "CODE39",
width: 2,
height: 80,
marginRight:30,
fontSize: 30,
// displayValue: false,
});
});
},
},
};
</script>
<style>
.print-hide {
display: none; /* 在屏幕上隐藏打印模板 */
}
</style>
原文链接:https://blog.csdn.net/weixin_64386986/article/details/136317785