How to set the capability/option value of TWAIN/SANE image scanner?
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 set the current value of TWAIN device capability, please use the
WebTwainDeviceJS.setCapability 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 set the current value of SANE device option, please use the
WebTwainDeviceJS.setCapability function.
Here is JavaScript code that demonstrates how to set the value of DuplexEnabled capability of TWAIN/SANE image scanner:
// set value of DuplexEnabled capability of TWAIN/SANE/eSCL image scanner
__setDuplexEnabledCapValueOfTwainScanner();
/**
* Sets value of DuplexEnabled capability of TWAIN/SANE/eSCL image scanner.
*/
function __setDuplexEnabledCapValueOfTwainScanner() {
// 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/SANE/eSCL devices
var twainService = new Vintasoft.Shared.WebServiceControllerJS(serviceUrl);
// TWAIN/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/SANE/eSCL device
device = deviceManager.get_DefaultDevice();
// open TWAIN device (do not display device UI but display dialog with image scanning progress)
device.open(false, true);
// if device is SANE device
if (device.get_IsSane()) {
// specify that images must be acquired from source "ADF Duplex"
device.set_SaneScanSource("ADF Duplex");
}
// if device is eSCL device
else if (device.get_IsEscl()) {
// specify that images must be acquired from ADF with duplex
device.set_EsclScanIntent("FeederWithDuplex");
}
// if device is TWAIN device
else if (device.get_IsTwain()) {
// set value of DuplexEnabled capability of TWAIN image scanner
device.setCapability(new Vintasoft.Twain.WebTwainDeviceCapabilityIdEnumJS("DuplexEnabled"), true);
}
// a collection that stores images, which are acquired from TWAIN/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 set the value of DuplexEnabled capability of TWAIN/SANE image scanner:
import { Component } from '@angular/core';
@Component({
selector: 'twain-scanning-demo',
templateUrl: './twain-scanning-demo.component.html'
})
export class TwainScanningDemoComponent {
ngOnInit() {
// set value of DuplexEnabled capability of TWAIN/SANE/eSCL image scanner
this.__setDuplexEnabledCapValueOfTwainScanner();
}
/**
* Sets value of DuplexEnabled capability of TWAIN/SANE/eSCL image scanner.
*/
__setDuplexEnabledCapValueOfTwainScanner() {
// 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/SANE/eSCL devices
let twainService: Vintasoft.Shared.WebServiceControllerJS = new Vintasoft.Shared.WebServiceControllerJS(serviceUrl);
// TWAIN/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/SANE/eSCL device
device = deviceManager.get_DefaultDevice();
// open TWAIN device (do not display device UI but display dialog with image scanning progress)
device.open(false, true);
// if device is SANE device
if (device.get_IsSane()) {
// specify that images must be acquired from source "ADF Duplex"
device.set_SaneScanSource("ADF Duplex");
}
// if device is eSCL device
else if (device.get_IsEscl()) {
// specify that images must be acquired from ADF with duplex
device.set_EsclScanIntent("FeederWithDuplex");
}
// if device is TWAIN device
else if (device.get_IsTwain()) {
// set value of DuplexEnabled capability of TWAIN image scanner
device.setCapability(new Vintasoft.Twain.WebTwainDeviceCapabilityIdEnumJS("DuplexEnabled"), true);
}
// a collection that stores images, which are acquired from TWAIN/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();
}
}
}