国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

electron + vue項目實現打印小票功能及實現代碼

2024-05-06 15:27:46
字體:
來源:轉載
供稿:網友

一 需求:

公司項目需要通過electron調用系統打印機,實現打印小票的功能。

二、分析:

electron打印大概有兩種:

第一種:通過window的webcontent對象,使用此種方式需要單獨開出一個打印的窗口,可以將該窗口隱藏,但是通信調用相對復雜。

第二種:使用頁面的webview元素調用打印,可以將webview隱藏在調用的頁面中,通信方式比較簡單。

兩個對象調用打印方法的使用方式都一樣。

本文是通過第二種方法實現靜默打印。

三、實現過程:

1、要實現打印功能,首先要知道我們的設備上有哪些打印機。方法是:在渲染線程通過electron的ipcRenderer對象發送事件到主線程獲取。(本文的渲染線程可以當做為一個print.vue文件)

(1)主線程(electron.js)偽代碼如下:

//引入electronimport electron from 'electron';//創建一個瀏覽器對象const window = new electron.BrowserWindow({  width,  height,  frame: false,  show: false,  backgroundColor: '#4b5b79',  minWidth: 1024,  minHeight: 768,  webPreferences: { webSecurity: false }, }); //在主線程下,通過ipcMain對象監聽渲染線程傳過來的getPrinterList事件electron.ipcMain.on('getPrinterList', (event) => {  //主線程獲取打印機列表  const list = window.webContents.getPrinters();    //通過webContents發送事件到渲染線程,同時將打印機列表也傳過去  window.webContents.send('getPrinterList', list);});

===============================================================================

(2)渲染線程(print.vue文件)偽代碼如下:

<template></template><script>  //引入ipcRenderer對象,該對象和主線程的ipcMain通訊  import { ipcRenderer } from 'electron';    //渲染線程主動發送getPrinterList事件到主線程請求打印機列表  ipcRenderer.send('getPrinterList');     //監聽主線程獲取到打印機列表后的回調   ipcRenderer.once('getPrinterList', (event, data) => {    //data就是打印機列表    this.printList = data;   });</script>//獲取打印機列表完成

2、(重頭戲來了)獲取打印機列表后,就需要通過electron自帶的標簽實現小票排版。 是什么?可以把它當做標簽,它里面顯示的是你需要打印的內容。

(1)使用之前,需要新建一個print.html文件,把你要打印的內容通過print.html顯示出來。我們項目的需求是將要打印的內容通過canvas畫出后,再將canvas轉成圖片資源(base64),然后放到里面顯示,偽代碼如下:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> //@page樣式是用來設置打印機打印出來的樣式,例如設置小票外邊距樣式  @page {   margin: 0px;  } </style></head><body id='bd'></body><script>  //引入ipcRenderer對象 const {ipcRenderer} = require('electron')  //監聽渲染線程傳過來的webview-print-render事件 ipcRenderer.on('webview-print-render', (event, deviceInfo) => {  // 動態創建一個img標簽,然后插入到<body>中。deviceInfo是渲染線程傳過來的數據  let html = '';  html = `<img src="${deviceInfo.imgSource}"   width="${deviceInfo.imgWidth}px"   height="${deviceInfo.imgHeight}px">`;  document.getElementById('bd').innerHTML = html;    //當圖片插入到頁面后,通過ipcRenderer對象的sendToHost方法和渲染線程通訊,告訴渲染線程打印的內容已經準備完畢,請開始打印操作  ipcRenderer.sendToHost('webview-print-do'); });</script></html>            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 清远市| 会昌县| 襄樊市| 合山市| 澎湖县| 昌都县| 罗城| 沙洋县| 蕲春县| 射洪县| 榆树市| 东乡县| 汨罗市| 墨竹工卡县| 三门县| 苏尼特右旗| 佛教| 马关县| 贡觉县| 长春市| 晋宁县| 衢州市| 平顶山市| 长葛市| 临汾市| 岫岩| 英吉沙县| 龙口市| 商水县| 深圳市| 平武县| 三原县| 天峨县| 南乐县| 河北省| 泸州市| 顺平县| 通化市| 石台县| 南昌县| 杭锦旗|