原創(chuàng)文章番挺,轉(zhuǎn)載請注明出處
- 首先主進(jìn)程獲取打印機(jī)列表傳遞給渲染進(jìn)程
- 其次渲染進(jìn)程展示打印機(jī)列表,并選擇打印機(jī)
- 選擇完打印機(jī)后,執(zhí)行打印箱季,或多個打印
獲取打印機(jī)列表(渲染進(jìn)程)
try {
ipcRenderer.send('getPrinterList')
ipcRenderer.on('printerList', function (e, data) {
if (data.length <= 0) {
Message.error('打印服務(wù)異常,請嘗試重啟電腦')
return;
}
if (localStorage.getItem('printName')) {
for (let i = 0; i < data.length; i++) {
const element = data[i];
if (element.name == localStorage.getItem('printName')) {
that.setState({
printIndex: i
})
}
}
}
that.setState({
printList: data
})
})
} catch (error) {
console.log(error)
}
獲取打印機(jī)列表(主進(jìn)程)
// 在主線程下,通過ipcMain對象監(jiān)聽渲染線程傳過來的getPrinterList事件棍掐,返回打印機(jī)列表
// 需要注意 electron 版本是3.0.0
ipcMain.on('getPrinterList', (event) => {
//主線程獲取打印機(jī)列表
const list = mainWindow.webContents.getPrinters();
//通過webContents發(fā)送事件到渲染線程藏雏,同時將打印機(jī)列表也傳過去
event.sender.send('printerList', list);
});
調(diào)用打印機(jī)打印
<span className="Y-cursor-pointer Y-margin-horizontal-right-15" onClick={this.onPrint.bind(this, record)}>打印條碼</span>
// 調(diào)用打印機(jī)打印
onPrint(record) {
let that = this
// if (!localStorage.getItem('printName') && !this.state.printName) {
// Message.error('請先設(shè)置打印機(jī)')
// return;
// }
httpUrl('GET', host + 'api/business/web/order/print-order-detail?partsOrderKid=' + record.partsOrderKid, null, '', res => {
if (res) {
res.packageCount = record.partsCount
res.printName = localStorage.getItem('printName') || this.state.printName
try {
if (res.packageCount >= 1) {
for (let i = 0; i < res.packageCount; i++) {
res.packageCountPre = i + 1;
// ipcRenderer.send('print', res) // 異步
// 同步打印,一張一張打印作煌,創(chuàng)建一個任務(wù)
const replay = ipcRenderer.send('print', res)
// console.log(replay)
if (replay) {
continue;
}
}
let kids = [record.partsOrderKid]
httpUrl('PUT', host + 'order/web/admin/update-parts-order-print', { kids }, '', res => {
Message.success('打印成功')
that.partsBusinessOrderList()
})
}
} catch (error) {
if (error) {
Message.error('暫不支持打印')
}
}
}
})
}
主進(jìn)程執(zhí)行打印
// 監(jiān)聽渲染進(jìn)程打印按鈕點(diǎn)擊
ipcMain.on('print', (event, args) => {
print(event, args)
})
// 打印 通過webContent
function print(event, args) {
let win = new BrowserWindow({
show: false
}) // 新建窗口不打開掘殴,實(shí)現(xiàn)靜默打印
// win.openDevTools() //打開調(diào)試
var url = 'print.html'
for (const key in args) {
// console.log('key:' + key + ',val:' + args[key])
if (url.indexOf('?') <= 0) {
url += '?' + key + '=' + args[key]
} else {
url += '&' + key + '=' + args[key]
}
}
win.loadURL(path.join(__dirname, url)) // 加載print頁面并將參數(shù)傳入
win.webContents.on('did-finish-load', () => { // 頁面加載完畢執(zhí)行打印操作
// if (args.packageCountPre == args.packageCount) {
// event.sender.send('printResult', true)
// }
// 執(zhí)行打印 靜默打印赚瘦,傳入打印機(jī)名稱
win.webContents.print({
silent: true,
deviceName: args.deviceName, //'KM-118'
}, function (success, errorType) {
if (errorType) throw errorType
// console.log('success:' + success)
// console.log('errorType:' + errorType)
event.returnValue = success // 同步打印 將打印結(jié)果返回給渲染進(jìn)程
if(args.packageCountPre == args.packageCount){
win.close(); // 打印完成 關(guān)閉窗口
}
})
})
}
創(chuàng)建多個任務(wù)進(jìn)行打印
<div style={{ background: '#3080fe', border: '1px solid #3080fe', color: '#ffffff' }} className="Y-cursor-pointer Y-padding-vertical-both-8 Y-padding-horizontal-both-20" onClick={this.morePrint.bind(this)}> 批量打印</div>
// 創(chuàng)建多個任務(wù)
morePrint() {
// console.log(this.state.addData)
let data = this.state.addData
let j = 1;
let arr = []
for (let i = 0; i < data.length; i++) {
const item = data[i];
// onPrint
// var res = await axios.post('')
this.axiosGet(item).then((valid) => {
if (valid) {
console.log('同步執(zhí)行完畢');
j++;
}
})
arr.push(item.partsOrderKid)
if (j = data.length) {
let kids = arr
httpUrl('PUT', host + 'order/web/admin/update-parts-order-print', { kids }, '', res => {
Message.success('打印成功')
that.partsBusinessOrderList()
})
}
}
}
axiosGet(record) {
let headers = {
'Content-Type': 'application/json;charset=UTF-8',
'Authorization': localStorage.getItem("token")
}
return axios({
method: 'GET',
headers: headers,
url: host + 'order/business/print-order-detail?partsOrderKid=' + record.partsOrderKid,
data: null,
}).then(ret => {
// console.log(ret)
let flag = false
let res = ret.data.data.data
if (res) {
res.packageCount = record.partsCount
res.printName = localStorage.getItem('printName') || this.state.printName
// console.log(res)
try {
if (res.packageCount >= 1) {
for (let i = 0; i < res.packageCount; i++) {
res.packageCountPre = i + 1;
// ipcRenderer.send('print', res) // 異步
const replay = ipcRenderer.send('print', res)
flag = replay;
// console.log(replay)
if (replay && res.packageCountPre < res.packageCount) {
flag = false;
continue;
}
}
}
} catch (error) {
if (error) {
Message.error('暫不支持打印')
}
}
if (res.packageCountPre == res.packageCount && flag) {
return true;
}
}
})
}