Java轻松实现跨平台(Windows、Linux)多协议(Twain、Sane)的Web扫描

myshandianxia 2024-09-02 15:33:05 阅读 68

  由于项目需要,开发在Windows下与Linux下扫描功能,Linux主要是信创的两个系统(UOS、麒麟),研究了一下发现,Windows使用Twain协议与扫描仪通讯,Linux使用的是Sane协议与扫描仪通讯,找到Twain协议和Sane协议的标准文档,英文的,都有大几百页,项目一个月内要求上线,明显没时间慢慢研究,于是在网上找了一番,发现了赞采扫描服务这个第三方组件,这个组件可以支持通过标准扫描协议(Twain、Sane)连接各类扫描硬件,兼容Windows及Linux系统,适配不同CPU指令集(x86、Arm、Loongarch、Mips等),而且不同平台不需要重复适配,一次集成即可完成Twain、Sane协议及不同操作系统的适配。通过使用这个组件,一周内就完成了项目的扫描功能,简直不要太轻松!!那么话不多说,下面简单介绍一下赞采扫描服务组件如何使用。

1.组件安装

首先按需下载安装包:

-Windows\赞采扫描服务-x86-1.0.1.zip 

下载链接: https://pan.baidu.com/s/1iBJzevyrWWVSc4NnLTYYyQ?pwd=p5j2

-Linux\赞采扫描服务-amd64-1.0.4.zip

下载链接: https://pan.baidu.com/s/1YQjRM71P4xYDQhqKKrYD_A?pwd=x7yb

-Linux\赞采扫描服务-arm64-1.0.4.zip

下载链接: https://pan.baidu.com/s/1A1wUp88dU_mNYDtuieGI5g?pwd=4jxv

-Linux\赞采扫描服务-loongarch64-1.0.4.zip

下载链接:https://pan.baidu.com/s/1Gpgl5f89BMBtQnOw6kRPXg?pwd=y9ze 

-Linux\赞采扫描服务-mips64el-1.0.4.ip

下载链接:https://pan.baidu.com/s/1O0B7bBqiIKNBjAViF01MTQ?pwd=zc4n

官方网站:https://www.nikoyo.com.cn/column/goods?type=productDetails&id=105

1.1Windows平台

 1)将zip压缩包解压到任意位置即可。这里以C://soft/ScanService目录为例

2)配置

可以使用文本编辑工具,打开安装目录下的【NKO.Scan.Service.exe.config】配置文件,进行扫描服务的基础配置。

SavePath:扫描文件默认保存路径,如果调用“001008”接口时,指定了扫描图片需要保存到本地,但未指定保存路径时,则会采用该默认的保存路径(接口详情,见开发手册)。Port:扫描服务Websocket使用的端口号。CertificatePath:.pfx证书文件路径,为空则以ws协议传输;填写正确的证书路径,则以wss协议传输。StartWithSystem:是否开机启动,true为开机启动(默认),false为关闭。BackgroundRun:是否后台运行,true为后台运行,任务栏与托盘都不会存在程序窗口,只能通过任务管理器或者附带脚本(shutdown.bat)关闭。False则会出现一个运行窗口,关闭该窗口时,退出扫描服务。

注:以上配置,重启扫描服务生效

1.2Linux平台

1)安装依赖项openjdk-8

Linux平台下的扫描服务,运行需要依赖于JDK,要求当前运行电脑已安装openjdk-8-jdk

2)检查当前电脑的系统架构,选择对应的deb安装包。

命令:uname -a

3)如上图,当前系统架构为arm64(等同arrch64),则选择安装包:赞采扫描服务-arm64-x.y.z.deb。双击开始安装。

4)如果出现以下依赖检查不通过的错误提示:

打开终端,执行以下命令(前提:可通外网,否则需自行前往官网下载对应的依赖并安装):

sudo apt-get update

执行完成后,重新双击进行安装。

5)点击安装。

6)如果弹出密码输入界面,则输入当前电脑的登录密码,点击确定。

7)等待安装完成。

8)安装成功,点击“完成”

