TWAIN è un protocollo e un'interfaccia standard (API) che definisce l'interazione tra un programma e uno scanner di immagini. Lo standard TWAIN è in fase di sviluppo da parte del TWAIN Working Group. La versione 1 dello standard TWAIN definisce l'interazione con gli scanner di immagini per Windows. La versione 2 dello standard TWAIN definisce l'interazione con gli scanner di immagini per Windows, macOS e Linux.
Lo standard TWAIN è lo standard più diffuso per gli scanner di immagini per Windows. Quasi tutti gli scanner di immagini dispongono di un driver TWAIN per l'utilizzo in Windows.
Lo standard TWAIN non è altrettanto diffuso in Linux e la nostra ricerca (a inizio 2024) ha dimostrato che solo Kodak fornisce driver TWAIN per l'utilizzo dei propri scanner di immagini in Linux.
SANE è un'interfaccia di programmazione applicativa (API) che fornisce un accesso standardizzato ai dispositivi di scansione di immagini raster (scanner piani, scanner portatili, ecc.). L'API SANE è di pubblico dominio ed è aperta alla discussione e allo sviluppo pubblico. L'API SANE è l'API per scanner di immagini più diffusa per Linux.
Molti produttori di scanner hanno creato driver SANE per i propri scanner di immagini. Sono disponibili anche driver SANE creati dalla comunità SANE. Di conseguenza, quasi tutti gli scanner di immagini moderni dispongono di driver SANE che consentono di utilizzare il dispositivo in Linux.
VintaSoft Twain .NET SDK fornisce l'API JavaScript TWAIN di VintaSoft e il servizio Web TWAIN di VintaSoft, che consentono allo sviluppatore web di creare in modo rapido e semplice un'applicazione web multi-browser per l'acquisizione di immagini da scanner TWAIN o SANE in Windows e Linux. Le applicazioni web sviluppate possono essere utilizzate in tutti i browser web più diffusi.
VintaSoft TWAIN JavaScript API è un'API che consente di lavorare con scanner di immagini TWAIN e SANE in Windows e Linux, ovvero il lato client dell'applicazione web utilizza lo stesso codice per lavorare con scanner di immagini TWAIN e SANE in Windows e Linux. Per utilizzare l'API JavaScript TWAIN di VintaSoft, è necessario installare il servizio VintaSoft Web TWAIN sul computer locale, poiché l'API JavaScript TWAIN di VintaSoft invia richieste al servizio VintaSoft Web TWAIN per accedere agli scanner di immagini TWAIN e SANE locali. Per informazioni dettagliate sull'API JavaScript TWAIN di VintaSoft, consultare la documentazione online per sviluppatori web qui:
https://www.vintasoft.com/docs/vstwain-dotnet-web/
Il servizio VintaSoft Web TWAIN fornisce un'API Web per l'accesso agli scanner TWAIN locali per tutti gli utenti del computer locale. Esiste una versione del servizio VintaSoft Web TWAIN per Windows e Linux.
La versione Windows del servizio VintaSoft Web TWAIN può essere installata su qualsiasi computer Windows utilizzando un programma di installazione di Windows. Per informazioni dettagliate sulla versione Windows del servizio VintaSoft Web TWAIN, leggere qui:
https://www.vintasoft.com/docs/vstwain-dotnet-web/Programming-Twain_Web-Vintasoft_Web_TWAIN_service.html
La versione Linux del servizio VintaSoft Web TWAIN può essere installata su Ubuntu, Debian,Computer Fedora che utilizza pacchetti .deb o .rpm. Per informazioni dettagliate sulla versione Linux del servizio VintaSoft Web TWAIN, consultare qui:
https://www.vintasoft.com/docs/vstwain-dotnet-web/Programming-Twain_Web-Vintasoft_Web_TWAIN_service_for_Linux.html
Per creare un'applicazione web che acquisisca immagini da uno scanner di immagini TWAIN o SANE in un browser web in Windows e Linux, è necessario completare i seguenti passaggi:
- Installare il servizio VintaSoft Web TWAIN sul computer a cui sono collegati gli scanner di immagini TWAIN e SANE.
- Scrivi codice JavaScript che utilizzi l'API JavaScript TWAIN di VintaSoft per accedere agli scanner di immagini locali.
Ecco il codice JavaScript che mostra come acquisire immagini da uno scanner di immagini TWAIN o SANE in un browser web (Firefox, Chrome, Edge, Opera, ecc.) in Windows e Linux:
// synchronously acquire images from TWAIN/SANE scanner and saves acquired images to PDF file
__synchronouslyAcquireImagesFromTwainScannerAndSaveToPdfFile();
/**
* Synchronously acquires images from TWAIN/SANE scanner and saves acquired images to PDF file.
*/
function __synchronouslyAcquireImagesFromTwainScannerAndSaveToPdfFile() {
// 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 default TWAIN/SANE device
device = deviceManager.get_DefaultDevice();
// open device without UI
device.open(false);
// create collection for images acquired from device
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 collection of acquired images
acquiredImages.add(acquiredImage);
// save acquired image to "result.pdf" file
acquiredImages.saveImages("d:\\result.pdf", false, [ acquiredImage.get_Id() ]);
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();
}
}