65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Dynamic .NET TWAIN 在 C# 中扫描图像并保存到数据库

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2013年9月12日

CPOL

3分钟阅读

viewsIcon

55833

downloadIcon

3542

使用 Dynamic .NET TWAIN 在 C# 中扫描图像并保存到数据库

引言

在当今的“大数据时代”,越来越多的组织正在使用企业内容管理 (ECM) 或记录管理系统 (RMS) 来帮助维护和管理文档。将文档数字化并将其存储在中央数据库中已成为许多组织文档管理工作流程的重要组成部分。为此,我们将演示如何创建一个应用程序来从扫描仪和网络摄像头捕获文档作为图像。我们还将介绍如何在 C# 中将它们保存到 SQL Server 中。

我们将使用 Dynamic .NET TWAIN 来加速此类应用程序的开发和部署。 Dynamic .NET TWAIN 是一个基于 .NET Framework 2.0/4.0 的文档扫描 SDK。该 SDK 使能够用户从 TWAIN 扫描仪和 UVC/WIA 网络摄像头捕获图像。它还允许简单的编辑或处理。最后,它使能够将图像从 WinForm 应用程序保存到本地/服务器磁盘、FTP 站点或数据库。

Using the Code

如果您有兴趣使用 .NET 图像 SDK 在应用程序中快速实现图像捕获,您可以下载 Dynamic .NET TWAIN 的 30 天免费试用版。安装后,在安装目录中,您将在 \Bin\v2.0 和 \Bin\v4.0 下找到 “DynamicDotNetTWAIN.dll”。您可以选择相应的版本以适合您的特定 .NET Framework 版本。

  

捕获图像

使用 Dynamic .NET TWAIN,您只需几行代码即可从 TWAIN 设备和 USB/WIA 网络摄像头启用图像捕获。 这是一个代码示例

Public frmCustomizeScan()
        {
            InitializeComponent();

            dynamicDotNetTwain.SupportedDeviceType = Dynamsoft.DotNet.TWAIN.Enums.EnumSupportedDeviceType.SDT_ALL; // enable capturing images from both scanners and webcams
            int lngNum;
            dynamicDotNetTwain.OpenSourceManager();
            for (lngNum = 0; lngNum < dynamicDotNetTwain.SourceCount; lngNum++)
            {     
               cmbSource.Items.Add(dynamicDotNetTwain.SourceNameItems(Convert.ToInt16(lngNum))); // display the available imaging devices
            }
            if (lngNum > 0)
                cmbSource.SelectedIndex = 0;          

        }

        private void cmdScan_Click(object sender, EventArgs e)
        {
            dynamicDotNetTwain.IfAppendImage = true;
		    AcquireImage(); // acquire images
        }


        private void AcquireImage()
        {
            dynamicDotNetTwain.SelectSourceByIndex(Convert.ToInt16(cmbSource.SelectedIndex));
            dynamicDotNetTwain.IfShowUI = chkIfShowUI.Checked;
            dynamicDotNetTwain.OpenSource();
            dynamicDotNetTwain.IfDisableSourceAfterAcquire = true;
            
            try { dynamicDotNetTwain.AcquireImage(); }
            catch (Exception exp)
            {
                MessageBox.Show(exp.Message);
            }

        }

上传

Dynamic .NET TWAIN 提供了 HTTP 上传方法,您可以使用这些方法将扫描或捕获的图像上传到 Web 服务器或数据库。 这可以用文件格式完成,包括 PDF、TIF、JPG、PNG 和 BMP。 还支持多页 TIF 和 PDF。

