VUE3 简单几步实现云端打印

110 阅读2分钟

前言

上一篇文章vue3 实现自定义模板我们实现了自定义模板打印,基于已有的打印模板,本篇文章我们来实现云端打印,项目主要功能均基于开源项目 vue-plugin-hiprint 开发

云端打印基于打印服务端+打印桌面端+后台三部分组成,上一篇文章我们已经完成后台的大部分功能,接下来主要介绍其他两部分的安装

准备

桌面端

打印桌面端 是一个 electron-vue 项目,这里我们可以下载源码,在本地启动运行,安装依赖时候 nodejs 版本最好 18 以下,同时还需要电脑安装 Visiual Studio Build Tools,安装依赖的时候,我们可以来部署打印中转服务

服务端

中转服务 是一个 nodejs 项目,有服务器的可以自己部署服务,官方推荐 docker 镜像一键部署

克隆项目

git clone https://github.com/Xavier9896/node-hiprint-transit.git
cd node-hiprint-transit

启动服务

docker-compose up -d

🎈 通过镜像启动服务会跳过端口和 token 设置,端口默认是 17521,token 默认配置在根目录config.json

也可以下载项目在本地运行,这个在项目仓库都有介绍,在 nodejs 服务启动成功后,我们可以运行桌面端项目,启动成功后打开应用,在应用设置页面-》中转设置,配置参数,点击测试连接,显示连接成功

打印

桌面端和服务端连接成功,接下来就是后台和服务端连接

在 服务端 项目仓库中有介绍后台vue-plugin-print连接服务的方法

import { hiprint } from 'vue-plugin-hiprint';

hiprint.init({
  host: 'https://v5.printjs.cn:17521'// 此处输入服务启动后的地址
  token: 'hiprint-test-1'// 用于鉴权的token
})

如果仅仅配置这个,当使用hiwebSocket.socket.on监听消息时候,返回的并不是服务发送的信息,而是桌面端 socket 返回的信息,可能跟vue-plugin-hiprint源码中hiwebSocket设置有关, 默认hiwebSocket连的就是客户端的 socket

这里我们可以调用setHost指定连接地址,重新连接

hiwebSocket.setHost("https://printjs.cn:17521""vue-plugin-hiprint");

也可以使用 socket 连接服务端,笔者使用 第二种方式,安装依赖

npm install socket.io-client@4 --save

连接服务端 socket

const socket io("服务地址", {
  transports: ["websocket"],
  auth: {
    token"hiprint",
  },
});

监听返回,并 打印结果,templatehiprint.PrintTemplate的实例,通过getJson( )获得模板的 JSON 数据,record

socket.on("printerList", (printerList) => {
  socket.emit('render-print', {
    template: template.getJson(),
    data: record,
    client: printerList[0].server.clientId,
  })
});