web应用 远程调用佳博打印机进行条码打印(详细教程)

需求:

    通过html调用本地服务启动打印机,带参数去打印不同内容。

步骤:

1. 生成可直接执行的exe程序。

2. 注册服务。

3. 前端调用测试。

1. 生成可直接执行的exe程序

1.1 前提:代码测试已经通过,可看我的另一篇文章(含代码)。

1.2 按如图步骤生成jar文件

 如上图所示,生成了PrintLaben.jar的文件。

1.3 按如图步骤生成exe文件

① 先将exe4j软件下载安装

链接:https://pan.baidu.com/s/11p3jewLX4tSkxCXzOAbhWA 
提取码:wg8j 

一直下一步即可安装完成。

② 打开exe4j软件,按照该视频可进行操作,注意一定要生成没有java,带jre的exe运行程序。如何将idea的java程序打包成exe (新版,可以在没有java的电脑下运行)_哔哩哔哩_bilibili

③ 经过②步骤,拿到exe文件跟jre的文件夹,保持在同一目录下面,再把这个TSCLIB.dll的打印机本地函数库放到同一目录下,这个库可以TODO一篇文章中获取。

2. 注册服务

2.1 新建一个print.reg的注册服务文件

Windows Registry Editor Version 5.00
 
[HKEY_CLASSES_ROOT\print]
@="print"
"URL Protocol"=""
 
[HKEY_CLASSES_ROOT\print\DefaultIcon]
@="D:\\develope\\washPrint\\PrintLabel.exe"

[HKEY_CLASSES_ROOT\print\shell]
@=""
 
[HKEY_CLASSES_ROOT\print\shell\open]
@="" 

[HKEY_CLASSES_ROOT\print\shell\open\command]
@="\"D:\\develope\\washPrint\\PrintLabel.exe\" \"%1\" " 

 如上图所示,其中

 D:\\develope\\washPrint\\PrintLabel.exe : 是你生成的exe程序的全路径地址

 \"%1\" :是代表可以带参数

2.2 新建后双击该文件

确认即可,打开cmd窗口,输入regedit打开,如下图所示

 如上图所示,即注册成功

2.3 打开浏览器,输入print://即可调用到PrintLabel.exe程序。

         

3.  前端调用程序

    <a href="" id="printLinks">
    <el-button type="primary">打印</el-button>
    </a>

这里的需求是,带过去的参数是变化的,所以在JS中采用下列代码获取,但是注意这里要在点击这个打印前去做设置,不然传过去的参数就是空。

 var a = document.getElementById('printLinks')
 a.setAttribute('href', '你需要设置的内容')

中文乱码问题(通过加解密算法解决):

用了好多方式都有问题:索性就是在前端出发带参数将内容进行加密

//引入加密板块
import CryptoJS from 'crypto-js/crypto-js'

//加密板块代码
const key = '1111122222333334'
var secret = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(printContent), CryptoJS.enc.Utf8.parse(key), {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
}).toString()

在打印的时候进行解密

//解密的依赖
<dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.14</version>
</dependency>



//密钥 前后台一致16位
private static final String KEY = "1111122222333334";
//参数分别代表 算法名称/加密模式/数据填充方式
private static final String ALGORITHMESTR = "AES/ECB/PKCS5Padding";



//解密算法
    public static String desEncrypt(String data) throws Exception {
        //decode解密
        //让程序自动创建keyGenerator对象,并告诉其用AES处理
        KeyGenerator kgen = KeyGenerator.getInstance("AES");
        //告诉秘钥生成器处理模式是128bit,也就是16位
        kgen.init(128);
        //拿到秘钥,KEY是我们刚刚定义的
        SecretKeySpec key1 = new SecretKeySpec(KEY.getBytes(), "AES");
        //创建密码器[算法名/加密模式/数据填充模式]
        Cipher cipher = Cipher.getInstance(ALGORITHMESTR);
        //表示密码器要使用key进行解码
        cipher.init(Cipher.DECRYPT_MODE, key1);
        //根据刚刚加密得到的结果,我们需要把info.getPassword字符串通过base64编码成cipher能识别的byte数组
        byte[] result = cipher.doFinal(Base64.decodeBase64(data));
        //测试通过,前后端AES一致,后端能转AES码[需要转为string]
        System.out.println("decode:" + new String(result, StandardCharsets.UTF_8));
        return new String(result, StandardCharsets.UTF_8);

    }

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值