VintaSoft Twain .NET SDK 15.4: Документация для Веб разработчика
В этом разделе
JavaScript классы для получения изображений от TWAIN/WIA/SANE/eSCL сканера изображений
В этом разделе
Файл Vintasoft.Twain.js содержит классы, которые позволяют получать изображения от TWAIN/WIA/SANE/eSCL сканера изображений:
Файл Vintasoft.Twain.d.ts является модулем TypeScript для файла Vintasoft.Twain.js и содержит определения классов и перечислений для получения изображений от TWAIN/WIA/SANE/eSCL сканера изображений в TypeScript.


Важно : Файл Vintasoft.Twain.js содержит ссылки на файл Vintasoft.Shared.js.
Важно : Файл Vintasoft.Twain.d.ts должен использоваться совместно с файлами Vintasoft.Twain.js, Vintasoft.Shared.js и Vintasoft.Shared.d.ts.
Важно : Файлы Vintasoft.Twain.js и Vintasoft.Twain.d.ts используют VintaSoft Web TWAIN сервис для доступа к TWAIN/WIA/SANE/eSCL сканерам изображений в Windows и Linux.


Для получения изображения со сканера изображений TWAIN/WIA/SANE/eSCL необходимо:
  1. Создайте экземпляр класса WebServiceJS, который будет использоваться для связи с локальным Vintasoft Web TWAIN сервисом.
  2. Создайте экземпляр класса WebTwainDeviceManagerJS и укажите, что менеджер устройств TWAIN/WIA/SANE/eSCL должен использовать веб-сервис, созданный на шаге 1.
  3. Создайте экземпляр класса WebTwainDeviceManagerInitSettingsJS и укажите параметры менеджера TWAIN/WIA/SANE/eSCL устройств.
  4. Вызовите функцию WebTwainDeviceManagerJS.open для открытия менеджера устройств TWAIN/WIA/SANE/eSCL.
  5. Если функция WebTwainDeviceManagerJS.open выдала исключение, отобразите сообщение об ошибке и перейдите к шагу 19; в другом случае перейдите к следующему шагу.
  6. Вызовите функцию WebTwainDeviceManagerJS.get_Devices для получения списка доступных TWAIN/WIA/SANE/eSCL устройств.
  7. Если функция WebTwainDeviceManagerJS.get_Devices выдала исключение, отобразите сообщение об ошибке и перейдите к шагу 17; в другом случае перейдите к следующему шагу.
  8. Выберите нужное устройство (экземпляр класса WebTwainDeviceJS) из доступных устройств.
  9. Вызовите функцию WebTwainDeviceJS.open для открытия устройства.
  10. Если функция WebTwainDeviceJS.open выдала исключение, отобразите сообщение об ошибке и перейдите к шагу 17; в другом случае перейдите к следующему шагу.
  11. При необходимости установите возможности устройства (тип пикселя, разрешение изображения, включите устройство подачи документов и т.д.).
  12. Вызовите функцию WebTwainDeviceJS.acquireModalSync для выполнения одного шага процесса получения изображения.
  13. Если функция WebTwainDeviceJS.acquireModalSync выдала исключение, отобразите сообщение об ошибке и перейдите к шагу 15; в другом случае перейдите к следующему шагу.
  14. Обработайте результаты получения изображения:
    1. Если изображение получено с устройства (acquireModalResult.acquireModalState === 2), сохраните полученное изображение в коллекции изображений для дальнейшей обработки (отображения, обработки, сохранения, загрузки) и перейдите к шагу 12.
    2. Если сканирование завершилось неудачно (acquireModalResult.acquireModalState === 4), отобразите сообщение об ошибке, перейдите к шагу 12, т.к. нужно дождаться завершения получения изображения (data.acquireModalState === 0).
    3. Если сканирование завершено (acquireModalResult.acquireModalState === 9), перейдите к шагу 12, т.к. нужно дождаться завершения получения изображения (data.acquireModalState === 0).
    4. Если получение изображения завершено (acquireModalResult.acquireModalState === 0), перейдите к шагу 15.
  15. Вызовите функцию WebTwainDeviceJS.close для закрытия устройства.
  16. Если функция WebTwainDeviceJS.close выдала исключение, отобразите сообщение об ошибке и перейдите к шагу 17; в другом случае перейдите к следующему шагу.
  17. Вызовите функцию WebTwainDeviceManagerJS.close для закрытия менеджера устройств.
  18. Если функция WebTwainDeviceManagerJS.close выдала исключение, отобразите сообщение об ошибке; в другом случае перейдите к следующему шагу.
  19. Получение изображения завершено.


