.net 图像扫描编程处理

2024-10-25 18:36:14

1、在应用程序开发中,我们经常需要在OA等业务系统中对文稿,彩页等纸张数据进行扫描处理,下面介绍如何通过ScanOnWeb组件完成图像的自动扫描、编辑、上传等过程。

2、要在B/S架构的系统中操作客户端扫描仪设备,需要在我们的html页面中引入ScanOnWeb组件才可以,从组件官方网站下载得到ScanOnWeb最新版本之后,解压缩,找到cabs目录里面的scanonweb.cab文件,复制该cab文件到我们的.NET项目中,例如本文将该组件复制到项目的cabs目录中:

.net 图像扫描编程处理

3、接下来就是在我们的html页面中通过<object></object>标签去引用图像扫描组件scanonweb,在页面中的引用代码最精简代码内容如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>测试页面</title></head><body> <object classid="clsid:15D142CD-E529-4B01-9D62-22C9A6C00E9B" id="scaner1" width="100%" height="600" codebase="./cabs/ScanOnWeb.cab#version=1,0,0,10"> </object></body></html>

4、无法加载问题 上面的代码中引用路径是通过<object>标签的codebase属性确定的,如果项目中的cab文件存放路径不是在当前html页面所在路径的cabs子目录里面的话,需要调整<object>标签的codebase属性指向正确的可以让客户端浏览器下载找到scanonweb.cab文件的路径。 如果上面的codebase指向的路径确实能下载到cab文件,但是浏览器中还是不能正常显示控件的话,需要调整浏览器安全性设定,启用未签名activex下载,出于安全性的考虑,建议将我们的站点加入受信站点后,调整受信站点的设定去启动未签名activex下载。

5、正常加载后的页面应该如下图所示:

.net 图像扫描编程处理

6、通过JavaScript控制扫描仪扫描图像 可以通过调用控件的scan()方法去开始图像扫描,如果扫描仪支持自动进纸功能,scan()可以自动使用自动进纸器一次扫描多张图像。示例代码: function startScan(){ document.getElementById('scaner1').scan(); }

7、通过JavaScript保存图像扫描结果到客户端本地硬盘中扫描结果当前预览窗口中的图像需要存盘时,可以调用控件的saveToFile(path)方法,例如将当前主编辑窗口中的扫描结果单页图像扫描到d:\test.jpg时可以编写以下js代码:document.getElementById('scaner1').saveToFile('d://test.jpg');如果需要保存多页扫描结果的话,可以调用saveAllToFile(path)方法,例如将多页扫描结果保存为d:\test.pdf时可以编写以下JavaScript代码:document.getElementById('scaner1').saveAllToFile('d://test.pdf');

8、需要在控件内部直接上传到服务器端时,可以跳过前面介绍的客户端本地保存过程,不向客户端硬盘存盘图像数据,直接通过JavaScript脚本读取图像数据的base64编码格式数据,然后提交http请求,服务器端接收客户端提交的base64编码的图像数据后解码存盘。客户端示例代码:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><script type="text/javascript">function submitPicToServer(){ var base64_data = document.getElementById('scaner1').allImageAsTiffData(); document.getElementById('picData').value=base64_data; document.getElementById('picExt').value='.tiff'; document.forms[0].submit();}</script></head><body><form action="./submit.aspx" name="form1" id="form1" method="post"> <input type="hidden" id="picData" name="picData"/> <input type="hidden" id="picExt" name="picExt"/> <p> <input type="button" value="扫描" id="btnScan" onclick="javascript:document.getElementById('scaner1').scan();"/> <input type="button" value="上传全部结果" id="btnUpload" onclick="javascript:submitPicToServer();"/> </p> <object classid="clsid:15D142CD-E529-4B01-9D62-22C9A6C00E9B" id="scaner1" width="100%" height="600" codebase="./cabs/ScanOnWeb.cab#version=1,0,0,10"> </object></form></body></html>服务器端用于接收客户端图像数据并做base64解码处理的代码:using System;using System.Collections.Generic;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;public partial class _submit : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { if (Request["picData"] != null) { string base64data = Request["picData"]; string ext = Request["picExt"]; byte[] picBytes = Convert.FromBase64String(base64data); System.IO.FileStream outputStream = new System.IO.FileStream(Server.MapPath("~/") + "pic"+ext, System.IO.FileMode.Create); outputStream.Write(picBytes, 0, picBytes.Length); outputStream.Close(); Response.Write("<a href='pic" + ext + "'>click here</a>"); Response.End(); } }}

猜你喜欢