在很久很久以前,IE浏览器支持activex技术,chrome和firefox等支持npapi技术,通过这些技术都可以开发原生c/c++程序访问客户端硬件外设,如驱动扫描仪进行图像扫描,但是随着windows操作系统新版不再支持IE浏览器,chrome等也都在49版本中移除了对npapi技术的支持,曾经风光一时的flash等典型应用也都推出了历史舞台,基于原生程序代码嵌入浏览器内部进行客户端操作的方式不再具有可行性。

要实现在现代浏览器,如chrome 49以后的版本,EDGE、firefox等浏览器内去操作客户端电脑的扫描仪,需要通过websocket通讯方式与本地websocket服务器端程序进行通讯,然后在websocket服务器端程序内完成扫描仪驱动及扫描和图像处理应用。

本次介绍的scanonweb h5程序就是专门解决这类应用的程序,之前scanonweb有activex版本,用于嵌入在IE浏览器或者360浏览器等以IE为内核的浏览器内部工作,随着现代前端技术的发展,如新版的vue等前端开发框架早就移除了对IE的支持,现在的网页图像扫描技术方案不得不摒弃activex的技术方案了,否则没办法使用最新的前端开发技术。scanonweb h5版本提供了一个托盘服务程序,支持开机自启动,启动后内置websocket server启动,网页通过websocket连接后可读取连接到电脑的扫描仪硬件都有哪些,叫什么名称,支持什么特性,如双面扫描模式,支持ADF自动进纸器等,可以直接在网页里面通过js代码驱动扫描仪工作,先设置好图像扫描参数,如是使用黑白模式,还是灰度模式,或者彩色模式,扫描图像的分辨率是多少,如300X300,设备扫描后图像结果自动回传网页前端,可直接在网页里面预览查看,也可以直接通过ajax发送到服务器端进行永久保存。

以下一步步说明整个集成使用过程:

1.扫描托盘服务程序下载安装

https://www.brainysoft.cn/download/ScanOnWebH5Install.exe

下载后直接安装就行了,没有什么特殊注意事项,如果有安全软件阻止开机自启动建议允许开机自启动,后续可以随时卸载。

2. 网页开发集成使用

网页里面需要引入一个scanonweb.js文件,可以通过下载示例程序获得,地址: https://www.brainysoft.cn/download/clientjs.zip

下载后复制scanonweb.js文件到项目内,可以参考test1.html文件里面的示例:

<script src="./scanonweb.js" type="text/javascript"></script>

接下来实例化Scanonweb对象,让其自动连接websocket托盘服务程序:

<script type="text/javascript">

var scanonweb = new ScanOnWeb();

