Web扫描框架



概述

Web扫描演示由一个网站(客户端)和一个可执行文件(服务)组成。

下面是整个系统使用扫描仪、文件系统和云的示意图。

Web扫描设置示意图

客户端代码只是与自托管的web服务(扫描服务)通信的JavaScript,后者又与扫描仪通信。扫描服务还包含允许使用任何其他API函数的功能。该示例演示了如何使用LEAD的图像处理功能(翻转、旋转、边框移除、打孔移除和倾斜)。

提供了托管扫描服务的可执行文件的源代码,因此您可以根据需要添加额外的库,根据需要标记EXE,并使用您选择的打包软件打包可执行文件。

查看器包含扫描的每个页面的缩略图列表。它位于主查看器的左侧。

在用户完成扫描和编辑图像后,它们可以保存到客户端的本地驱动器或保存到内存中。一旦保存,文件可以发送到服务器,如微软的SharePoint,微软的One Drive,谷歌Docs等。

好处

这个系统的主要好处是,它允许你维护一个代码库,可以跨所有支持HTML5的浏览器运行。

限制

目前LEADTOOLS只支持Windows操作系统使用TWAIN扫描,Linux操作系统使用SANE扫描。

组件

扫描服务

窗户

地点:Leadtools.Services.Twain.dll

扫描服务作为一个库驻留在一个名为Leadtools.WebScanning.Host.exe,它提供了32位和64位的库和可执行文件。可执行文件必须下载并安装在客户端机器上,才能与位于客户端机器上的扫描器通信。扫描服务从客户端页面中的JavaScript代码接收基于rest的命令,并将它们转换为TWAIN命令。如果JavaScript演示无法与扫描服务通信,它将显示一个带有消息的对话框,并提供下载安装程序的链接(*。msi文件)。

扫描服务有以下功能:

还提供了其他功能,例如获取扫描状态。

扫描服务依赖于LEADTOOLS库来与TWAIN设备通信并提供图像处理功能。LEADTOOLS库作为扫描服务安装程序的一部分分发。

图像处理

窗户

地点:LEADTOOLS21 \ \ DotNet \ CS例子\ Leadtools.WebScanning.Host \ \ ImageProcessing.cs服务

扫描服务使用可扩展的接口来调用已定义的图像处理函数。它允许您使用JavaScript发送指定图像处理函数名称、参数和要处理的页码的请求。扫描服务接收请求并调用相应的图像处理函数。您可以通过添加任意一个来扩展可用的函数LEADTOOLS形象处理函数,或者通过添加任何其他3的代码理查德·道金斯聚会,派对

命令回调

窗户

地点:LEADTOOLS21 \ \ DotNet \ CS例子\ Leadtools.WebScanning.Host \ \ WebScanningForm.cs UI

除了创建可扩展的图像处理接口外,还可以从扫描服务可执行文件(Leadtools.WebScanning.Host.exe).从JavaScript中,只需将命令名和参数发送到扫描服务。这将调用一个接收命令名和参数的函数,从那里您可以添加任何必要的额外业务逻辑。

私人流CommandCallBack(commanddeventargs args)Console.WriteLine (args.CommandName);Console.WriteLine (args.Arguments);//TODO:处理用户命令返回

例如,您可能希望添加代码将所有扫描的页面保存到内存中的文件中,然后使用3理查德·道金斯party云存储API用于将文件存储到云。或者,您可能只想允许用户将扫描页面的副本保存到本地计算机。

服务托管应用程序

窗户

地点:LEADTOOLS21 \ \ DotNet \ CS \ Leadtools.WebScanning.Host例子

这是Windows应用程序项目,它引用、托管扫描服务,并保存图像处理和命令回调功能的代码。

应用程序的代码公开了主机类,允许对URL、端口号和Scanner Service将侦听的协议(HTTP/HTTPS)进行调整。您还可以根据需要调整绑定和端点。

安装完成后,Leadtools.WebScanning.Host.exe作为Windows应用程序运行,但隐藏在视图中。用户将看到它以图标的形式出现在系统托盘中。图标可以替换为贵公司的品牌。

用户可以右键单击图标并选择关闭应用程序,或者打开一个对话框,显示一个选项,以便在Windows启动时启动应用程序。还可以修改此对话框以添加其他设置和品牌。

客户端JavaScript

地点:LEADTOOLS21 \ \ \ \ JS \ \ ScanningDemo例子

客户端JavaScript站点的主要JavaScript代码在ScanningDemo\App\ main .js文件中。这段代码使用了Leadtools.Scanning.js (\ LEADTOOLS21 \ \ JS \ ScanningDemo \常见例子\ lib中)代码与使用Web请求发送命令的扫描服务通信。