9)默认安装目录:/opt/Nikoyo/nko-scan-service

2.组件整体介绍

1)调用方式

赞采扫描服务通过Socket的方式提供对接扫描仪的功能,如下图所示:

2)功能码调用流程

3.快速测试

扫描服务安装完成,并成功激活启动之后,可参考一下步骤,进行扫描服务的快速测试体验。

1)打开安装目录下的web-demo文件夹,使用浏览器打开Demo.html

Windows平台:

Linux平台:

2)打开之后,会自动连接扫描服务,并获取连接到当前电脑的扫描仪列表

3)扫描源:选择要使用的扫描仪(如本教程使用的富士通扫描仪)

4)选择成功后,会自动读取当前扫描仪支持的扫描配置

设置想要的扫描参数之后,点击扫描,扫描请求提交成功,会有提示

扫描完成之后,会弹出提示“执行完成”

在扫描结果列表视图,可以查看到扫描结果图片(可点击放大查看)

 4. JavaScript调用示例

下面示例代码可通过浏览器“开发人员工具”中的控制台进行调试:

1)创建1个WebSocket链接到本地的赞采扫描服务

// 创建一个 WebSocket 对象

let socket = new WebSocket("ws://127.0.0.1:51818");

// 连接打开时触发的事件

socket.onopen = function(event) {

  console.log("WebSocket is open now.");

  // 连接打开后发送消息到服务器

  socket.send("Hello Nikoyo WebSocket Capture Server!");

};

// 接收到消息时触发的事件

socket.onmessage = function(event) {

  console.log("Message from server: ", event.data);

};

// 连接关闭时触发的事件

socket.onclose = function(event) {

  console.log("WebSocket is closed now.");

};

// 发生错误时触发的事件

socket.onerror = function(error) {

  console.log("WebSocket Error: ", error);

};

// 在某个时刻发送消息到服务器

function sendMessage(message) {

  if (socket.readyState === WebSocket.OPEN) {

    socket.send(message);

    console.log("Message sent: ", message);

  } else {

    console.log("WebSocket is not open. Unable to send message.");

  }

}

2)发送功能码(001001)指令获取当前已连接的扫描设备Id列表; 

// 获取扫描设备列表

socket.send('{"function": "001001", "params": {}}');

3)根据指定Id发送功能码(001002)指令打开已连接的扫描设备;

// 连接扫描设备,下面已“Uniscan Qi5840”为例:

socket.send('{"function":"001002","params":{"scannerId":"Uniscan Qi5840"}}');

4)发送功能码(001007)指令设置扫描参数; 

// 设置扫描参数:从ADF获取,双面,A4幅面,DPI为200.

socket.send('{"function":"001007","params":{"source":"Adf-duplex","model":"color","paper-size":"A4","resolution":200}}');

5)发送功能码(001008)指令启动扫描;

// 开发扫描,将图像保存到指定位置;

socket.send(' {"function":"001008","params":{"fileFormat":"","fileSavePath":"C://ScanResult","fileType":"LocalPath","fileNamePrefix":"合同","fileNameFormat":"datetime","fileMd5Enabled":false}}');

// 开发扫描,将文件以Base64返回;

socket.send(' {"function":"001008","params":{"fileFormat":"","fileSavePath":"D://ScanResult","fileType":"Base64","fileNamePrefix":"合同","fileNameFormat":"datetime","fileMd5Enabled":false}}');

中间数据省略……

6)接收扫描设备返回的图像数据(功能码:001010)及扫描结束通知(功能码:001011);

接收到功能码为001010的消息数据中包含返回的图像数据相关信息。

接收到功能码为001011的消息表示本次扫描全部的图像数据已全部返回。

7)扫描全部结束后发送功能码(001012)指令关闭扫描设备;

// 关闭扫描设备连接。

socket.send(' {"function": "001012","params": {}}');

8)扫描全部结束后发送功能码(001013)指令关闭扫描设备源管理器;

// 关闭扫描设备源管理器连接。

socket.send(' {"function": "001013","params": {}}');

 9)扫描全部结束后关闭WebSocket连接。

socket.close;



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。