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

  由于项目需要,开发在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)默认安装目录:C:\Users\%当前用户%\AppData\Local\Nikoyo\赞采扫描服务

3)配置

可以使用文本编辑工具,打开安装目录下的【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)功能说明

功能码

功能

001001

获取连接到当前终端的所有扫描仪

001002

选中某一获取到的扫描仪并打开

001003

获取当前选中扫描仪可配置的项

001004

设置或修改当前选中扫描仪某一配置项的能力值

001007

常用参数的便捷配置能力(进纸模式、色彩、尺寸、DPI)

001008

当前扫描仪启动扫描

001009

获取扫描已传输的文件数量

001010

获取扫描结果图片

001011

发送扫描结束通知

001012

关闭当前选择的扫描仪

001013

释放当前扫描资源

001014

获取扫描仪当前状态

001015

弹出Twain驱动程序参数配置界面

001017

根据扫描仪ID获取扫描仪序列号

3)功能码调用流程

3.快速测试

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

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

Windows平台:

Linux平台:

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

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

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

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

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

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

 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;

  • 26
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值