Leadtools.Scanning.js代码包含IScanning接口以及TwainScanning而且TwainService实现提供特定于twin的功能。最常用的TWAIN常量也被定义为允许在Typescript中进行智能感知编程。

提供了该演示的源代码来快速启动项目。例如,快速修改演示页面的“外观”或向其添加特定于解决方案的功能。

安装项目

地点:LEADTOOLS21 \ \ DotNet \ CS \ WebScanning例子。设置

安装程序项目允许您构建*.msi文件,其中包含扫描服务及其所需的依赖项。使用此项目可添加可能需要与扫描服务一起部署的其他依赖项。例如,如果您添加了额外的图像处理功能,则可能需要在扫描服务中部署额外的LEADTOOLS图像处理库。

安装程序注册:

使用API

该系统的部分API被记录在LEAD文件中在线文档188宝金博安卓下载.其他部分没有记录,因为提供了组件的源代码。的文档188宝金博安卓下载Leadtools.Services.Twain装配和Leadtools。理智的组装可以在网上找到。

下面几节描述了所提供的源代码中与系统功能最相关的部分。

类/层次结构(高级视图)

web-scanning-hierarchy.jpg

IScanning

IScanninginterface定义了Web扫描框架的基本功能。

TwainScanning

TwainScanning来源于IScanning,这是TWAIN实现类。TwainScanning使用TwainService类向Web扫描服务发送消息。TwainService函数及其描述同IScanning

函数 描述
初始化 试图启动托管应用程序
的getStatus 获取扫描状态(扫描或非扫描)
getSources 获取可用于扫描的所有设备的列表
selectSource 选择要扫描的设备
收购 启动扫描过程
getPage 从扫描服务获取已扫描的页面
停止 结束扫描会话
开始 开始扫描会话
applyImageProcessingCommand 将图像处理命令应用到特定页面
getImageProcessingPreview 获取指定图像处理命令的预览图像
runCommand 向扫描服务发送自定义用户命令以进行处理
getHandle 获取可能提供更特定功能的底层实现类的句柄

TwainService

类虽然没有派生IScanning接口,它提供了每个函数的实现。类本质上是一个代理类,因为它构建发送到Web扫描服务的命令。它还包含特定于twin的功能,例如检索和修改扫描仪的设置(称为功能)。

函数 描述
abortAcquire 终止当前正在进行的收购
setCapabilityValue 更改扫描程序设置的当前值
getCapability 获取扫描器设置的当前值、默认值和所有可能的值
deletePage 从Web扫描服务中移除扫描的页面
isAvailable 确定是否安装TWAIN源
setVersion 允许选择Web扫描服务使用的TWAIN库的版本。通过在版本1中调用此函数,Web扫描服务将尝试使用twain32.dll。通过在版本1中调用此函数,Web扫描服务将尝试使用TwainDSM.dll。

SaneScanning

源于IScanning,这是SANE实现类。这个类使用SaneService类将消息发送到Web扫描服务。函数的描述类似于IScanning

SaneService

类虽然没有派生IScanning接口,它提供了每个函数的实现。类本质上是一个代理类,因为它构建发送到Web扫描服务的命令。它还包含SANE特定的功能,例如检索和修改扫描仪的设置,即选项。

函数 描述
abortAcquire 终止当前正在进行的收购
setOptionValue 更改扫描程序设置的当前值
getOptionValue 获取扫描器设置的当前值、默认值和所有可能的值
deletePage 从Web扫描服务中移除扫描的页面

客户端/ JavaScript /浏览器

地点:LEADTOOLS21 \ \ JS \ ScanningDemo例子

这个web应用程序为系统提供用户界面。它直接与扫描服务通信,其中所有操作都由用户发起。

web-scanning-browser.jpg

当视窗载入时(window),扫描服务将使用startScanningService(…);函数。函数的新实例lt.Scanning.JavaScript.IScanning创建,并建立与扫描服务的连接。如果Leadtools.WebScanning.Host.exe未运行时,框架将自动启动应用程序。用户可能会在浏览器中看到一个警告,提示网站正试图在他们的机器上启动一个应用程序。这是浏览器创建的标准对话框。

一旦连接并在设备上找到扫描仪,演示然后让用户执行这两个常见的扫描任务,以及每个页面的一些常见图像处理功能:

演示展示的功能

选择扫描仪

在主要地区。Ts文件函数selectSourceBtn_Click方法获取安装在机器上的扫描仪的列表_scanningService.getSources函数。该函数将向扫描服务发送一个请求,该服务将使用LEADTOOLS Twain API获取机器上安装的Twain扫描仪列表。

在获得扫描仪名称列表之后,将用这些名称填充一个UI元素,并向用户显示一个对话框。

