Dynamic Web TWAIN初始化:Initialize
1 使用版本
动态Web TWAIN可以在两种模式下运行。桌面服务或WebAssembly
1.1 桌面服务
1.1.1 什么是桌面服务
桌面服务版是指 Dynamic Web TWAIN 通过 Dynamsoft 服务进行操作,该服务是一个安静的后台系统服务,处理连接设备和浏览器客户端之间的通信以及成像处理、编码、解码等。
当在桌面上使用Dynamic Web TWAIN时,默认使用服务模式(推荐),并且这种模式下必须安装Dynamsoft服务。
1.1.2 安装Dynamsoft服务
,英文的但是很简单。
1.2 WebAssembly
1.2.1 什么是WebAssembly
WebAssembly (WASM) 版是指在Web Worker和WebAssembly的帮助下,动态Web TWAIN完全在浏览器中运行。它使用户免于手动安装任何东西。但这依赖于一些只有现代WASM浏览器才能提供的高级功能。
如果用户决定通过移动浏览器访问 Dynamic Web TWAIN 应用程序,或者他们不想在桌面上安装任何东西,他们可以选择 WASM 模式。
1.2.2 如何在桌面使用WebAssembly
如前所述,桌面用户将默认使用桌面服务版,而手机和平板电脑用户将默认使用WebAssembly版。然而,如果你想让桌面用户在WebAssembly版中启动,放弃对服务的需求,你可以在初始化代码中把UseLocalService设置为false
1.3 两种模式的对比
桌面服务版和WebAssembly版的一个主要区别是,后者不能访问本地设备,这意味着无法使用本地扫描仪。另外,WebAssembly版的性能和速度也不如服务版,因为它不能利用那么多资源。
2 加载核心JS库
2.1 核心文件的介绍
在SDK安装时包含的Resources目录中,你可以找到以下两个文件,它们是定义Dynamic Web TWAIN配置和操作的主要JS文件。
- dynamsoft.webtwain.config.js【配置文件】
- dynamsoft.webtwain.initiate.js【功能核心】
答:一般来说,dynamsoft.webtwain.initiate.js 和 dynamsoft.webtwain.config.js 都需要被引用。在前一个文件中,它检测后者是否已被加载;如果没有,它将等待。因此,哪个文件在先并不重要。
问:为什么我看到的是dynamsoft.webtwain.min.js和dynamsoft.webtwain.min.mjs而不是上面的两个文件?
答:这两个文件存在于官方npm包dwt中。为了简单起见,在每一个文件中,Dynamsoft都包含了所有必要的JavaScript代码,其中包括上面提到的两个文件加上dynamsoft.webtwain.install.js和所有额外的组件(附加组件)。.js文件是代码的简单组合,而.mjs文件则是作为ECMAScript 6 (ES6)模块构建的,用于基于Angular、React和Vue等的应用。
在普通的应用程序中,仅引用dynamsoft.webtwain.min.js就比引用dynamsoft.webtwain.config.js和dynamsoft.webtwain.initiate.js要多。
3 加载Add-on JS文件
Dynamic Web TWAIN 提供了许多附加组件,包括一个条形码阅读器、一个 PDF 光栅器、两个网络摄像头利用器和两个 OCR 引擎。这些组件的文件都在资源目录下的addon子文件夹中。了解更多关于资源文件的信息。
你可以引用相应的JavaScript文件来包含这些附加组件中的任何一个。一旦引用了一个JavaScript文件,该组件的成员方法/属性就会在Dynamsoft名称空间中可用,以后可以被WebTwain实例使用。
4 加载支持文件
一旦主要的JavaScript文件被加载,初始化过程就会转向加载所有其他的支持JS文件以及CSS文件。根据DWT的运行模式,支持文件有所不同
4.1 桌面服务版文件在resource文件夹内
- dynamsoft.webtwain.install.js
- src/dynamsoft.viewer.js
- src/dynamsoft.viewer.css
- src/dynamsoft.webtwain.css
4.1.2 dynamsoft.viewer.js, dynamsoft.viewer.css and dynamsoft.webtwain.css 这三个文件被用来构建动态Web TWAIN的查看器组件,以及定义库中其他UI元素的CSS。
4.2 WebAssembly版的特定文件
除了服务模式需要的4个文件外,WebAssembly版还需要以下文件:
Image IO
- dynamsoft.imageio.js
- dynamsoft.imageio_wasm-<version number>.js
- dynamsoft.imagecore-<version number>.wasm
- dynamsoft.imageio-<version number>.wasm
- dynamsoft.imageProc-<version number>.wasm
- dynamsoft.pdfReader-<version number>.wasm
- dynamsoft.pdfWriter-<version number>.wasm
答:不是,当满足以下条件之一时,即使在服务模式下,库也会使用WebAssembly文件
- WebTwain.Addon.Camera组件的API被调用。
- WebTwain.Camera.showVideo()或WebTwain.Camera.closeVideo()的API被调用。
5 创建WebTwain 实例
问:是否有必要手动调用Dynamsoft.DWT.Load?
答:不需要。只有当Dynamsoft.DWT.AutoLoad被设置为false时才需要调用它。如果AutoLoad为真,一旦运行环境准备好,就会自动调用Load。Dynamsoft.DWT.AutoLoad在文件dynamsoft.webtwain.config.js中定义,但可以在实际加载开始前的任何地方调用。默认情况下,它被设置为 "true"。
问:我在哪里可以得到实例的处理程序?
答:当调用Load时,DWT试图创建WebTwain实例。一旦完成,DWT会触发内置回调Dynamsoft.DWT.OnWebTwainReady,其中Dynamsoft.DWT.GetWebTwain方法可以用来获取实例的处理程序。为了简单起见,OnWebTwainReady的回调指向一个名为Dynamsoft_OnReady的全局函数。下面的片段是等价的
//注册方式1 Dynamsoft.DWT.OnWebTwainReady = function() { DWObject = Dynamsoft.DWT.GetWebTwain("dwtcontrolContainer"); } //注册方式2 Dynamsoft.DWT.RegisterEvent('OnWebTwainReady', Dynamsoft_OnReady); function Dynamsoft_OnReady() { DWObject = Dynamsoft.DWT.GetWebTwain("dwtcontrolContainer"); }在dynamsoft.webtwain.config.js也可以自定义注册节点(下面三个元素就不用解释了吧?):
Dynamsoft.DWT.Containers = [{ ContainerId: 'dwtcontrolContainer', Width: '585px', Height: '513px' }];要创建多个实例,只需提供多个容器即可,例如,以下是创建两个WebTwain实例的例子
Dynamsoft.DWT.Containers = [{ ContainerId: 'dwtcontrolContainer1', Width: '585px', Height: '513px' }, { ContainerId: 'dwtcontrolContainer2', Width: '585px', Height: '513px' }];5.2 Dynamsoft.DWT.CreateDWTObject
该方法手动创建一个具有默认内置查看器的WebTwain实例
问:该方法能否创建一个没有默认浏览器的WebTwain实例?
答:不能,只有CreateDWTObjectEx可以这样做。
问:这个方法是否可以和Load一起使用?
答:可以,在Load创建了最初的WebTwain实例后,该方法可以创建更多的WebTwain实例。
问:我如何使用这个方法来创建WebTwain实例而不使用Load?
答:如果Dynamsoft.DWT.AutoLoad被设置为 "true",就会自动调用Load。因此,要忽略Load,Dynamsoft.DWT.AutoLoad必须被设置为false。
问:如何使用CreateDWTObject
答:该方法的语法如下
CreateDWTObject( ContainerId: string, host ? : string, port ? : string | number, portSSL ? : string | number, successCallBack: (DWObject: WebTwain) => void, failureCallBack: (errorString: string) => void ): void;
以下相当于使用Load与配置Dynamsoft.DWT.Containers = [{ContainerId: 'dwtcontrolContainer', Width: '585px', Height: '513px'}。
Dynamsoft.DWT.CreateDWTObject( 'dwtcontrolContainer', function(obj) { obj.Width = 585; obj.Height = 513; }, function(err) { console.log(err); } );
该方法还可以做一些Load不能做的事情。下面的代码创建了一个WebTwain实例,连接到运行在另一台机器上的Dynamsoft服务,IP为192.168.8.221,端口为18622和18623(SSL)。
Dynamsoft.DWT.UseLocalService = true; Dynamsoft.DWT.CreateDWTObject( 'dwtcontrolContainer', "192.168.8.221", "18622", "18623" function(obj) {}, function(err) { console.log(err); } );5.3 Dynamsoft.DWT.CreateDWTObjectEx
该方法手动创建一个没有默认内置视图的WebTwain实例。
// 实现代码 CreateDWTObjectEx( dwtInitialConfig: DWTInitialConfig, successCallBack: (DWObject: WebTwain) => void, failureCallBack: (errorString: string) => void ): void;
在接口配置DWTInitialConfig中
interface DWTInitialConfig { WebTwainId: string; Host?: string; Port?: string; SSLPort?: string; }
与CreateDWTObject相比,CreateDWTObjectEx需要一个WebTwainId而不是一个ContainerId。
接下来是一个没有config配置的实例
var DWObject = null; Dynamsoft.DWT.CreateDWTObjectEx({ WebTwainId: 'dwtcontrol' }, function(obj) { DWObject = obj; DWObject.Viewer.bind(document.getElementById('dwtcontrolContainer')); DWObject.Viewer.height = 600; DWObject.Viewer.width = 800; DWObject.Viewer.show(); }, function(err) { console.log(err); } );
与CreateDWTObject类似,CreateDWTObjectEx也可以连接到另一台机器上运行的Dynamsoft服务。
Dynamsoft.DWT.UseLocalService = true; Dynamsoft.DWT.CreateDWTObjectEx({ WebTwainId: 'dwtcontrolContainer1', Host: "192.168.8.221", Port: "18622", SSLPort: "18623" }, function(obj) {}, function(err) { console.log(err); } );6 Dynamsoft的命名空间
Dynamic Web TWAIN 在 Dynamsoft 名称空间下运行。
Dynamsoft是最高级别的命名空间。Dynamic Web TWAIN 和其他 Dynamsoft 库都是在 Dynamsoft 下定义的。对于 Dynamic Web TWAIN 来说,这个命名空间的主要成员是:
- DWT 包括全局方法、帮助WebTwain初始化和实例化的属性等,如前文所示。
- Lib 包括环境检测结果(Dynamsoft.Lib.env)和全局方法如showMask()、hideMask()等信息。
- Enumerations