VintaSoft Twain .NET SDK 15.4: Documentation for Web developer
In This Topic
How to get information about capabilities/options of TWAIN/SANE device?
In This Topic
TWAIN standard defines many standard capabilities (XferCount, IPixelType, DoubleFeedDetection, IContrast, IRotation, etc), which can be supported by TWAIN device. Also TWAIN device can provide custom capabilities, which are defined by scanner manufacturer.

If you want to get a list of capabilities, which are supported by TWAIN device, please use the WebTwainDeviceJS.getSupportedCapabilities function.

If you want to get current value of TWAIN device capability, please use the WebTwainCapabilityInfoJS.get_CurrentValue function.
If you want to get the default value of TWAIN device capability, please use the WebTwainCapabilityInfoJS.get_DefaultValue function.
If you want to get supported values of TWAIN device capability, please use the WebTwainCapabilityInfoJS.get_SupportedValues function.



SANE API does not define standard options for SANE device, SANE API just defines rules, which allow to create self-describing options by device manufacturer.

If you want to get a list of options, which are supported by SANE device, please use the WebTwainDeviceJS.getSupportedCapabilities function.

If you want to get current value of SANE device option, please use the WebTwainCapabilityInfoJS.get_CurrentValue function.
If you want to get supported values of SANE device option, please use the WebTwainCapabilityInfoJS.get_SupportedValues function.



Here is JavaScript code that demonstrates how to get information about supported values of capability/option of TWAIN/SANE device:
// get information about capability value from TWAIN/WIA/SANE/eSCL image scanner
__getCapValueFromTwainScanner();



/**
 * Returns information about capability value from TWAIN/WIA/SANE/eSCL image scanner.
 */
function __getCapValueFromTwainScanner() {
    // 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/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);

        // if device is SANE device
        if (device.get_IsSane()) {
            // get "mode" option of SANE device
            var scanModeOption = device.getCapability("mode", new Vintasoft.Twain.WebTwainDeviceCapabilityUsageModeEnumJS("Get"));
            // if "mode" option is supported by SANE device
            if (scanModeOption != null) {
                // output information about current scan mode
                console.log("Current scan mode: " + scanModeOption.get_CurrentValue());

                // get supported scan modes
                var supportedScanModes = scanModeOption.get_SupportedValues();
                var supportedScanModesAsArray = supportedScanModess.get_SupportedValuesAsArray();
                var supportedScanModesString = "Supported scan modes: ";
                // for each supported scan mode
                for (var j = 0; j < supportedScanModesAsArray.length; j++) {
                    supportedScanModesString += supportedScanModesAsArray[j].toString() + ' ';
                }
                // output information about supported scan modes
                console.log(supportedScanModesString);
            }
        }
        // if device is TWAIN device
        else if (device.get_IsTwain()) {
            // get IPixelType capability of TWAIN device
            var pixelTypeCap = device.getCapability(
                new Vintasoft.Twain.WebTwainDeviceCapabilityIdEnumJS("IPixelType"),
                new Vintasoft.Twain.WebTwainDeviceCapabilityUsageModeEnumJS("Get"));
            // if IPixelType capability is supported by TWAIN device
            if (pixelTypeCap != null) {
                // output information about current pixel type
                console.log("Current pixel type: " + pixelTypeCap.get_CurrentValue());
                // output information about default pixel type
                console.log("Default pixel type: " + pixelTypeCap.get_DefaultValue());

                // get supported pixel types
                var supportedPixelTypes = pixelTypeCap.get_SupportedValues();
                var supportedPixelTypesAsArray = supportedPixelTypes.get_SupportedValuesAsArray();
                var supportedPixelTypesString = "Supported pixel types: ";
                // for each supported pixel type
                for (var j = 0; j < supportedPixelTypesAsArray.length; j++) {
                    supportedPixelTypesString += supportedPixelTypesAsArray[j].toString() + ' ';
                }
                // output information about supported pixel types
                console.log(supportedPixelTypesString);
            }
        }

        // 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();
    }
}



Here is TypeScript code that demonstrates how to get information about supported values of capability/option of TWAIN/SANE device:
import { Component } from '@angular/core';

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

  ngOnInit() {
    // get information about capability value from TWAIN/WIA/SANE/eSCL device
    this.__getCapValueFromTwainScanner();
  }


  /**
   * Returns information about capability value from TWAIN/WIA/SANE/eSCL device.
   */
  __getCapValueFromTwainScanner() {
    // 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/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);

      // if device is SANE device
      if (device.get_IsSane()) {
        // get "mode" option of SANE device
        let scanModeOption: Vintasoft.Twain.WebTwainCapabilityInfoJS = device.getCapability(
          "mode",
          new Vintasoft.Twain.WebTwainDeviceCapabilityUsageModeEnumJS("Get"));
        // if "mode" option is supported by SANE device
        if (scanModeOption != null) {
          // output information about current scan mode
          console.log("Current scan mode: " + scanModeOption.get_CurrentValue());

          // get supported scan modes
          let supportedScanModes: Vintasoft.Twain.WebTwainCapabilitySupportedValuesJS = scanModeOption.get_SupportedValues();
          let supportedScanModesAsArray: object[] = supportedScanModes.get_SupportedValuesAsArray();
          let supportedScanModesString: string = "Supported scan modes: ";
          // for each supported scan mode
          for (let j: number = 0; j < supportedScanModesAsArray.length; j++) {
            supportedScanModesString += supportedScanModesAsArray[j].toString() + ' ';
          }
          // output information about supported scan modes
          console.log(supportedScanModesString);
        }
      }
      // if device is TWAIN device
      else if (device.get_IsTwain()) {
        // get IPixelType capability of TWAIN device
        let pixelTypeCap: Vintasoft.Twain.WebTwainCapabilityInfoJS = device.getCapability(
          new Vintasoft.Twain.WebTwainDeviceCapabilityIdEnumJS("IPixelType"),
          new Vintasoft.Twain.WebTwainDeviceCapabilityUsageModeEnumJS("Get"));
        // if IPixelType capability is supported by TWAIN image scanner
        if (pixelTypeCap != null) {
          // output information about current pixel type
          console.log("Current pixel type: " + pixelTypeCap.get_CurrentValue());
          // output information about default pixel type
          console.log("Default pixel type: " + pixelTypeCap.get_DefaultValue());

          // get supported pixel types
          let supportedPixelTypes: Vintasoft.Twain.WebTwainCapabilitySupportedValuesJS = pixelTypeCap.get_SupportedValues();
          let supportedPixelTypesAsArray: object[] = supportedPixelTypes.get_SupportedValuesAsArray();
          let supportedPixelTypesString: string = "Supported pixel types: ";
          // for each supported pixel type
          for (let j: number = 0; j < supportedPixelTypesAsArray.length; j++) {
            supportedPixelTypesString += supportedPixelTypesAsArray[j].toString() + ' ';
          }
          // output information about supported pixel types
          console.log(supportedPixelTypesString);
        }
      }

      // 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();
    }
  }

}