上一篇我们简单介绍了扫描仪开发/集成的一些基本背景,说道如果要在网页程序中直接调用本机连接的USB扫描仪,目前是无法直接通过JavaScript 来调用的。
很久以前比较流行的做法是通过使用ActiveX或者OCX这类的浏览器控件技术,直接通过控件来访问本地的扫描仪驱动接口,实现在网页中调取扫描仪扫描文档并实现电子化存储。 类似ActiveX这类技术以前大家是又爱又恨,它一方面带来了便利,让浏览器的扩展功能十分强大;但是,另一方面,由于这些控件的权限可以比较大,技术漏洞又不少,这样存在不少的安全隐患。
文档扫描本身是一个数据敏感型的操作,对数据的安全性要求较高。所以,近几年ActiveX/OCX 这类控件慢慢被淘汰,微软其实也有意逐步完全淘汰ActiveX的使用。
上篇提到了一款商业软件解决方案,叫做Dynamic Web TWAIN SDK,原产加拿大,国内的主要代理和技术支持是由一家叫做大名软件的杭州公司在做。
这个产品最大的亮点是可以通过JS接口来在网页中调用扫描仪,示例代码丰富,而且还能支持所有主流的浏览器(IE,谷歌,火狐,360浏览器)和操作系统(Windows, 苹果macOS,Linux),所以作为商业解决方案来说,是很不错的。从该公司的产品看,客户包括美国最大的军火商洛克希德马丁,IT巨头IBM,扫描仪厂商惠普、日本富士、施乐等等都是他们的客户,挺牛的。
下面介绍下这个产品的基本特点:
1)基本架构
是个B/S (browser/server)架构的产品,而且这个B/S结构都存在于客户端。 B端指的是能解析执行JavaScript的浏览器;S端是假设在客户端本地的一个本地服务,比如在Windows用户电脑上,就是一个 Windows service 在本地。
这样, PC端的浏览器是直接跟本机上的service通信的,service再跟USB扫描仪的驱动接口通信。画一个很挫的流程图就是:
浏览器 <=======> 本地service <========> USB扫描仪接口
这样,本地service其实就是假设在 浏览器和扫描仪之间的桥梁。其实,本地service这块还包含了一些厂商的库文件,为了支持丰富的扫描仪接口调用。
2)文档安全性
基于上图提到的基本结构,PC端的客户扫描文档之后,文档数据其实只直接存储在 本地service 对应的内存空间中的,也就是业内俗称的“数据不落地”。在一些数据敏感、安全性要求很高的银行保险等行业,扫描数据不落地是个重要的安全指标。即使数据必须要暂时存储在磁盘上,那也必须对数据做好加密,否则安全性堪忧。
基于对这款Dynamic Web TWAIN SDK的研究,发现默认情况下数据都是直接走内存的,也就是不落地;但是假如你一次性扫描文档的数量巨大(比如几百、上千张),由于内存的大小有限,它会自动对溢出的数据做本地缓存(cache)操作,但是缓存文件是加密的非图片格式,所以即使丢失也无法被读取内容,安全性有保障。
3)大批量扫描
上面刚好提到了Dynamic Web TWAIN 存储数据的方式,所以可以这样说,在使用本地缓存(cache)的情况下,理论上你可以一次性扫描无限数量的文档。 这对于一些重文档扫描行业(一天可能扫描仪几千上万次),绝对是一个非常重要的指标。本人试过的其他很多的扫描仪开发方案(包括一些ActiveX控件),基本上在稍大批量的扫描的时候,浏览器就因为内存占用太大而奔溃了
4)扫描仪兼容性
其实市面上的大多数扫描仪开发SDK都是基于TWAIN协议开发的。这是一个开源的协议,使用非常广发,目前市面上99%的扫描仪都是提供支持写个协议的驱动程序,俗称 TWAIN驱动程序。
所以,就扫描仪兼容性来说,基本无忧。
5)浏览器兼容性
支持所有主流的浏览器(IE,谷歌,火狐,360浏览器)和操作系统(Windows, 苹果macOS,Linux),上面已经提到过,就不赘述了。 有些政府部门可能不太care这种兼容性吧,因为政府嘛,一方面更新慢,另外软件限制很死,不少在21世纪了还在用IE 8 这种老浏览器,效率堪忧 :)
6)价格
看了授权方式,应该是按照你的web程序所要部署的服务器的数量来授权的。你部署一台服务器,就买一个服务器授权,以此类推。 授权一次性,终身使用,符合国内主流需要。 价格自己看价目表
https://www.damingsoft.com/products/dwt-pricing.aspx
接下篇:
https://blog.csdn.net/zhiquan2006/article/details/81158427