Electron-pos-printer is a plugin that works to ease paper formatting and printing to thermal printers. it currently supports 80mm, 78mm, 76mm, 58mm, 57mm and 44mm printers thermal printers. it is built with Electron.js and Node.js
v-print="'#printContent'" is work
but use electron-pos-printer is not work => [TimedOutError] Make sure your printer is connected
I tried multiple device names
"{ name: 'EPSON_TM_T82III_S_C',
displayName: 'TM-T82III-S/C',
description: 'EPSON TM-T82-S/C'}"
but never succeeded
'use strict'
import { app, protocol, BrowserWindow, screen, Menu, ipcMain } from 'electron'
import { PosPrinter } from 'electron-pos-printer'
import { createProtocol } from 'vue-cli-plugin-electron-builder/lib'
import installExtension, { VUEJS_DEVTOOLS } from 'electron-devtools-installer'
const isDevelopment = process.env.NODE_ENV !== 'production'
Menu.setApplicationMenu(null)
// Scheme must be registered before the app is ready
protocol.registerSchemesAsPrivileged([
{ scheme: 'app', privileges: { secure: true, standard: true } }
])
let win=null
async function createWindow() {
// Create the browser window.
let size = screen.getPrimaryDisplay().workAreaSize
let width = parseInt(size.width)
let height = parseInt(size.height)
win = new BrowserWindow({
width: width,
height: height,
webPreferences: {
webviewTag: true,
// Use pluginOptions.nodeIntegration, leave this alone
// See nklayman.github.io/vue-cli-plugin-electron-builder/guide/security.html#node-integration for more info
nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION,
contextIsolation: !process.env.ELECTRON_NODE_INTEGRATION
}
})
if (process.env.WEBPACK_DEV_SERVER_URL) {
// Load the url of the dev server if in development mode
await win.loadURL(process.env.WEBPACK_DEV_SERVER_URL)
if (!process.env.IS_TEST) win.webContents.openDevTools()
} else {
createProtocol('app')
// Load the index.html when not in development
win.loadURL('app://./index.html')
}
}
// Quit when all windows are closed.
app.on('window-all-closed', () => {
// On macOS it is common for applications and their menu bar
// to stay active until the user quits explicitly with Cmd + Q
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', () => {
// On macOS it's common to re-create a window in the app when the
// dock icon is clicked and there are no other windows open.
if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', async () => {
if (isDevelopment && !process.env.IS_TEST) {
// Install Vue Devtools
try {
await installExtension(VUEJS_DEVTOOLS)
} catch (e) {
console.error('Vue Devtools failed to install:', e.toString())
}
}
createWindow()
})
v-print="'#printContent'" is work but use electron-pos-printer is not work => [TimedOutError] Make sure your printer is connected
I tried multiple device names "{ name: 'EPSON_TM_T82III_S_C', displayName: 'TM-T82III-S/C', description: 'EPSON TM-T82-S/C'}" but never succeeded
'use strict'
import { app, protocol, BrowserWindow, screen, Menu, ipcMain } from 'electron' import { PosPrinter } from 'electron-pos-printer' import { createProtocol } from 'vue-cli-plugin-electron-builder/lib' import installExtension, { VUEJS_DEVTOOLS } from 'electron-devtools-installer' const isDevelopment = process.env.NODE_ENV !== 'production'
Menu.setApplicationMenu(null)
// Scheme must be registered before the app is ready protocol.registerSchemesAsPrivileged([ { scheme: 'app', privileges: { secure: true, standard: true } } ]) let win=null
async function createWindow() { // Create the browser window. let size = screen.getPrimaryDisplay().workAreaSize let width = parseInt(size.width) let height = parseInt(size.height)
win = new BrowserWindow({ width: width, height: height, webPreferences: { webviewTag: true, // Use pluginOptions.nodeIntegration, leave this alone // See nklayman.github.io/vue-cli-plugin-electron-builder/guide/security.html#node-integration for more info nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION, contextIsolation: !process.env.ELECTRON_NODE_INTEGRATION } })
if (process.env.WEBPACK_DEV_SERVER_URL) { // Load the url of the dev server if in development mode await win.loadURL(process.env.WEBPACK_DEV_SERVER_URL) if (!process.env.IS_TEST) win.webContents.openDevTools() } else { createProtocol('app') // Load the index.html when not in development win.loadURL('app://./index.html') } }
// Quit when all windows are closed. app.on('window-all-closed', () => { // On macOS it is common for applications and their menu bar // to stay active until the user quits explicitly with Cmd + Q if (process.platform !== 'darwin') { app.quit() } })
app.on('activate', () => { // On macOS it's common to re-create a window in the app when the // dock icon is clicked and there are no other windows open. if (BrowserWindow.getAllWindows().length === 0) createWindow() })
// This method will be called when Electron has finished // initialization and is ready to create browser windows. // Some APIs can only be used after this event occurs. app.on('ready', async () => { if (isDevelopment && !process.env.IS_TEST) { // Install Vue Devtools try { await installExtension(VUEJS_DEVTOOLS) } catch (e) { console.error('Vue Devtools failed to install:', e.toString()) } } createWindow() })
ipcMain.on("printer", (e, arg) => {
console.log("##### printer") // console.log(e,arg) console.log(win.webContents.getPrinters())
const options = { preview: false, // Preview in window or print width: '20px', // width of content body margin: '0 0 0 0', // margin of content body copies: 1, // Number of copies to print // deviceName: "TM-T82III-S/C", // printerName:"TM-T82III-S/C", // printerName: string, check with webContent.getPrinters() timeOutPerLine: 5000, pathTemplate:"pos.html", silent: true, pageSize: { height: 301000, width: 71000 } // page size } const data = [ { type: 'text', // 'text' | 'barCode' | 'qrCode' | 'image' | 'table value: 'SAMPLE HEADING', style:
text-align:center;
, css: {"font-weight": "700", "font-size": "18px"} } ]PosPrinter.print(data, options).then(() => { console.log("#打印成功") }).catch((error) => { console.error("错误 error"+error); }); })
// Exit cleanly on request from parent process in development mode. if (isDevelopment) { if (process.platform === 'win32') { process.on('message', (data) => { if (data === 'graceful-exit') { app.quit() } }) } else { process.on('SIGTERM', () => { app.quit() }) } }