【问题标题】:How can I scan a document using ASP.net MVC 5 with the help of Twain如何在 Twain 的帮助下使用 ASP.net MVC 5 扫描文档
【发布时间】:2016-08-04 08:05:49
【问题描述】:

请通过分享一步一步的过程来帮助我,以在 ASP.Net MVC5 中使用 Twain 实现扫描功能。谢谢你

【问题讨论】:

    标签: c# asp.net-mvc scanning twain


    【解决方案1】:

    解决方案在这里:

    1. 在 ASP.Net/Core 项目中,您发送消息以调用 winform 项目:

              var start = function () {
              var i = 0;
              var wsImpl = window.WebSocket || window.MozWebSocket;
              window.ws = new wsImpl('ws://localhost:8181/');
              ws.onmessage = function (e) {
                  $('#submit').hide();
                  $('#scanBtn').hide();
                  $('.loader').show();
                  if (typeof e.data === "string") {
                      //IF Received Data is String
                  }
                  else if (e.data instanceof ArrayBuffer) {
                      //IF Received Data is ArrayBuffer
                  }
                  else if (e.data instanceof Blob) {
                      i++;
                      var f = e.data;
                      f.name = "File" + i;
                      storedFiles.push(f);
                      formdata.append(f.name, f);
                      var reader = new FileReader();
                      reader.onload = function (e) {
                          var html = "<div class=\"col-sm-2 text-center\" 
                      style=\"border: 1px solid black; margin-left: 2px;\"><img 
                      height=\"200px\" width=\"200px\" src=\"" + e.target.result + "\" 
                      data-file='" + f.name + "' class='selFile' title='Click to 
                      remove'><br/>" + i + "</div>";
                          selDiv.append(html);
                          $('#submit').show();
                          $('#scanBtn').show();
                          $('.loader').hide();
                      }
                      reader.readAsDataURL(f);
                  }
              };
              ws.onopen = function () {
                  //Do whatever u want when connected succesfully
              };
              ws.onclose = function () {
                  $('.dalert').modal('show');
              };
          }
          window.onload = start;
          function scanImage() {
              ws.send("1100");
          };
      

    https://javascript.info/websocket

    1. 在 Winforms Project 中扫描文档并将图形数据发送回 Asp.Net/Core 项目:

      公共部分类 Form1 : Form { ImageCodecInfo _tiffCodecInfo; TwainSession _twain; 布尔_stopScan; 布尔 _loadingCaps; 列出所有套接字; WebSocketServer 服务器; 公共表格1() { 初始化组件();

       if (NTwain.PlatformInfo.Current.IsApp64Bit)
      {
          Text = Text + " (64bit)";
      }
      else
      {
          Text = Text + " (32bit)";
      }
      foreach (var enc in ImageCodecInfo.GetImageEncoders())
      {
          if (enc.MimeType == "image/tiff") { _tiffCodecInfo = enc; break; }
      }
      
      this.WindowState = FormWindowState.Minimized;
      this.ShowInTaskbar = false;
      
      allSockets = new List<IWebSocketConnection>();
      server = new WebSocketServer("ws://0.0.0.0:8181");
      server.Start(socket =>
      {
          socket.OnOpen = () =>
          {
              Console.WriteLine("Open!");
              allSockets.Add(socket);
          };
          socket.OnClose = () =>
          {
              Console.WriteLine("Close!");
              allSockets.Remove(socket);
          };
          socket.OnMessage = message =>
          {
              if (message == "1100")
              {
                  this.Invoke(new Action(()=> {
                      this.WindowState = FormWindowState.Normal;
                  }));
              }
          };
      });
      

      }

    项目链接。

    https://github.com/mgriit/ScanAppForWeb

    您可以根据需要重新制作此项目。

    【讨论】:

      【解决方案2】:

      目前,没有任何浏览器支持开箱即用的扫描。您需要使用第三方库(不是 Microsoft 的 .NET 核心组件的一部分)。下面的例子使用了我们公司提供的产品Scanner.js:

      启用从 TWAIN 扫描仪到 ASP.NET 页面的扫描:逐步

      以下步骤以Scanner.js 为例;对于其他产品,它们可能会有所不同。

      1) 在您的 HTML 代码中包含扫描库:

      <script type="text/javascript" src="//asprise.azureedge.net/scannerjs/scanner.js"></script>
      

      2) 添加一个按钮来触发扫描过程:

      function scanToJpg() {
         scanner.scan(displayImagesOnPage,
         {
        "twain_cap_setting" : {
          "ICAP_PIXELTYPE" : "TWPT_RGB", // Color
          "ICAP_XRESOLUTION" : "100", // DPI: 100
          "ICAP_YRESOLUTION" : "100",
          "ICAP_SUPPORTEDSIZES" : "TWSS_USLETTER" // Paper size: TWSS_USLETTER, TWSS_A4, ...
        },
            "output_settings" :
            [
               {
                  "type" : "return-base64",
                  "format" : "jpg"
               }
            ]
         }
         );
      }
      

      3) 处理扫描结果——显示、上传等

      以下代码为每个扫描的图像创建一个img 元素,以显示在当前网页上:

      /** Processes the scan result */
      function displayImagesOnPage(successful, mesg, response) {
         var scannedImages = scanner.getScannedImage(response, true, false); // returns an array of ScannedImage
         for(var i = 0; (scannedImages instanceof Array) && i < scannedImages.length; i++) {
            var scannedImage = scannedImages[i];
            processScannedImage(scannedImage);
         }
      }
      
      /** Images scanned so far. */
      var imagesScanned = [];
      
      /** Processes a ScannedImage */
      function processScannedImage(scannedImage) {
         imagesScanned.push(scannedImage);
         var elementImg = createDomElementFromModel( {
             'name': 'img',
             'attributes': {
                 'class': 'scanned',
                 'src': scannedImage.src
             }
         });
         document.getElementById('images').appendChild(elementImg);
      }
      

      扫描成PDF格式直接上传示例,请访问代码库:https://github.com/Asprise/scannerjs.javascript-scanner-access-in-browsers-chrome-ie.scanner.js

      【讨论】:

      • 请在回答中提及您正在使用第三方库(由您的公司制造),这不是使用通用 ASP.net 库扫描文档的通用解决方案。
      • @Salik 我已根据您的建议更新了答案。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2018-03-09
      • 1970-01-01
      • 2016-04-27
      • 2021-08-27
      • 2010-11-04
      • 1970-01-01
      相关资源
      最近更新 更多