当用户选择一个扫描器名称时,代码在Main.ts(在# selectSourceDialog),其中_scanningService.selectSource最终调用,传递扫描器的名称。

收购

Main.ts将函数存档scanBtn_Click首先调用_scanningService.acquire函数开始扫描过程。默认行为是显示扫描仪的制造商对话框;这是获取函数中的第一个参数。

当acquire函数返回时,所有页面都将被扫描并保存在临时缓存中。

控件可以访问每个映像_scanningService.getPage函数,该函数以URL的形式返回页面的位置。这允许将每个页面分配给HTML图像元素的代码最小化。

方法也可以从缓存中删除页面TwainService.deletePage函数。

图像处理

Main.ts文件的_scanningService.applyImageProcessingCommand函数向扫描服务发送请求,并在扫描服务的图像处理事件中结束。

applyImageProcessingCommand允许您指定开始页和结束页,以及在一个函数调用中处理多个页。

命令回调

虽然在演示中没有找到_scanningService.runCommand函数允许您发送命令名称和参数到扫描服务,以及任何用户数据。

扫描服务在事件中接收请求,事件参数包含每个参数。然后,您就可以使用自己的自定义代码对数据进行处理。

示例:保存扫描图像到本地驱动器

JavaScript
SaveToLocalParams param =SaveToLocalParams ();参数。文件名= GetFileName();参数。为mat = GetFileFormat();$ . get (_scanningService.runCommand (“SaveToLocal”参数,));

扫描服务
私人流CommandCallBack(commanddeventargs args)如果(arg游戏。CommandName = =“SaveToLocal”SaveToLocalParams参数个数= Json.Parse (args.Arguments);SaveToLocal (参数个数);返回私人无效SaveToLocal (SaveToLocalParams e)RasterImage page =RasterCodecs codecs =RasterCodecs ();TwainStatus状态=.ScanningService。GetStatus (id、用户数据);intpageNumber = 1;pageNumber <= status.PagesCount;pageNumber + +)页面=.ScanningService。GetImage (id、pageNumber);如果(页面! =编解码器。保存(page, e.Filename, e.Format, 0,1,1, -1, CodecsSavePageMode.Append);

示例:将扫描图像保存到内存并返回

JavaScript
SaveToMemoryParams param =SaveToMemoryParams ();参数。为mat = GetFileFormat();美元。get (twainService.runCommand (“SaveToMemory”参数,),函数(memoryFile) {alert(“成功”);});

扫描服务
私人流CommandCallBack(commanddeventargs args)如果(arg游戏。CommandName = =“SaveToMemory”SaveToMemoryParams参数个数= Json.Parse (args.Arguments);流=SaveToMemory (参数个数);WebOperationContext.Current.OutgoingRequest.ContentType =GetContentType (参数个数.Format);WebOperationContext.Current.OutgoingRequest.ContentLength = s.Length;返回年代;返回私人保存内存(SaveToMemoryParams e)RasterImage page =RasterCodecs codecs =RasterCodecs ();MemoryStream ms =MemoryStream ();TwainStatus状态=.ScanningService。GetStatus (id、用户数据);intpageNumber = 1;pageNumber <= status.PagesCount;pageNumber + +)页面=.ScanningService。GetImage (id、pageNumber);如果(页面! =编解码器。Save(page, ms, e.Format, 0,1,1, -1, CodecsSavePageMode.Append);返回女士;

额外的功能

GetHandle

_scanningService.getHandle函数允许您获取对底层对象的引用TwainService类的TwainScanning类使用。这允许你使用特定于服务的函数调用TwainService。这些函数包括abortAcquiregetCapabilitysetCapabilitydeletePage,setVersion

GetCapability

如何使用此函数的示例代码可以在Main中的扫描演示项目中找到。ts文件。搜索getTwainCapability求函数。

SetCapability

如何使用此函数的示例代码可以在Main中的扫描演示项目中找到。ts文件。搜索setTwainCapability求函数。

有用的链接

故障排除

HTTP无法注册URLhttp://+:80/ScanService/

完全错误:HTTP不能注册URLhttp://+:80/ScanService您的进程没有此名称空间的访问权限(请参阅配置HTTP和HTTPS详情)。

如果收到此错误,请按照错误中指定链接上的说明来解决它。已经使用“PowerUsers”组的用户和“Users”组的用户对该解决方案进行了测试。向每个用户注册URL后,用户就可以从Leadtools.WebScanning.Host.exe使用随工具包附带的示例web页面没有任何问题。

顶级^

相关的话题

概述
组件
使用API
LEADTOOLS成像、医疗和文档
188金宝搏的网址客服|支持|联系我们|知识产权公告
©1991 - 2021领德科技有限公司版权所有。