Вот код JavaScript, демонстрирующий, как получить изображения со сканера изображений TWAIN/WIA/SANE/eSCL:
<script type="text/javascript">
    // acquire images from TWAIN/WIA/SANE/eSCL image scanner
    __acquireImageFromTwainScanner();



    /**
     * Acquires images from TWAIN/WIA/SANE/eSCL image scanner.
     */
    function __acquireImageFromTwainScanner() {
        // register the evaluation version of VintaSoft Web TWAIN service
        // please read how to get evaluation license in documentation: https://www.vintasoft.ru/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/WIA/SANE/eSCL devices
        var twainService = new Vintasoft.Shared.WebServiceControllerJS(serviceUrl);

        // TWAIN/WIA/SANE/eSCL 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 default TWAIN/WIA/SANE/eSCL device
            device = deviceManager.get_DefaultDevice();

            // open device without UI
            device.open(false);

            // a collection that stores images, which are acquired from TWAIN/WIA/SANE/eSCL devices and stored in memory of VintaSoft Web TWAIN service
            var acquiredImages = new Vintasoft.Twain.WebAcquiredImageCollectionJS(deviceManager);
            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();
                        // add acquired image to the image collection
                        acquiredImages.add(acquiredImage);

                        // get image as Base64 string
                        var bitmapAsBase64String = acquiredImage.getAsBase64String();
                        // update image preview
                        var previewImageElement = document.getElementById('previewImage');
                        previewImageElement.src = bitmapAsBase64String;

                        // clear image collection (delete images from memory of VintaSoft Web TWAIN service) because image is not necessary anymore
                        acquiredImages.clear();
                        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();
        }
    }
</script>



Вот код TypeScript компонента Angular, демонстрирующий, как получить изображения со сканера изображений TWAIN/WIA/SANE/eSCL:
import { Component } from '@angular/core';

@Component({
  selector: 'twain-scanning-demo',
  templateUrl: './twain-scanning-demo.component.html'
})
export class TwainScanningDemoComponent {

  ngOnInit() {
    // acquire images from TWAIN/WIA/SANE/eSCL image scanner
    this.__acquireImageFromTwainScanner();
  }


  /**
  * Acquires images from TWAIN/WIA/SANE/eSCL image scanner.
  */
  __acquireImageFromTwainScanner() {
    // register the evaluation version of VintaSoft Web TWAIN service
    // please read how to get evaluation license in documentation: https://www.vintasoft.ru/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/WIA/SANE/eSCL devices
    let twainService: Vintasoft.Shared.WebServiceControllerJS = new Vintasoft.Shared.WebServiceControllerJS(serviceUrl);

    // TWAIN/WIA/SANE/eSCL 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 default TWAIN/WIA/SANE/eSCL device
      device = deviceManager.get_DefaultDevice();

      // open device without UI
      device.open(false);

      // a collection that stores images, which are acquired from TWAIN/WIA/SANE/eSCL devices and stored in memory of VintaSoft Web TWAIN service
      let acquiredImages: Vintasoft.Twain.WebAcquiredImageCollectionJS = new Vintasoft.Twain.WebAcquiredImageCollectionJS(deviceManager);
      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();
            // add acquired image to the image collection
            acquiredImages.add(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;

            // clear image collection (delete images from memory of VintaSoft Web TWAIN service) because image is not necessary anymore
            acquiredImages.clear();
            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();
    }
  }

}