上传图像时,您可以添加额外的参数并将它们与数据库中的图像记录一起存储。 这是一个示例代码

        private void BtnUpload_Click(object sender, EventArgs e)
        {
            string strActionPage = "Upload.aspx"; // for receiving the uploaded image data on the server side
            string strFileName = textBox1.Text;
            string strFileType = textBox2.Text;
            string strHTTPServer = "localhost"; // the name or the IP of your HTTP Server
            dynamicDotNetTwain.HTTPPort = 8066; //the port number of the HTTP Server
            dynamicDotNetTwain.HTTPUserName = "chloe"; //user name for logging into HTTP Server
            dynamicDotNetTwain.HTTPPassword = "c";
            dynamicDotNetTwain.SetHTTPFormField("FileType", strFileType); // pass extra text parameters when uploading image
            dynamicDotNetTwain.HTTPUploadAllThroughPostAsPDF(strHTTPServer,strActionPage, strFileName+".pdf"); // save the captured images as a multi-page PDF file
            if (dynamicDotNetTwain.ErrorCode !=ErrorCode.Succeed)
            {
                MessageBox.Show(dynamicDotNetTwain.HTTPPostResponseString);
            }
            else
            {
                MessageBox.Show("PDF saved successfully.");
            }
        }

Upload.aspx

操作页面 - Upload.aspx - 在HTTPUploadAllThroughPostAsPDF 方法中引用的是用于在服务器端接收图像数据。 所以请确保在您的 Web 服务器中部署该文件。 这是具体方法

<%@ Page Language="c#" AutoEventWireup="false" Debug="True"%>
 
<%

 	try
	{
		int iFileLength;
		HttpFileCollection files = HttpContext.Current.Request.Files;
		HttpPostedFile uploadfile = files["RemoteFile"];
		String strImageName = uploadfile.FileName; 
		String strFileType = System.Web.HttpContext.Current.Request.Form["FileType"];
	    
		iFileLength = uploadfile.ContentLength;
		Byte[] inputBuffer = new Byte[iFileLength];
		System.IO.Stream inputStream;
		inputStream = uploadfile.InputStream;
		inputStream.Read(inputBuffer,0,iFileLength);	    
	    	
	   
	    String strConnString = "Data Source=192.168.8.211;Initial Catalog=WebTwain;User ID=sa;Pwd=sa";

    
		System.Data.SqlClient.SqlConnection sqlConnection = new System.Data.SqlClient.SqlConnection(strConnString);

		String SqlCmdText = "INSERT INTO tblImage (strImageName,imgImageData, strFileType) VALUES (@ImageName,@Image, @ImageType)";
		System.Data.SqlClient.SqlCommand sqlCmdObj = new System.Data.SqlClient.SqlCommand(SqlCmdText, sqlConnection);

		sqlCmdObj.Parameters.Add("@Image",System.Data.SqlDbType.Binary,iFileLength).Value = inputBuffer;
		sqlCmdObj.Parameters.Add("@ImageName",System.Data.SqlDbType.VarChar,255).Value = strImageName;
        sqlCmdObj.Parameters.Add("@ImageType", System.Data.SqlDbType.VarChar, 255).Value = strFileType;

		sqlConnection.Open();
		sqlCmdObj.ExecuteNonQuery();
		sqlConnection.Close();
	}
	catch(Exception e)
	{
       		Response.Write(e.Message);    
       		throw;         
        
	}
    
%>

部署并运行应用程序

为方便起见,可以从本文下载完整的源代码。

如果在运行示例代码时遇到许可错误,您可以从 Dynamsoft 的网站下载 Dynamic .NET TWAIN 以免费获得有效的试用许可证: Dynamic .NET TWAIN 30 天免费试用下载

确保在 Web 服务器(IIS、Apache 等)中部署 Web 应用程序,其中包括Upload.aspx,并在运行前相应地更新 BtnUpload_Click() 中的 strHTTPServerHTTPPortHTTPUserNameHTTPPassword 的值。 您可以找到 CreateTable.sql 以获取创建用于存储 PDF 文件的表的脚本。

支持

您的组织目前是否正在进行文档数字化项目?您是否已部署 SDK?如果是这样,它有何帮助?请在评论部分或通过联系我们告知我们。如果您需要任何帮助来启动并运行此示例代码,也可以联系我们。为此,请通过电子邮件 support@dynamsoft.com 与我们联系。对于定价或许可问题,请致电 1-877-605-5491 或发送电子邮件至我们的销售团队 sales@dynamsoft.com。

© . All rights reserved.