使用 Dynamsoft 在 ASP.NET 中存储和检索 SQL Server 中的扫描图像
在本文中,我们将演示如何在 ASP.NET Web 应用程序中使用文档扫描功能,将扫描文件保存为 PDF 到 SQL Server 数据库。我们还将介绍如何检索图像文件并在您的 ASP.NET 网页中显示它们。
引言
轻松存储和检索数字化文档是任何文档管理工作流程的重要功能。在本文中,我们将演示如何在 ASP.NET Web 应用程序中使用文档扫描功能,将扫描文件保存为 PDF 到 SQL Server 数据库。我们还将介绍如何检索图像文件并在您的 ASP.NET 网页中显示它们。
我们将使用 Dynamic Web TWAIN,这是一个用于 Web 应用程序的 TWAIN ActiveX/插件,以加快文档扫描、上传和显示功能的开发。
主要特点
首先,重要的是指出 Dynamic Web TWAIN 中简化开发过程的关键功能
- 与主流浏览器兼容,包括 Windows 和 Mac OS X 上的 IE、Firefox、Chrome、Safari 和 Opera
- 能够从扫描仪和其他 TWAIN 兼容设备扫描图像
- 支持 BMP、JPEG、PNG、单/多页 PDF 和单/多页 TIFF
- 支持 HTTPS 上传
- 支持 cookies 和会话
- 支持随各自图像上传额外的文本
Using the Code
文档扫描
由于 Dynamic Web TWAIN 是一个客户端 SDK,我们将使用 JavaScript 调用其方法/属性。使用 SDK,您可以自定义扫描设置,例如分辨率、像素类型、亮度、对比度、页面大小等。但是,在本文中,我们将重点关注从 SQL Server 存储和检索图像的方面。为此,我们将仅介绍一个简单的扫描过程。
function acquireImage() {
if (_divDWTSourceContainerID == "")
DWObject.SelectSource();
else
DWObject.SelectSourceByIndex(document.getElementById(_divDWTSourceContainerID).selectedIndex); //select a TWAIN scanner
DWObject.CloseSource(); //make sure the source is closed before using it
DWObject.OpenSource();
DWObject.IfShowUI = document.getElementById("ShowUI").checked; //show or hide the user interface of the TWAIN scanner
var i;
for (i = 0; i < 3; i++) {
if (document.getElementsByName("PixelType").item(i).checked == true)
DWObject.PixelType = i;
} // set the pixel type of the acquired images, B/W, gray or color
DWObject.Resolution = document.getElementById("Resolution").value; //set the resolution
DWObject.IfFeederEnabled = document.getElementById("ADF").checked; //scan images from auto feeder
DWObject.IfDuplexEnabled = document.getElementById("Duplex").checked; //enable duplex scanning
appendMessage("Pixel Type: " + DWObject.PixelType + "<br />Resolution: " + DWObject.Resolution + "<br />");
DWObject.IfDisableSourceAfterAcquire = true;
DWObject.AcquireImage(); //start document scanning
}
将扫描的图像另存为多页 PDF 到 SQL Server
扫描后,您可以将图像保存为多种文件格式:BMP、PNG、JPG、TIF 和 PDF。还支持多页 TIF 和 PDF。在此示例中,我们将图像另存为多页 PDF 文件。相应的代码如下
function btnUpload_onclick() {
if (!checkIfImagesInBuffer()) {
return;
}
var i, strHTTPServer, strActionPage, strImageType;
_txtFileName.className = "";
if (!strre.test(_txtFileName.value)) {
_txtFileName.className += " invalid";
_txtFileName.focus();
appendMessage("Please input file name.<br />Currently only English names are allowed.<br />");
return;
}
//DWObject.MaxInternetTransferThreads = 5;
strHTTPServer = _strServerName;
DWObject.HTTPPort = _strPort;
var CurrentPathName = unescape(location.pathname); // get current PathName in plain ASCII
var CurrentPath = CurrentPathName.substring(0, CurrentPathName.lastIndexOf("/") + 1);
strActionPage = CurrentPath + _strActionPage; // the aspx page for receiving image data on the server side
var redirectURLifOK = CurrentPath + "online_demo_list.aspx";
var uploadfilename = _txtFileName.value + "." + document.getElementsByName("ImageType").item(i).value;
DWObject.HTTPUploadAllThroughPostAsPDF(
strHTTPServer,
strActionPage,
uploadfilename
); //upload images as multi-page PDF file
_strTempStr = _strTempStr + "Upload: ";
if (checkErrorString()) {
if (strActionPage.indexOf("SaveToFile") != -1)
alert(DWObject.ErrorString)//if save to file.
else
window.location = redirectURLifOK;
}
}
操作页面 - SaveToDB.aspx
此操作页面用于接收从扫描页面发布的图像数据。
<%@ Page Language="C#"%> <% try { String strImageName; int iFileLength; HttpFileCollection files = HttpContext.Current.Request.Files; HttpPostedFile uploadfile = files["RemoteFile"]; strImageName = uploadfile.FileName; iFileLength = uploadfile.ContentLength; Byte[] inputBuffer = new Byte[iFileLength]; System.IO.Stream inputStream; inputStream = uploadfile.InputStream; inputStream.Read(inputBuffer, 0, iFileLength); String strConnString; strConnString = Common.DW_ConnString; System.Data.SqlClient.SqlConnection sqlConnection = new System.Data.SqlClient.SqlConnection(strConnString); String SqlCmdText = "INSERT INTO " + Common.DW_SaveTable + " (strImageName,imgImageData) VALUES (@ImageName,@Image)"; 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; sqlConnection.Open(); sqlCmdObj.ExecuteNonQuery(); sqlConnection.Close(); } catch { } %>
从数据库中检索 PDF 文件以在网页上显示
用于显示 PDF 文件的Online_demo_view.aspx
setTimeout(function () {
var CurrentPathName = unescape(location.pathname); // get current PathName in plain ASCII
var CurrentPath = CurrentPathName.substring(0, CurrentPathName.lastIndexOf("/") + 1);
var strActionPage = CurrentPath + "online_demo_download.aspx"; //the ActionPage's file path
strHTTPServer = location.hostname;
DWObject.HTTPPort = location.port==""?80:location.port;
var downloadsource = strActionPage +
"?iImageIndex=<%=strImageID%>&ImageName=<%=strImageName%>&ImageExtName=<%=strImageExtName%>";
DWObject.HTTPDownloadEx(strHTTPServer, downloadsource,<%=strImageFileType %>);
}, 500);
online_demo_download.aspx 用于从数据库检索图像
<%@ Page Language="C#"%> <% String strExc = ""; try { //Get the image data from the database HttpRequest request = HttpContext.Current.Request; String strImageName; String strImageExtName; String strImageID; strImageName = request["ImageName"]; strImageExtName = request["ImageExtName"]; strImageID = request["iImageIndex"]; String strConnString; strConnString = Common.DW_ConnString; System.Data.SqlClient.SqlConnection sqlConnection = new System.Data.SqlClient.SqlConnection(strConnString); System.Data.SqlClient.SqlCommand sqlCmdObj = new System.Data.SqlClient.SqlCommand("SELECT imgImageData FROM " + Common.DW_SaveTable + " WHERE iImageID= " + strImageID, sqlConnection); sqlConnection.Open(); System.Data.SqlClient.SqlDataReader sdrRecordset = sqlCmdObj.ExecuteReader(); sdrRecordset.Read(); long iByteLength; iByteLength = sdrRecordset.GetBytes(0, 0, null, 0, int.MaxValue); byte[] byFileData = new byte[iByteLength]; sdrRecordset.GetBytes(0, 0, byFileData, 0, Convert.ToInt32(iByteLength)); sdrRecordset.Close(); sqlConnection.Close(); sdrRecordset = null; sqlConnection = null; Response.Clear(); Response.Buffer = true; if (strImageExtName == "bmp") { Response.ContentType = "image/bmp"; } else if (strImageExtName == "jpg") { Response.ContentType = "image/jpg"; } else if (strImageExtName == "tif") { Response.ContentType = "image/tiff"; } else if (strImageExtName == "png") { Response.ContentType = "image/png"; } else if (strImageExtName == "pdf") { Response.ContentType = "application/pdf"; } try { String fileNameEncode; fileNameEncode = HttpUtility.UrlEncode(strImageName, System.Text.Encoding.UTF8); fileNameEncode = fileNameEncode.Replace("+", "%20"); String appendedheader = "attachment;filename=" + fileNameEncode; Response.AppendHeader("Content-Disposition", appendedheader); Response.OutputStream.Write(byFileData, 0, byFileData.Length); } catch (Exception exc) { strExc = exc.ToString(); DateTime d1 = DateTime.Now; string logfilename = d1.Year.ToString() + d1.Month.ToString() + d1.Day.ToString() + d1.Hour.ToString() + d1.Minute.ToString() + d1.Second.ToString() + "log.txt"; String strField1Path = HttpContext.Current.Request.MapPath(".") + "/" + logfilename; if (strField1Path != null) { System.IO.StreamWriter sw1 = System.IO.File.CreateText(strField1Path); sw1.Write(strExc); sw1.Close(); } Response.Flush(); Response.Close(); } } catch (Exception ex) { strExc = ex.ToString(); DateTime d1 = DateTime.Now; string logfilename = d1.Year.ToString() + d1.Month.ToString() + d1.Day.ToString() + d1.Hour.ToString() + d1.Minute.ToString() + d1.Second.ToString() + "log.txt"; String strField1Path = HttpContext.Current.Request.MapPath(".") + "/" + logfilename; if (strField1Path != null) { System.IO.StreamWriter sw1 = System.IO.File.CreateText(strField1Path); sw1.Write(strExc); sw1.Close(); } Response.Write(strExc); } %>
部署并运行应用程序
完整的源代码可以从文章中下载。
您可以使用 'Create Table.sql' 设置数据库以存储演示应用程序的扫描图像。请在运行之前更新 App_Code\Common.cs 中 SQL Server 连接信息的 DW_ConnString
值。
要根据您的要求自定义源代码,您可以从 Dynamsoft 的网站下载 Dynamic Web TWAIN。
Dynamic Web TWAIN 30天免费试用下载
要从不同的客户端机器测试文档成像功能,您可以简单地将示例代码复制到您的 Web 服务器(IIS、Apache 或 Tomcat)。用户只需在第一次访问该网页时下载并安装浏览器中的 ActiveX/插件即可。
在线演示也供您参考。
Dynamic Web TWAIN 在线演示
支持
您的组织目前是否正在进行文档管理项目?您是否部署了 Dynamsoft 的 SDK?如果是,它如何提供帮助?请在评论区或通过联系我们告知我们。如果您需要任何帮助来启动并运行此示例代码,也可以联系我们。为此,请通过电子邮件 support@dynamsoft.com 与我们联系。有关定价或许可问题,请致电 1-877-605-5491 或发送电子邮件至我们的销售团队 sales@dynamsoft.com。