Сканирование документов и считывание штрих-кода являются важнейшими частями практически любого документооборота. Получать документы со сканеров, использовать штрих-коды для разделения пакетов документов или группировать документы, а затем сохранять файлы на диск, в базу данных или библиотеку документов — типичные шаги, предпринимаемые людьми для систематизации бумажных документов.

В этой статье я приведу примеры, показывающие, как разработать приложение ASP.NET со сканированием TWAIN и чтением штрих-кода с помощью Dynamic Web TWAIN и Dynamsoft Barcode Reader SDK.

Предпосылки

Сканирование документов и распознавание штрих-кодов в ASP.NET

Вы можете считывать штрих-коды на стороне клиента или на стороне сервера с помощью пакетов SDK для обработки изображений Dynamsoft. Ниже мы покажем код для чтения штрих-кодов на стороне сервера. Если вы хотите считывать штрих-коды на стороне клиента, ознакомьтесь с разделом Как создать онлайн-приложение для сканирования штрих-кодов на JavaScript.

В Visual Studio создайте новое веб-приложение.

Добавьте в проект папку Resources в каталоге установки Dynamic Web TWAIN, которая включает файлы развертывания TWAIN SDK.

Добавьте страницу веб-формы (Default.aspx) для сканирования документов. Встроить элемент управления/плагин Dynamic Web TWAIN на страницу для отображения отсканированных изображений. Проверьте Как интегрировать Dynamic Web TWAIN в веб-страницу

Добавьте на страницу две кнопки и заполнитель dwtcontrolContainer для объекта Dynamic Web TWAIN.

<select size="1" id="source" style="position: relative; width: 220px;"></select>
    <input type="button" value="Scan" onclick="AcquireImage();" />
    <input type="button" value="Load" onclick="LoadImage();" />

    <div id="dwtcontrolContainer"></div>
    <input type="button" value="Read Barcode" onclick="UploadImage();" />

Напишите код JS, чтобы использовать Dynamic Web TWAIN для сканирования документов со сканеров.

function AcquireImage() {
    if (DWObject) {
        DWObject.SelectSourceByIndex(document.getElementById("source").selectedIndex);
        DWObject.OpenSource();
        DWObject.IfDisableSourceAfterAcquire = true; // Scanner source will be disabled/closed automatically after the scan.
        DWObject.AcquireImage();
    }
}

Используйте метод HTTP Post Dynamic Web TWAIN для загрузки отсканированных изображений в буфер на сервер для распознавания штрих-кода.

// OnHttpUploadSuccess is the callback function for successful uploads while OnHttpUploadFailure is for failed ones.
    function OnHttpUploadSuccess() {
        console.log('successful');
    }

    function OnHttpUploadFailure(errorCode, errorString, sHttpResponse) {
        alert(sHttpResponse);
    }

    function UploadImage() {
        if (DWObject) {
            // If no image in buffer, return the function
            if (DWObject.HowManyImagesInBuffer == 0)
                return;

            var strHTTPServer = location.hostname; //The name of the HTTP server. For example: "www.dynamsoft.com";
            var CurrentPathName = unescape(location.pathname);
            var CurrentPath = CurrentPathName.substring(0, CurrentPathName.lastIndexOf("/") + 1);
            var strActionPage = CurrentPath + "ReadBarcode.aspx";
            DWObject.IfSSL = false; // Set whether SSL is used
            DWObject.HTTPPort = location.port == "" ? 80 : location.port;

            var Digital = new Date(); 
            var uploadfilename = Digital.getTime() + Digital.getMilliseconds() + ".tif"; // Uses milliseconds according to local time as the file name

            //Upload image(s) to server side for barcode reading
            DWObject.SetHTTPFormField('left', ileft);
            DWObject.SetHTTPFormField('top', itop);
            DWObject.SetHTTPFormField('right', iright);
            DWObject.SetHTTPFormField('bottom', ibottom);
            DWObject.HTTPUploadThroughPostAsMultiPageTIFF(strHTTPServer, strActionPage, uploadfilename, OnHttpUploadSuccess, OnHttpUploadFailure);
        }
    }

Создайте ReadBarcode.aspx, чтобы получать отсканированные изображения и распознавать штрих-коды на изображениях.

using Dynamsoft.Barcode;

namespace DBR_DWT_ASP.NET
{
    public partial class ReadBarcode : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                /***********************Save Image on Server**********************/
                String strImageName;
                String strleft = HttpContext.Current.Request["left"];
                String strtop = HttpContext.Current.Request["top"];
                String strright = HttpContext.Current.Request["right"];
                String strbottom = HttpContext.Current.Request["bottom"];
                HttpFileCollection files = HttpContext.Current.Request.Files;
                HttpPostedFile uploadfile = files["RemoteFile"];
                strImageName = uploadfile.FileName;
                Rectangle rect;
                strImageName = Server.MapPath("/") + "\\UploadedImages\\" + uploadfile.FileName;
                uploadfile.SaveAs(strImageName);

                /***********************Read Barcode Image**********************/
                BarcodeReader reader = new BarcodeReader();
                ReaderOptions options = new ReaderOptions();
                options.MaxBarcodesToReadPerPage = 100;
                //options.BarcodeFormats = (BarcodeFormat.CODE_39 | BarcodeFormat.CODE_128);
                options.BarcodeFormats = BarcodeFormat.OneD;

                reader.ReaderOptions = options;
                reader.LicenseKeys = "0925EFE71C10001015A17857C54DA148";

                BarcodeResult[] results = null;
                if (System.Int32.Parse(strbottom) > 0)
                {
                    rect = new Rectangle(System.Int32.Parse(strleft), System.Int32.Parse(strtop), System.Int32.Parse(strright) - System.Int32.Parse(strleft), System.Int32.Parse(strbottom) - System.Int32.Parse(strtop));
                    results = reader.DecodeFileRect(strImageName, rect);
                }
                else
                    results = reader.DecodeFile(strImageName);

                strleft = ""; strtop = ""; strright = ""; strbottom = "";

                if (results == null)
                {
                    Response.Write("No Barcode Detected");
                    return ;
                }

                /**********************Return Barcode Rsults*********************/
                String strResults = "Total barcode(s) found: " + results.Length.ToString() + ".\n";
                for (int i = 0; i < results.Length; ++i)
                {
                    BarcodeResult barcode = results[i];
                    strResults += "Barcode " + (i + 1).ToString() + ":\n";
                    strResults += barcode.BarcodeFormat.ToString() + "\n";
                    strResults += barcode.BarcodeText + "\n\n";
                }
                Response.Write(strResults);
            }
            catch
            {
            }

        }
    }
}

Вывод

Следуя этим шагам, вы легко создадите приложение для сканирования штрих-кода. Дайте мне знать, если у вас возникнут вопросы при запуске примера кода или создании собственного приложения для сканирования документов.

Первоначально опубликовано на www.dynamsoft.com 28 августа 2014 г.