前端VUE项目实现静默打印,无需用户手动确认

一、基础环境配置

  1. 安装核心依赖

    lua 复制代码
    npm install vue-plugin-hiprint socket.io-client jquery --save

    需同时安装socket.io-client实现静默打印通信,jquery用于DOM操作。

  2. 全局引入插件

    main.js中配置:

    javascript 复制代码
    javascriptCopy Code
    import { hiPrintPlugin } from 'vue-plugin-hiprint'
    import $ from 'jquery'
    
    Vue.use(hiPrintPlugin, '$hiprint')
    Vue.prototype.$ = $
    hiPrintPlugin.disAutoConnect() // 禁用自动连接客户端:ml-citation{ref="4,5" data="citationList"}
  3. 样式文件配置

    复制node_modules/vue-plugin-hiprint/dist/print-lock.css到项目public目录,并在index.html添加:

    ruby 复制代码
    htmlCopy Code
    <link rel="stylesheet" href="<%= BASE_URL %>print-lock.css" media="print">:ml-citation{ref="3,5" data="citationList"}

二、静默打印实现

  1. 客户端安装

    下载electron-hiprint客户端并以管理员身份安装,配置默认打印机和TOKEN(如TEST_PRINT)。

  2. 打印模板初始化

    php 复制代码
    javascriptCopy Code
    const template = new this.$hiprint.PrintTemplate({
      settingContainer: '#printSettings'
    })
    const panel = template.addPrintPanel({
      width: 210,
      height: 297,
      paperFooter: 340
    })
    panel.addPrintText({
      options: {
        width: 100,
        height: 20,
        title: '产品条码',
        textType: 'barcode' // 支持条形码/二维码:ml-citation{ref="13,19" data="citationList"}
      }
    })
  3. 静默打印触发

    php 复制代码
    javascriptCopy Code
    // 连接打印客户端
    const socket = io("http://localhost:17521", {
      transports: ["websocket"],
      auth: { token: "TEST_PRINT" }
    })
    
    // 发送打印指令
    socket.emit("news", {
      html: template.getHtml(),
      pageSize: 'A4',
      printer: '打印机名称' // 不填则使用默认打印机:ml-citation{ref="4,6" data="citationList"}
    })

三、企业级优化方案

  1. 批量打印处理

    ini 复制代码
    javascriptCopy Code
    const batchData = [{id:1}, {id:2}]
    batchData.forEach(item => {
      panel.updateElement('barcode', { title: item.id })
      socket.emit("news", { html: template.getHtml() })
    }):ml-citation{ref="16,19" data="citationList"}
  2. PDF静默打印

    php 复制代码
    javascriptCopy Code
    this.$hiprint.hiwebSocket.send({
      type: 'url_pdf',
      pdf_path: 'http://example.com/file.pdf',
      copies: 2 // 打印份数:ml-citation{ref="6,8" data="citationList"}
    })

四、常见问题解决

  1. 跨域问题
    需确保客户端和前端项目同域名或配置HTTPS。
  2. Node版本兼容
    推荐使用Node 16.x版本,高版本可能出现兼容性问题11。
  3. 样式冲突
    如遇UI框架样式干扰,需重写print-lock.css中的关键样式。
相关推荐
憧憬成为web高手5 小时前
ACTF 12307复现
前端·bootstrap·html
wordbaby5 小时前
Axios 上传大文件崩溃:鸿蒙 RNOH 下 XHR 返回空响应头引发的"假失败"
前端·react native
wordbaby5 小时前
React Native 列表分页实战:下拉刷新与上拉加载的工程化方案
前端·react native
wordbaby6 小时前
脱离 Tab 栏的艺术:React Native 全屏子页面的导航架构实践
前端·react native·harmonyos
陈随易6 小时前
Redis 8.8发布,一定要更新
前端·后端·程序员
wordbaby7 小时前
React Native 新架构落地鸿蒙:跨三端政务级应用的工程实践与深度复盘
前端·react native·harmonyos
excel8 小时前
为什么我推荐使用 Termius:现代 SSH 工具的完整体验
前端·后端
ZC跨境爬虫8 小时前
模块化烹饪小程序开发日记 Day7:(菜谱详情接口开发与JSON数据读取全流程)
前端·javascript·css·ui·微信小程序·json
এ慕ོ冬℘゜8 小时前
JS 前端基础面试题
开发语言·前端·javascript
LaughingZhu8 小时前
Product Hunt 每日热榜 | 2026-05-25
前端·人工智能·经验分享·chatgpt·html