<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        electron實現靜默打印的示例代碼

        來源:懂視網 責編:小采 時間:2020-11-27 21:52:35
        文檔

        electron實現靜默打印的示例代碼

        electron實現靜默打印的示例代碼:前言 electron+vuecli3 實現設置打印機,靜默打印小票功能 網上相關的資料比較少,這里給大家分享一下,希望大家可以少踩一些坑 github地址 必須要強調一下的是electron的版本必須是3.0.0不能,我嘗試了4和5都沒有實現 效果圖 使用 git clo
        推薦度:
        導讀electron實現靜默打印的示例代碼:前言 electron+vuecli3 實現設置打印機,靜默打印小票功能 網上相關的資料比較少,這里給大家分享一下,希望大家可以少踩一些坑 github地址 必須要強調一下的是electron的版本必須是3.0.0不能,我嘗試了4和5都沒有實現 效果圖 使用 git clo

        前言

        electron+vuecli3 實現設置打印機,靜默打印小票功能

        網上相關的資料比較少,這里給大家分享一下,希望大家可以少踩一些坑
        github地址

        必須要強調一下的是electron的版本必須是3.0.0不能,我嘗試了4和5都沒有實現

        效果圖


        使用

        git clone https://github.com/sunnie1992/electron-vue-print-demo.git
        npm install
        npm run electron:serve

        實現

        操作思路
        1.用戶點擊打印
        2.查詢本地electron-store(用來向本地存儲,讀取數據)是否存打印機名稱
        3.已經設置,直接打印
        4.沒有設置,彈出設置打印機框
        5.用戶設置好確認后打印

        首頁App.vue引入了兩個組件,一個是主動設置打印機的彈出printDialog

        另外一個是打印組件,打印是通過webview將需要打印的內容渲染到html頁面然后就能打印了

        <template>
         <div id="app">
         <el-button type="primary" @click="showPrint">設置打印機</el-button>
         <printDialog :dialog-visible="dialogVisible" @cancel="handlePrintDialogCancel" />
         <pinter ref="print" :html-data="HtmlData"></pinter>
         <el-table :data="tableData" style="width: 100%">
         <el-table-column prop="date" label="日期" width="180" column-key="date">
         </el-table-column>
         <el-table-column prop="name" label="姓名" width="180">
         </el-table-column>
         <el-table-column prop="address" label="地址">
         </el-table-column>
         <el-table-column label="操作">
         <template slot-scope="scope">
         <el-button type="primary" @click="doPrint(scope.row)">打印</el-button>
         </template>
         </el-table-column>
         </el-table>
         </div>
        </template>
        <script>
        import { ipcRenderer } from 'electron'
        import printDialog from './components/PrintDialog.vue'
        import Pinter from './components/pinter.vue'
        export default {
         name: 'App',
         components: {
         Pinter,
         printDialog
         },
         data() {
         return {
         dialogVisible: false,
         HtmlData: '',
         printList: [],
         tableData: [{
         date: '2016-05-02',
         name: '我是小仙女',
         address: '上海市浦東新區',
         tag: '家'
         }, {
         date: '2016-05-04',
         name: '我是小仙女1',
         address: '上海市浦東新區',
         tag: '公司'
         }, {
         date: '2016-05-01',
         name: '我是小仙女2',
         address: '上海市浦東新區',
         tag: '家'
         }, {
         date: '2016-05-03',
         name: '我是小仙女3',
         address: '上海市浦東新區',
         tag: '公司'
         }]
         }
         },
         mounted() {
         },
         methods: {
         showPrint() {
         this.dialogVisible = true
         },
         handlePrintDialogCancel() {
         this.dialogVisible = false
         },
         doPrint(row) {
         this.HtmlData = row.name
         this.$refs.print.print(row.name)
         }
         }
        }
        </script>
        
        <style>
        #app {
         font-family: 'Avenir', Helvetica, Arial, sans-serif;
         -webkit-font-smoothing: antialiased;
         -moz-osx-font-smoothing: grayscale;
         text-align: center;
         color: #2c3e50;
         margin-top: 60px;
        }
        </style>
        

        APP.VUE 每次點擊打印按鈕后觸發組件的print方法并將數據傳過去 this.$refs.print.print(row.name)
        printer.vue 查詢打印機,然后調用打印方法printRender。

        <template>
         <div class="container">
         <webview id="printWebview" ref="printWebview" :src="fullPath" nodeintegration />
         <printDialog :dialog-visible="dialogVisible" @cancel="handlePrintDialogCancel" @select-print="printSelectAfter" />
         </div>
        </template>
        <script>
        import { ipcRenderer } from 'electron'
        import path from 'path'
        import printDialog from './PrintDialog.vue'
        export default {
         name: 'Pinter',
         components: {
         printDialog
         },
         props: {
         // HtmlData: {
         // type: String,
         // default: '',
         // },
         },
         data() {
         return {
         printList: [],
         dialogVisible: false,
         printDeviceName: '',
         fullPath: path.join(__static, 'print.html'),
         messageBox: null,
         htmlData: ''
         }
         },
        
         mounted() {
         const webview = this.$refs.printWebview
         webview.addEventListener('ipc-message', (event) => {
         if (event.channel === 'webview-print-do') {
         console.log(this.printDeviceName)
         webview.print(
         {
         silent: true,
         printBackground: true,
         deviceName: this.printDeviceName
         },
         (data) => {
         this.messageBox.close()
         if (data) {
         this.$emit('complete')
         } else {
         this.$emit('cancel')
         }
         },
         )
         }
         })
         },
         methods: {
         print(val) {
         this.htmlData = val
         this.getPrintListHandle()
         },
         // 獲取打印機列表
         getPrintListHandle() {
         // 改用ipc異步方式獲取列表,解決打印列數量多的時候導致卡死的問題
         ipcRenderer.send('getPrinterList')
         ipcRenderer.once('getPrinterList', (event, data) => {
         // 過濾可用打印機
         this.printList = data.filter(element => element.status === 0)
         // 1.判斷是否有打印服務
         if (this.printList.length <= 0) {
         this.$message({
         message: '打印服務異常,請嘗試重啟電腦',
         type: 'error'
         })
         this.$emit('cancel')
         } else {
         this.checkPrinter()
         }
         })
         },
         // 2.判斷打印機狀態
         checkPrinter() {
         // 本地獲取打印機
         const printerName = this.$electronStore.get('printForm') || ''
         const printer = this.printList.find(device => device.name === printerName)
         // 有打印機設備并且狀態正常直接打印
         if (printer && printer.status === 0) {
         this.printDeviceName = printerName
         this.printRender()
         } else if (printerName === '') {
         this.$message({
         message: '請先設置其他打印機',
         type: 'error',
         duration: 1000,
         onClose: () => {
         this.dialogVisible = true
         }
         })
         this.$emit('cancel')
         } else {
         this.$message({
         message: '當前打印機不可用,請重新設置',
         type: 'error',
         duration: 1000,
         onClose: () => {
         this.dialogVisible = true
         }
         })
        
         }
         },
        
         handlePrintDialogCancel() {
         this.$emit('cancel')
         this.dialogVisible = false
         },
         printSelectAfter(val) {
         this.dialogVisible = false
         this.$electronStore.set('printForm', val.name)
         this.printDeviceName = val.name
         this.printRender()
         },
         printRender(html) {
         this.messageBox = this.$message({
         message: '打印中,請稍后',
         duration: 0
         })
         // 獲取<webview>節點
         const webview = this.$refs.printWebview
         // 發送信息到<webview>里的頁面
         webview.send('webview-print-render', {
         printName: this.printDeviceName,
         html: this.htmlData
         })
         }
         }
        }
        </script>
        <style scoped>
        .container {
         position: fixed;
         right: -500px;
        }
        </style>
        

        public/print.html渲染webview頁面成功后發送打印指令

         <script>
         const { ipcRenderer } = require('electron')
         ipcRenderer.on('webview-print-render', (event, info) => {
         // 執行渲染
         document.getElementById('bd').innerHTML = info.html
         ipcRenderer.sendToHost('webview-print-do')
         })
         </script>
         
        

        這里用到了electron-store存取本地數據

        background.js 引入 初始化掛載在global

        import ElectronStore from 'electron-store'
        // ElectronStore 默認數據
        import electronDefaultData from './config/electron-default-data'
        let electronStore
        app.on('ready', async() => {
         // 初始化配置文件
         electronStore = new ElectronStore({
         defaults: electronDefaultData,
         cwd: app.getPath('userData')
         })
         global.electronStore = electronStore
        })

        src/plugins/inject.js

        注冊$electronStore

        // eslint-disable-next-line
        import { remote } from 'electron'
        export default {
         /* eslint no-param-reassign: "error" */
         install(Vue) {
         Vue.prototype.$electronStore = remote.getGlobal('electronStore')
         
         }
        }
        

        然后你就可以在vue文件里讀取了

        this.$electronStore.get('printForm') 和 this.$electronStore.set('printForm', val.name)

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        electron實現靜默打印的示例代碼

        electron實現靜默打印的示例代碼:前言 electron+vuecli3 實現設置打印機,靜默打印小票功能 網上相關的資料比較少,這里給大家分享一下,希望大家可以少踩一些坑 github地址 必須要強調一下的是electron的版本必須是3.0.0不能,我嘗試了4和5都沒有實現 效果圖 使用 git clo
        推薦度:
        標簽: 打印 實現 electro
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 最好看的中文字幕2019免费| 免费无遮挡无码视频在线观看 | 麻豆精品不卡国产免费看| 亚洲乱码日产精品a级毛片久久| 亚洲av无码专区在线电影 | 中国国语毛片免费观看视频| 在线成人爽a毛片免费软件| 亚洲AV日韩AV永久无码下载| 日韩在线永久免费播放| 亚洲人和日本人jizz| 成年女人色毛片免费看| 亚洲av无码一区二区乱子伦as| 拍拍拍无挡视频免费观看1000 | 久久久久亚洲爆乳少妇无| 人人爽人人爽人人片A免费| 永久亚洲成a人片777777| 亚洲国产欧美日韩精品一区二区三区| 18禁无遮挡无码网站免费| 老司机亚洲精品影院| 麻豆一区二区免费播放网站| 亚洲欧美国产国产一区二区三区 | 亚洲va久久久噜噜噜久久狠狠| 精品无码无人网站免费视频| 亚洲国产韩国一区二区| 午夜成年女人毛片免费观看| 亚洲AV无码AV男人的天堂| www.免费在线观看| 在线观看亚洲人成网站| 在线免费观看a级片| 五级黄18以上免费看| 四虎永久成人免费| 亚洲成a人无码亚洲成av无码| 亚洲国产主播精品极品网红| 你懂的免费在线观看网站| 亚洲人成77777在线播放网站不卡 亚洲人成77777在线观看网 | 亚洲gv猛男gv无码男同短文| 1024免费福利永久观看网站| 国产成人精品久久亚洲高清不卡| 一二三四免费观看在线视频中文版 | 四虎影视永久免费视频观看| 成人片黄网站色大片免费观看APP|