VintaSoft Twain .NET SDK 15.0: Документация для Веб разработчика
В этом разделе
    Как сканировать страницы с помощью автоматического устройства подачи документов (ADF) TWAIN/SANE сканера?
    В этом разделе
    Если Вы хотите сканировать страницы из устройства автоматической подачи документов (ADF) TWAIN сканера, Вам следует использовать класс WebTwainDeviceDocumentFeederJS.



    Если Вы хотите сканировать страницы из устройства автоматической подачи документов (ADF) SANE сканера, Вам следует установить режим сканирования, котоырй позволяюет использовать ADF, например, сканеры Kodak имеют несколько режимов сканирования для сканирования с ADF: 'ADF', 'ADF Front', 'ADF Back', 'ADF Both', 'ADF Duplex'. Режим сканирования SANE сканера можно установить с помощью функции WebTwainDeviceJS.set_SaneScanMode. Названия режимов сканирования, которые поддерживаются SANE устройством, можно получить с помощью функции WebTwainDeviceJS.getSupportedSaneScanModes.


    Вот JavaScript код, который демонстрирует как использовать устройство подачи документов TWAIN/SANE сканера:
    // acquire images from document feeder of TWAIN scanner
    __acquireImagesFromDocumentFeederOfTwainScanner();
    
    
    
    /**
     * Acquires images from document feeder of TWAIN scanner.
     */
    function __acquireImagesFromDocumentFeederOfTwainScanner() {
        // register the evaluation version of VintaSoft Web TWAIN service
        // please read how to get evaluation license in documentation: https://www.vintasoft.com/docs/vstwain-dotnet-web/Licensing-Twain_Web-Evaluation.html
        Vintasoft.Twain.WebTwainGlobalSettingsJS.register('REG_USER', 'REG_URL', 'REG_CODE', 'EXPIRATION_DATE');
    
        // URL to the VintaSoft Web TWAIN service
        var serviceUrl = 'https://localhost:25329/api/VintasoftTwainApi';
        // a Web API controller that allows to work with TWAIN and SANE devices
        var twainService = new Vintasoft.Shared.WebServiceControllerJS(serviceUrl);
    
        // TWAIN/SANE device manager
        var deviceManager = new Vintasoft.Twain.WebTwainDeviceManagerJS(twainService);
    
        // the default settings of device manager
        var deviceManagerInitSetting = new Vintasoft.Twain.WebTwainDeviceManagerInitSettingsJS();
    
        var device = null;
        try {
            // open device manager
            deviceManager.open(deviceManagerInitSetting);
    
            // get the TWAIN device
            device = deviceManager.findDeviceByName("Twain64: KODAK Scanner: i5000");
            if (device == null)
                return;
    
            // open device without UI
            device.open(false);
    
            // if device is SANE device
            if (device.get_DeviceName().substring(0, 4) == "Sane") {
                // specify that images must be acquired from ADF
                device.set_SaneScanSource("ADF Duplex");
            }
            // if device is TWAIN device
            else {
                // if device has document feeder
                if (device.get_HasFeeder()) {
                    var documentFeeder = device.get_DocumentFeeder();
    
                    // enable the document feeder of TWAIN device
                    documentFeeder.set_Enabled(true);
                    // specify that application want to acquire all pages from the feeder
                    device.set_XferCount(-1);
    
                    // if pages can be scanned in duplex mode
                    if (documentFeeder.get_DuplexMode().toString() != 'None') {
                        // enable duplex scanning
                        documentFeeder.set_DuplexEnabled(true);
                    }
                }
            }
    
            var acquireModalState;
            do {
                // do one step of modal image acquisition process
                var acquireModalResult = device.acquireModalSync();
                // get state of image acquisition
                acquireModalState = acquireModalResult.get_AcquireModalState().valueOf();
    
                switch (acquireModalState) {
                    case 2:   // image is acquired
                        // get acquired image
                        var acquiredImage = acquireModalResult.get_AcquiredImage();
                        // get image as Base64 string
                        var bitmapAsBase64String = acquiredImage.getAsBase64String();
                        // update image preview
                        var previewImageElement = document.getElementById('previewImage');
                        previewImageElement.src = bitmapAsBase64String;
                        break;
                    case 4:   // image scan is failed
                        alert(acquireModalResult.get_ErrorMessage());
                        break;
                    case 9:   // image scan is finished
                        break;
                }
            }
            while (acquireModalState !== 0);
        }
        catch (ex) {
            alert(ex);
        }
        finally {
            if (device != null) {
                // close the device
                device.close();
            }
            // close the device manager
            deviceManager.close();
        }
    }
    
    


    Вот TypeScript код, который демонстрирует как использовать устройство подачи документов TWAIN/SANE сканера:
    import { Component } from '@angular/core';
    
    @Component({
      selector: 'twain-scanning-demo',
      templateUrl: './twain-scanning-demo.component.html'
    })
    export class TwainScanningDemoComponent {
    
      ngOnInit() {
        // acquire images from document feeder of TWAIN scanner
        __acquireImagesFromDocumentFeederOfTwainScanner();
      }
    
    
      /**
       * Acquires images from document feeder of TWAIN scanner.
       */
      __acquireImagesFromDocumentFeederOfTwainScanner() {
        // register the evaluation version of VintaSoft Web TWAIN service
        // please read how to get evaluation license in documentation: https://www.vintasoft.com/docs/vstwain-dotnet-web/Licensing-Twain_Web-Evaluation.html
        Vintasoft.Twain.WebTwainGlobalSettingsJS.register('REG_USER', 'REG_URL', 'REG_CODE', 'EXPIRATION_DATE');
    
        // URL to the VintaSoft Web TWAIN service
        let serviceUrl: string = 'https://localhost:25329/api/VintasoftTwainApi';
        // a Web API controller that allows to work with TWAIN and SANE devices
        let twainService: Vintasoft.Shared.WebServiceControllerJS = new Vintasoft.Shared.WebServiceControllerJS(serviceUrl);
    
        // TWAIN device manager
        let deviceManager: Vintasoft.Twain.WebTwainDeviceManagerJS = new Vintasoft.Twain.WebTwainDeviceManagerJS(twainService);
    
        // the default settings of device manager
        let deviceManagerInitSetting: Vintasoft.Twain.WebTwainDeviceManagerInitSettingsJS = new Vintasoft.Twain.WebTwainDeviceManagerInitSettingsJS();
    
        try {
          // open device manager
          deviceManager.open(deviceManagerInitSetting);
        }
        catch (ex) {
          alert(ex);
          return;
        }
    
        let device: Vintasoft.Twain.WebTwainDeviceJS = null;
        try {
          // get the TWAIN device
          device = deviceManager.findDeviceByName("Twain64: KODAK Scanner: i5000");
          if (device == null)
            return;
    
          // open device without UI
          device.open(false);
    
          // if device is SANE device
          if (device.get_DeviceName().substring(0, 4) == "Sane") {
            // specify that images must be acquired from ADF
            device.set_SaneScanSource("ADF Duplex");
          }
          // if device is TWAIN device
          else {
            // if device has document feeder
            if (device.get_HasFeeder()) {
              var documentFeeder = device.get_DocumentFeeder();
    
              // enable the document feeder of TWAIN device
              documentFeeder.set_Enabled(true);
              // specify that application want to acquire all pages from the feeder
              device.set_XferCount(-1);
    
              // if pages can be scanned in duplex mode
              if (documentFeeder.get_DuplexMode().toString() != 'None') {
                // enable duplex scanning
                documentFeeder.set_DuplexEnabled(true);
              }
            }
          }
    
          let acquireModalState: number;
          do {
            // do one step of modal image acquisition process
            let acquireModalResult: Vintasoft.Twain.WebTwainDeviceAcquireModalResultJS = device.acquireModalSync();
            // get state of image acquisition
            acquireModalState = acquireModalResult.get_AcquireModalState().valueOf() as number;
    
            switch (acquireModalState) {
              case 2:   // image is acquired
                // get acquired image
                let acquiredImage: Vintasoft.Twain.WebAcquiredImageJS = acquireModalResult.get_AcquiredImage();
                // get image as Base64 string
                let bitmapAsBase64String: string = acquiredImage.getAsBase64String();
                // update image preview
                let previewImageElement: HTMLImageElement = document.getElementById('previewImage') as HTMLImageElement;
                previewImageElement.src = bitmapAsBase64String;
                break;
              case 4:   // image scan is failed
                alert(acquireModalResult.get_ErrorMessage());
                break;
              case 9:   // image scan is finished
                break;
            }
          }
          while (acquireModalState !== 0);
        }
        catch (ex) {
          alert(ex);
        }
        finally {
          if (device != null) {
            // close the device
            device.close();
          }
          // close the device manager
          deviceManager.close();
        }
      }
    
    }