Как сканировать страницы с помощью автоматического устройства подачи документов (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.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 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.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 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();
}
}
}