实例对象成功连接websocket后会自动发指令询问当前客户端电脑连接了哪些扫描仪硬件,需要提供一个回调函数接收托盘服务程序返回的设备列表信息:

	<script type="text/javascript">
		var scanonweb = new ScanOnWeb();
		//响应返回扫描设备列表的回调函数
		scanonweb.onGetDevicesListEvent = function (msg) {
			var deviceListDom = document.getElementById('devices');
			//clear devices list
			deviceListDom.innerHTML = "";
			for (var i = 0; i < deviceListDom.childNodes.length; i++) {
				ardeviceListDomea.removeChild(deviceListDom.options[0]);
				deviceListDom.remove(0);
				deviceListDom.options[0] = null;
			//add devices info
			for (var i = 0; i < msg.devices.length; ++i) {
				var opt = document.createElement("option");
				opt.innerHTML = msg.devices[i];
				if (i == msg.currentIndex) {
					opt.selected = true;
				deviceListDom.appendChild(opt);

   这样就在界面中列出了连接到客户端机器的扫描仪设备信息。

   当需要让设备扫描时,先确定要按照哪种色彩模式去扫描,还有设置分辨率等,之后通过startScan()就可以驱动扫描仪进行图像扫描了:

		//开始扫描命令
		function startScan() {
			if (document.getElementById("devices").selectedIndex == -1) {
				alert('请先刷新或者选中要使用的扫描设备后再开始扫描!');
				return;
			//以下获取界面中的扫描参数设定
			scanonweb.scaner_work_config.dpi_x = document.getElementById("dpi_x").value;
			scanonweb.scaner_work_config.dpi_y = document.getElementById("dpi_y").value;
			scanonweb.scaner_work_config.deviceIndex = document.getElementById("devices").selectedIndex;
			scanonweb.scaner_work_config.showDialog = document.getElementById("showDialog").value;
			scanonweb.scaner_work_config.autoFeedEnable = document.getElementById("feedEnable").value;
			scanonweb.scaner_work_config.autoFeed = document.getElementById("autoFeed").value;
			scanonweb.scaner_work_config.dupxMode = document.getElementById("dupxMode").value;
			scanonweb.scaner_work_config.autoDeskew = document.getElementById("autoDeskew").value;
			scanonweb.scaner_work_config.autoBorderDetection = document.getElementById("autoBorderDetection").value;
			//开始发送扫描指令
			scanonweb.startScan();

  设备扫描图像后还是通过回调函数发送图像给前端网页,告诉前端js,本次扫描扫描之前托盘服务程序内存里面有多少页图像,扫描完成以后有多少页图像,如果使用了自动进纸器,可能一次性会扫描十几或几十页图像:

		//响应获取某一页图像的回调函数
		scanonweb.onGetImageByIdEvent = function (msg) {
			var imageListDom = document.getElementById('imageList');
			var imageDom = document.createElement("img");
			imageDom.width = 300;
			imageDom.height = 300;
			imageDom.src = "data:image/jpg;base64," + msg.imageBase64;
			imageListDom.appendChild(imageDom);
		//响应扫描完成事件
		scanonweb.onScanFinishedEvent = function (msg) {
			console.log("扫描前:" + msg.imageBeforeCount + " 扫描后:" + msg.imageAfterCount);
			//以下代码用于将新增的扫描图像从扫描服务程序中取回
			for (var i = msg.imageBeforeCount; i < msg.imageAfterCount; i++) {
				scanonweb.getImageById(i);

 上面的代码在onScanFinishedEvent回调里面知道了新扫描了多少页图像,然后通过getImageById取回新增图像的base64编码数据,通过onGetImageByIdEvent 回调接收结果,这样整个扫描及取回结果的过程就全部完成了,图像是要上传还是显示都是客户端业务逻辑问题了。

最近项目有个需求:将文件通过购买的富士通扫描仪扫描到本地,扫描完成后自动上传到服务器,并关联相关单据。 其间遇到相关问题如下: 1.购买的富士通扫描仪提供的开发文档要求必须使用IE中的
扫描仪的使用在银行、保险和政府行业中非常普遍。有些公司甚至一天要扫描数以万计的文档,电子化后并归档保存。 过去常见的做法是,使用扫描仪自带的桌面软件来完成所有的扫描工作,然后再打开自己的工作平台(应用),把保存在桌面上的文档上载到数据库中存储。 这样的做法无疑是低效的,所以有越来越多的企业要求要将扫描仪调用的功能直接集成在他们的业务系统中,提供终端用户的使用效率,进而提高产出率。 熟悉扫描仪...
给大家推荐一款非常不错的免费的图像查看器/浏览器/转换器。IrfanView 中文版是一个运行速度快、小巧(单一exe文件500K)、功能强大的免费(限非商业用途)图像查看程序。支持Windows 9x/ME/NT/2000/XP/2003/win7/win8/win10。 IrfanView 中文版 仅仅不到2M的小软件,功能却能与体积大到几十M的 ACDSee 中文版 相媲美!这个软件就是 IrfanView 4.38 中文版。图片、音频、视频浏览,图片批量格式转换、批量重命名,JPE图片无损旋转等只是IrfanView最基本的功能。IrfanView是世界第一个支持多页Gif动画的Windows图像查看器,另外强大的插件外挂功能、自定义皮肤功能以及多种热键支持让你可以定制一个完全属于自己的IrfanView!功能过多,不再一一介绍,喜欢小巧而又免费的强大图片浏览器那就马上体验一下IrfanView吧! IrfanView 堪与 ACDSee媲美,支持的图像、音频、视频格式众多,并可幻灯显示、批量转换格式、批量重命名、JPG 无损旋转,支持拖放操作;亦具有调整图像大小、调整颜色深度、添加覆盖文字、特效(内置)处理等图像编辑功能,自3.85 版已能支持使用 Adobe Photoshop 的滤镜(8BF 格式);还可以制作 HTML 格式的缩略图目录、创建自播放幻灯显示(EXE 或 SCR),是图像爱好者必备的袖珍精品。 在 IrfanView 中有很多的热键 (免费是单键),有了这些快捷键,感觉比用 AcdSee 还方便,免费是各种旋转,及可以自定义的逐级缩放。除了编辑功能不及 ACDSee 外(还有体积和价格),其他各方面都很优秀。 支持多种格式 Many supported file formats 支持多种语言,有简体中文 Multi language support 可缩略图、预览 Thumbnail/preview option 强大的幻灯显示(可导出为exe/scr,或刻录到光盘) Slideshow (save slideshow as EXE/SCR or burn it to CD) 在幻灯或全屏下显示EXIF/IPTC/注释信息 Show EXIF/IPTC/Comment text in Slideshow/Fullscreen etc. 支持Adobe Photoshop滤镜 Support for Adobe Photoshop Filters 快速的文件夹视图(在文件夹间移动) Fast directory view (moving through directory) 强大的批量处理(更改图像、文件名) Batch conversion (with image processing) 多页TIF图像编辑 Multipage TIF editing 电子邮件选项 Email option 多媒体和文本文件播放 Multimedia player 打印设置 Print option 修改颜色深度 Change color depth 扫描(批量扫描)支持 Scan (batch scan) support 剪切/裁剪 Cut/crop 编辑IPTC IPTC editing 多种效果:锐化、模糊、Adobe 8BF、Filter Factory, Filters Unlimited等 Effects (Sharpen, Blur, Adobe 8BF, Filter Factory, Filters Unlimited, etc.) 屏捕截图功能 Capturing 从EXE/DLL/ICL文件提取图标 Extract icons from EXE/DLL/ICLs 无损JPG旋转 Lossless JPG rotation 大量热键 Many hotkeys 大量命令行选项 Many command line options 大量插件 Many PlugIns 只需一个exe文件,无须Dll文件,无“我同意”或“试用期已过”的共享软件提醒 Only one EXE-File, no DLLs, no Shareware messages like “I Agree” or “Evaluation expired” 未经用户同意,不改变注册表设置 No registry changes without user action/permission! 可以制作缩略图,可以把多个图片快速生成html网页 其他…… and many more 关于如何解决IrfanView官方中文乱码的问题,当我们使用官方的中文包使其中文时,在默认下,可能会出现乱码的问题,解决的办法是,在选择更改语言的界面时,在
https://www.damingsoft.com/products/dwt-register.aspx 大家大多数应该都是在Windows上开发吧,那就下载那个Windows版本的开发包就行。 略。 ...
上一篇我们简单介绍了扫描仪开发/集成的一些基本背景,说道如果要在网页程序中直接调用本机连接的USB扫描仪,目前是无法直接通过JavaScript 来调用的。 很久以前比较流行的做法是通过使用ActiveX或者OCX这类的浏览器控件技术,直接通过控件来访问本地的扫描仪驱动接口,实现在网页中调取扫描仪扫描文档并实现电子化存储。 类似ActiveX这类技术以前大家是又爱又恨,它一方面带来了便利,让浏览...
Vue是一种流行的前端框架,它可以用于构建用户界面。尽管Vue本身并无直接的“标注dcm文件”的功能,但可以通过结合其他工具和库来实现这一目标。 首先,我假设“dcm文件”是指数字成像与通信医疗图像DICOM(Digital Imaging and Communications in Medicine)文件。DICOM是医学图像的国际标准格式,通常用于医学影像设备生成的图像(例如X射线、CT扫描和磁共振图像)。 在Vue中,我们可以使用第三方库如dwv(DICOM Web Viewer)来展示和标注DICOM图像。dwv是一个用于浏览DICOM图像的开源JavaScript库,它提供了处理和显示DICOM图像方法。 要在Vue中使用dwv,可以按照以下步骤操作: 1. 通过npm或其他安装方式,将dwv添加到Vue项目依赖中。 2. 在Vue组件中,导入dwv库并设置相关配置,如DICOM图像的路径和其他选项。 3. 在模板中,使用dwv提供的组件来显示DICOM图像并添加标注工具。 4. 如果需要,可以根据需要自定义标注工具,如测量工具、注释工具等。 通过以上步骤,我们可以在Vue中使用dwv来展示和标注DICOM图像。当然,具体的实现细节还取决于项目要求和个人的技术能力,但使用dwv是一个较为常见的解决方案。 需要注意的是,dwv只是一个展示和标注DICOM图像的工具,并不包含DICOM图像的解析和处理功能。如果需要对DICOM文件进行更复杂的处理,可能需要使用其他专门处理DICOM图像的库或工具。 总之,虽然Vue本身没有直接支持对DICOM文件进行标注的功能,但可以通过结合第三方库,如dwv,来实现在Vue中展示和标注DICOM图像的需求。 ### 回答2: Vue是一种流行的JavaScript框架,可以通过使用其中的组件化开发方式来对DCM文件进行标注。DCM文件是医学图像格式,常用于医学影像学领域。 首先,我们可以使用Vue的组件化特性来分离和管理标注工具的不同功能模块。例如,我们可以创建一个图像显示组件,在该组件中使用DCM文件解析库将DCM文件加载并显示出来。 然后,我们可以创建一个标注工具条组件,该组件包含各种标注工具按钮,如矩形框、圆形框、线条等。每个标注工具按钮都可以绑定相应的事件处理函数,当用户点击某个标注工具按钮时,可以触发对应的事件处理函数,从而实现对DCM文件进行相应标注的功能。 在标注工具条组件中,我们还可以添加一些其他常用的功能按钮,如撤销、保存等。这些按钮也可以通过Vue的事件机制来实现相应的功能。 另外,我们可以利用Vue的数据绑定特性,在标注工具组件中使用数据绑定将标注结果实时反映在主页面上。例如,我们可以使用v-model指令绑定一个标注结果数组,使得当用户进行标注操作时,结果数组会自动更新。 总结起来,利用Vue的组件化开发方式和数据绑定特性,我们可以很方便地实现对DCM文件的标注功能。通过创建图像显示组件、标注工具条组件,并利用事件处理和数据绑定来实现不同标注工具的功能和实时数据显示,可以有效提高标注效率,并方便后续的数据处理和分析。 ### 回答3: Vue是一种流行的JavaScript框架,常用于构建用户界面。虽然Vue本身并不提供对DCM(医学数字成像和通信)文件的直接标注功能,但可以利用Vue的优势和其他库来实现这一功能。 要对DCM文件进行标注,我们可以使用外部的JavaScript库,例如Cornerstone.js。Cornerstone.js是专门用于在浏览器中显示和操作医学影像的库。它支持DICOM文件格式,并提供了各种标注和量度的功能。 在Vue中,我们可以使用npm包管理器安装Cornerstone.js,并在Vue组件中加载和使用它。首先,我们需要在Vue项目中导入Cornerstone.js库的必要文件,包括Cornerstone核心库、Cornerstone工具库和DICOM文件解析器。 在Vue组件的生命周期钩子函数中,我们可以创建一个canvas元素,并使用Cornerstone.js将DICOM文件加载到canvas中显示。接着,我们可以使用Cornerstone.js提供的标注工具,例如线、矩形等来标记DICOM图像。 例如,我们可以在Vue组件中创建一个按钮,当用户点击按钮时,调用一个方法来添加一个线标注到DICOM图像上。在这个方法中,我们可以利用Cornerstone.js的API来添加线标注,并更新画布以显示标注结果。 总之,尽管Vue本身并不直接支持DCM文件的标注,但它可以与外部的JavaScript库(如Cornerstone.js)集成来实现这一功能。使用Vue和Cornerstone.js的组合,我们可以方便地在Vue应用中对DCM文件进行标注。