最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

electron + vue項(xiàng)目實(shí)現(xiàn)打印小票功能及實(shí)現(xiàn)代碼

 更新時(shí)間:2018年11月25日 10:48:10   投稿:mrr  
這篇文章主要介紹了electron + vue項(xiàng)目實(shí)現(xiàn)打印小票功能,需要的朋友可以參考下

一 需求:

公司項(xiàng)目需要通過electron調(diào)用系統(tǒng)打印機(jī),實(shí)現(xiàn)打印小票的功能。

二、分析:

electron打印大概有兩種:

第一種:通過window的webcontent對(duì)象,使用此種方式需要單獨(dú)開出一個(gè)打印的窗口,可以將該窗口隱藏,但是通信調(diào)用相對(duì)復(fù)雜。

第二種:使用頁(yè)面的webview元素調(diào)用打印,可以將webview隱藏在調(diào)用的頁(yè)面中,通信方式比較簡(jiǎn)單。

兩個(gè)對(duì)象調(diào)用打印方法的使用方式都一樣。

本文是通過第二種方法實(shí)現(xiàn)靜默打印。

三、實(shí)現(xiàn)過程:

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

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

//引入electron
import electron from 'electron';

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

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

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

<template>
</template>
<script>
  //引入ipcRenderer對(duì)象,該對(duì)象和主線程的ipcMain通訊
  import { ipcRenderer } from 'electron';
  
  //渲染線程主動(dòng)發(fā)送getPrinterList事件到主線程請(qǐng)求打印機(jī)列表
  ipcRenderer.send('getPrinterList'); 
  
  //監(jiān)聽主線程獲取到打印機(jī)列表后的回調(diào)
   ipcRenderer.once('getPrinterList', (event, data) => {
    //data就是打印機(jī)列表
    this.printList = data;
   });
</script>

//獲取打印機(jī)列表完成

2、(重頭戲來了)獲取打印機(jī)列表后,就需要通過electron自帶的標(biāo)簽實(shí)現(xiàn)小票排版。 是什么?可以把它當(dāng)做標(biāo)簽,它里面顯示的是你需要打印的內(nèi)容。

(1)使用之前,需要新建一個(gè)print.html文件,把你要打印的內(nèi)容通過print.html顯示出來。我們項(xiàng)目的需求是將要打印的內(nèi)容通過canvas畫出后,再將canvas轉(zhuǎn)成圖片資源(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樣式是用來設(shè)置打印機(jī)打印出來的樣式,例如設(shè)置小票外邊距樣式
  @page {
   margin: 0px;
  }
 </style>
</head>
<body id='bd'>
</body>
<script>
  //引入ipcRenderer對(duì)象
 const {ipcRenderer} = require('electron')
 
 //監(jiān)聽渲染線程傳過來的webview-print-render事件
 ipcRenderer.on('webview-print-render', (event, deviceInfo) => {
  // 動(dòng)態(tài)創(chuàng)建一個(gè)img標(biāo)簽,然后插入到<body>中。deviceInfo是渲染線程傳過來的數(shù)據(jù)
  let html = '';
  html = `<img src="${deviceInfo.imgSource}"
   width="${deviceInfo.imgWidth}px"
   height="${deviceInfo.imgHeight}px">`;
  document.getElementById('bd').innerHTML = html;
  
  //當(dāng)圖片插入到頁(yè)面后,通過ipcRenderer對(duì)象的sendToHost方法和渲染線程通訊,告訴渲染線程打印的內(nèi)容已經(jīng)準(zhǔn)備完畢,請(qǐng)開始打印操作
  ipcRenderer.sendToHost('webview-print-do');
 });
</script>
</html>

(2)html文件創(chuàng)建完成后,將print.html引入到。該需要顯式的定義在print.vue文件中,但需要將它用v-show="false"隱藏,不能用v-if,因?yàn)槲覀冃枰膁om節(jié)點(diǎn)存在于頁(yè)面上,只是不展示而已。

<script>
mounted() {
  //當(dāng)vue節(jié)點(diǎn)渲染完成后,獲取<webview>節(jié)點(diǎn)
  const webview = this.$refs.printWebview;
  
  //監(jiān)聽<webview>里面的消息,也就是監(jiān)聽print.html里面的ipcRenderer.sendToHost發(fā)送的事件,當(dāng)該事件發(fā)送成功后就會(huì)進(jìn)入下面的回調(diào)事件中執(zhí)行打印操作。
  webview.addEventListener('ipc-message', (event) => {
   if (event.channel === 'webview-print-do') {
    //如果收到<webview>傳過來的事件,名為"webview-print-do",就執(zhí)行 webview.print打印方法,打印<webview>里面的內(nèi)容。
    webview.print(
     {
      //是否是靜默打印
      silent: true,
      printBackground: true,
      //打印機(jī)的名稱,就是本文一開始獲得的打印機(jī)列表其中一個(gè)
      deviceName: 'xxx',
     },
     (data) => {
      //這個(gè)回調(diào)是打印后的回調(diào)事件,data為true就是打印成功,為false就打印失敗
      console.log('webview success', data);
     },
    );
   }
  });
},
</script>

