首页 > 系统相关 >Java轻松实现跨平台(Windows、Linux)多协议(Twain、Sane)的Web扫描

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

时间:2024-08-19 11:53:23浏览次数:10  
标签:function Web 扫描仪 Java socket 扫描 跨平台 Linux 赞采

  由于项目需要,开发在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;

标签:function,Web,扫描仪,Java,socket,扫描,跨平台,Linux,赞采
From: https://blog.csdn.net/myshandianxia/article/details/141311546

相关文章

  • 【JavaSec】类的动态加载初探
    0x02类的动态加载文章目录0x02类的动态加载什么是类加载?动态类加载方法:类加载:继承关系:调用关系:下面尝试使用URLClassLoader进行尝试http协议:jar协议:http读取方法:file读取方法:使用defineClass类加载方法Unsafe类加载什么是类加载?即虚拟机加载.class文件在......
  • WebGIS产品分析
    WebGIS(网络地理信息系统)是指基于网络平台,客户端应用软件采用网络协议,运行在网络上的地理信息系统,即将GIS所能提供的功能通过网络展现给用户。顾名思义,WebGIS就是展现在网络上的GIS,是GIS与Web融合的产物。GIS通过Web功能得以扩展,使得GIS冲破专业圈子,真正成为大众化的GIS。如今,网......
  • Java实现:如何通过调度任务搜索附近代驾司机
    文章目录任务需求代码实现代码解读1.任务查询和校验2.订单状态检查3.搜索附近的司机4.推送订单信息结论在现代的出行服务中,代驾服务越来越普及。为了确保用户能够快速找到附近的代驾司机,自动化调度系统显得尤为重要。今天,我将分享一个Java实现的调度任务,旨在根......
  • JAVA毕业设计|(免费)springboot基于spring boot的校园商铺管理系统包含文档代码讲解
    收藏点赞不迷路 关注作者有好处编号:springboot188springboot基于springboot的校园商铺管理系统开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis+Vue+html工具:IDEA/Ecilpse、Navicat、Maven1.系统展示2.万字文档展示第5章系统详细设计系统实现这个章节的......
  • JAVA毕业设计|(免费)springboot基于java的火车票订票系统的包含文档代码讲解
    收藏点赞不迷路 关注作者有好处编号:springboot294springboot基于java的火车票订票系统的开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis+Vue工具:IDEA/Ecilpse、Navicat、Maven1.系统展示2.万字文档展示第5章系统详细设计这个环节需要使用前面的设计方案,......
  • 界面控件DevExpress ASP.NET Web Forms v24.1最新版本系统环境配置要求
    本文档包含有关安装和使用 DevExpressASP.NETWebForms控件的系统要求的信息。点击获取DevExpressv24.1正式版.NETFrameworkDevExpressASP.NETWebForms控件支持以下.NET框架版本。如果您需要DevExpress产品的早期版本,请咨询“在线客服”获取。IDEDevExpressASP.......
  • Java中ArrayList集合—基础详解(知识点+代码示例)
    ArrayList(集合)ArrayList(集合)ArrayList(集合)10.1ArrayList成员方法10.2集合练习10.2.1添加字符串10.2.2添加数字10.2.3添加学生对象并遍历10.2.4集合概述:集合可以直接存储引用数据类型,不能直接存储基本数据类型,如果要存储基本数据类型,需要将基本数据类型变成对......
  • java队列
    1.队列定义:在Java中,队列(Queue)是一种常用的数据结构,属于java.util包。Queue接口继承自Collection接口,定义了一些基本操作,如入队、出队、查看队列头部等。Java提供了多种实现Queue接口的类,这些类可以满足不同的使用需求。2.Java队列的常见实现LinkedList:实现了Que......
  • 秒开WebView?Android性能优化全攻略
    在如今的移动应用时代,用户体验的好坏直接关系到应用的成功与否。而在众多的用户体验因素中,应用的加载速度尤其重要。特别是对于使用 WebView 加载网页的应用,如果加载速度过慢,用户往往会产生不满,从而流失。因此,实现“秒开”WebView成为了开发者必须面对的一项挑战。本文将深......
  • net core web api 支持xml参数 设置
    废话不多说,上教程。......