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

使用 Dynamsoft 在 ASP.NET 中存储和检索 SQL Server 中的扫描图像

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2013年11月11日

CPOL

3分钟阅读

viewsIcon

28504

downloadIcon

480

在本文中,我们将演示如何在 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

© . All rights reserved.