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文件)。
扫描服务有以下功能:
获取和设置扫描设置(功能)
从扫描仪扫描单个或多个页面
检查机器上是否安装了扫描仪
获取已安装的扫描仪列表
选择要使用的特定扫描器
取消扫描
使用TWAIN 1即可。X库(twain_32.dll)或TWAIN 2.dll。X库(TwainDSM.dll)。一些遗留问题扫描仪不能很好地与较新的TWAIN 2配合使用。X库。
还提供了其他功能,例如获取扫描状态。
扫描服务依赖于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启动时启动应用程序。还可以修改此对话框以添加其他设置和品牌。
地点: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图像处理库。
安装程序注册:
用于在Internet Explorer中启动服务托管应用程序的Leadtools.WebScanning.Plugin.dll (ActiveX组件)。这是一个可选插件,可以像其他浏览器一样由应用程序的url替换。
该系统的部分API被记录在LEAD文件中在线文档188宝金博安卓下载.其他部分没有记录,因为提供了组件的源代码。的文档188宝金博安卓下载Leadtools.Services.Twain装配和Leadtools。理智的组装可以在网上找到。
下面几节描述了所提供的源代码中与系统功能最相关的部分。
的IScanning
interface定义了Web扫描框架的基本功能。
TwainScanning
来源于IScanning
,这是TWAIN实现类。TwainScanning
使用TwainService
类向Web扫描服务发送消息。TwainService
函数及其描述同IScanning
.
函数 | 描述 |
---|---|
初始化 |
试图启动托管应用程序 |
的getStatus |
获取扫描状态(扫描或非扫描) |
getSources |
获取可用于扫描的所有设备的列表 |
selectSource |
选择要扫描的设备 |
收购 |
启动扫描过程 |
getPage |
从扫描服务获取已扫描的页面 |
停止 |
结束扫描会话 |
开始 |
开始扫描会话 |
applyImageProcessingCommand |
将图像处理命令应用到特定页面 |
getImageProcessingPreview |
获取指定图像处理命令的预览图像 |
runCommand |
向扫描服务发送自定义用户命令以进行处理 |
getHandle |
获取可能提供更特定功能的底层实现类的句柄 |
类虽然没有派生IScanning
接口,它提供了每个函数的实现。类本质上是一个代理类,因为它构建发送到Web扫描服务的命令。它还包含特定于twin的功能,例如检索和修改扫描仪的设置(称为功能)。
函数 | 描述 |
---|---|
abortAcquire |
终止当前正在进行的收购 |
setCapabilityValue |
更改扫描程序设置的当前值 |
getCapability |
获取扫描器设置的当前值、默认值和所有可能的值 |
deletePage |
从Web扫描服务中移除扫描的页面 |
isAvailable |
确定是否安装TWAIN源 |
setVersion |
允许选择Web扫描服务使用的TWAIN库的版本。通过在版本1中调用此函数,Web扫描服务将尝试使用twain32.dll。通过在版本1中调用此函数,Web扫描服务将尝试使用TwainDSM.dll。 |
源于IScanning
,这是SANE实现类。这个类使用SaneService
类将消息发送到Web扫描服务。函数的描述类似于IScanning
.
类虽然没有派生IScanning
接口,它提供了每个函数的实现。类本质上是一个代理类,因为它构建发送到Web扫描服务的命令。它还包含SANE特定的功能,例如检索和修改扫描仪的设置,即选项。
函数 | 描述 |
---|---|
abortAcquire |
终止当前正在进行的收购 |
setOptionValue |
更改扫描程序设置的当前值 |
getOptionValue |
获取扫描器设置的当前值、默认值和所有可能的值 |
deletePage |
从Web扫描服务中移除扫描的页面 |
地点:LEADTOOLS21 \ \ JS \ ScanningDemo例子
这个web应用程序为系统提供用户界面。它直接与扫描服务通信,其中所有操作都由用户发起。
当视窗载入时(window
),扫描服务将使用startScanningService(…);
函数。函数的新实例lt.Scanning.JavaScript.IScanning
创建,并建立与扫描服务的连接。如果Leadtools.WebScanning.Host.exe
未运行时,框架将自动启动应用程序。用户可能会在浏览器中看到一个警告,提示网站正试图在他们的机器上启动一个应用程序。这是浏览器创建的标准对话框。
一旦连接并在设备上找到扫描仪,演示然后让用户执行这两个常见的扫描任务,以及每个页面的一些常见图像处理功能:
翻转,旋转,倾斜,穿孔去除(Linux上不支持),边界去除
在主要地区。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
函数允许您发送命令名称和参数到扫描服务,以及任何用户数据。
扫描服务在事件中接收请求,事件参数包含每个参数。然后,您就可以使用自己的自定义代码对数据进行处理。
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);
}
}
}
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);
}
}
返回女士;
}
的_scanningService.getHandle
函数允许您获取对底层对象的引用TwainService
类的TwainScanning
类使用。这允许你使用特定于服务的函数调用TwainService。这些函数包括abortAcquire
,getCapability
,setCapability
,deletePage
,setVersion
.
如何使用此函数的示例代码可以在Main中的扫描演示项目中找到。ts文件。搜索getTwainCapability
求函数。
如何使用此函数的示例代码可以在Main中的扫描演示项目中找到。ts文件。搜索setTwainCapability
求函数。
HTTP无法注册URLhttp://+:80/ScanService/
完全错误:HTTP不能注册URLhttp://+:80/ScanService
您的进程没有此名称空间的访问权限(请参阅配置HTTP和HTTPS详情)。
如果收到此错误,请按照错误中指定链接上的说明来解决它。已经使用“PowerUsers”组的用户和“Users”组的用户对该解决方案进行了测试。向每个用户注册URL后,用户就可以从Leadtools.WebScanning.Host.exe
使用随工具包附带的示例web页面没有任何问题。
概述 |
组件 |
使用API |