到這里本electron調(diào)用打印機(jī)的功能就實(shí)現(xiàn)了。

總結(jié)

以上所述是小編給大家介紹的electron + vue項(xiàng)目實(shí)現(xiàn)打印小票功能及實(shí)現(xiàn)代碼,希望對(duì)大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!

相關(guān)文章

  • Vue中router-view無法顯示的解決辦法

    Vue中router-view無法顯示的解決辦法

    這篇文章主要給大家介紹了關(guān)于Vue中router-view無法顯示的解決辦法,router-view組件作為vue最核心的路由管理組件,在項(xiàng)目中作為路由管理經(jīng)常被使用到,需要的朋友可以參考下
    2023-07-07
  • VUE element上傳動(dòng)態(tài)設(shè)置action路徑和參數(shù)的坑及解決

    VUE element上傳動(dòng)態(tài)設(shè)置action路徑和參數(shù)的坑及解決

    這篇文章主要介紹了VUE element上傳動(dòng)態(tài)設(shè)置action路徑和參數(shù)的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • vue-router:嵌套路由的使用方法

    vue-router:嵌套路由的使用方法

    本篇文章主要介紹了vue-router:嵌套路由的使用方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • 深入了解Vue中雙向數(shù)據(jù)綁定原理

    深入了解Vue中雙向數(shù)據(jù)綁定原理

    vue是一個(gè)mvvm框架,即數(shù)據(jù)雙向綁定,即當(dāng)數(shù)據(jù)發(fā)生變化的時(shí)候,視圖也就發(fā)生變化,當(dāng)視圖發(fā)生變化的時(shí)候,數(shù)據(jù)也會(huì)跟著同步變化。本文將通過示例詳解其中原理,需要的可以參考一下
    2022-05-05
  • Vue中的transition封裝組件的實(shí)現(xiàn)方法

    Vue中的transition封裝組件的實(shí)現(xiàn)方法

    這篇文章主要介紹了Vue中的transition封裝組件的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 基于uniapp+vue3自定義增強(qiáng)版table表格組件「兼容H5+小程序+App端」

    基于uniapp+vue3自定義增強(qiáng)版table表格組件「兼容H5+小程序+App端」

    uv3-table:一款基于uniapp+vue3跨端自定義手機(jī)端增強(qiáng)版表格組件,支持固定表頭/列、邊框、斑馬紋、單選/多選,自定義表頭/表體插槽、左右固定列陰影高亮顯示,支持編譯兼容H5+小程序端+App端,H5+小程序+App端,多端運(yùn)行一致
    2024-05-05
  • vue刷新頁(yè)面后params參數(shù)丟失的原因和解決方法

    vue刷新頁(yè)面后params參數(shù)丟失的原因和解決方法

    這篇文章主要給大家介紹了vue刷新頁(yè)面后params參數(shù)丟失的原因和解決方法,文中通過代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2023-12-12
  • VUE中data配置項(xiàng)詳細(xì)解析

    VUE中data配置項(xiàng)詳細(xì)解析

    data屬性是Vue實(shí)例的數(shù)據(jù)對(duì)象,可以綁定的是對(duì)象或者是函數(shù),下面這篇文章主要給大家介紹了關(guān)于VUE中data配置項(xiàng)詳細(xì)解析的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • vue.config.js中configureWebpack與chainWebpack區(qū)別及說明

    vue.config.js中configureWebpack與chainWebpack區(qū)別及說明

    這篇文章主要介紹了vue.config.js中configureWebpack與chainWebpack區(qū)別及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • vue中watch監(jiān)聽路由傳來的參數(shù)變化問題

    vue中watch監(jiān)聽路由傳來的參數(shù)變化問題

    這篇文章主要介紹了vue中watch監(jiān)聽路由傳來的參數(shù)變化,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07

最新評(píng)論

鹤峰县| 金阳县| 丹江口市| 北海市| 宜黄县| 夹江县| 合肥市| 个旧市| 中超| 青冈县| 凤冈县| 天台县| 胶州市| 湘潭县| 富顺县| 黔西县| 高台县| 天长市| 土默特右旗| 卢龙县| 连城县| 乌拉特前旗| 永川市| 盐池县| 庐江县| 治多县| 怀远县| 霍邱县| 元朗区| 乌兰察布市| 棋牌| 肃宁县| 西畴县| 吉木萨尔县| 大悟县| 金塔县| 渭南市| 长岛县| 昌图县| 江山市| 娱乐|