打印机
外接硬件设备
# 打印机设备
// frontend/src/views/hardware/printer/Index.vue
<script>
import { ipcApiRoute } from '@/api/main'
export default {
data() {
return {
defaultDeviceName: '',
printerList: [],
views: [
{
type: 'html',
content: '/public/html/view_example.html'
},
],
};
},
mounted () {
this.init();
},
methods: {
init () {
// 避免重复监听,或者将 on 功能写到一个统一的地方,只加载一次
this.$ipc.removeAllListeners(ipcApiRoute.printStatus);
this.$ipc.on(ipcApiRoute.printStatus, (event, result) => {
this.$message.info('打印中...');
})
},
getPrinter () {
this.$ipc.invoke(ipcApiRoute.getPrinterList, {}).then(res => {
this.printerList = res;
})
},
doPrint (index) {
const params = {
view: this.views[index],
deviceName: this.defaultDeviceName
};
this.$ipc.send(ipcApiRoute.print, params)
},
defaultDevice (item) {
let desc = "";
if (item.isDefault) {
desc = "- 默认";
this.defaultDeviceName = item.name;
}
return desc;
}
}
};
</script>
// electron/controller/hardware.js
/**
* 获取打印机列表
*/
getPrinterList () {
//主线程获取打印机列表
const list = Electron.mainWindow.webContents.getPrinters();
return list;
}
/**
* 打印
*/
print (args, event) {
const { view, deviceName } = args;
let content = null;
if (view.type == 'html') {
content = path.join('file://', Ps.getHomeDir(), view.content)
} else {
content = view.content;
}
const addonWindow = this.app.addon.window;
let opt = {
title: 'printer window',
x: 10,
y: 10,
width: 980,
height: 650
}
const name = 'window-printer';
const printWindow = addonWindow.create(name, opt);
printWindow.loadURL(content);
printWindow.webContents.once('did-finish-load', () => {
// 页面完全加载完成后,开始打印
printWindow.webContents.print({
silent: false, // 显示打印对话框
printBackground: true,
deviceName,
}, (success, failureReason) => {
const channel = 'controller.hardware.printStatus';
event.reply(`${channel}`, { success, failureReason });
printWindow.close();
});
});
return true;
}
// Make sure to add code blocks to your code group
# 完整代码
上次更新: 2025/04/10, 03:07:49