TWAIN est un protocole et une interface (API) standard qui définit l'interaction entre un programme et un scanner d'images. La norme TWAIN est développée par le groupe de travail TWAIN. La version 1 de la norme TWAIN définit l'interaction avec les scanners d'images pour Windows. La version 2 de la norme TWAIN définit l'interaction avec les scanners d'images pour Windows, macOS et Linux.
TWAIN est la norme la plus répandue pour les scanners d'images sous Windows. Presque tous les scanners d'images disposent d'un pilote TWAIN pour une utilisation sous Windows.
La norme TWAIN est moins répandue sous Linux et nos recherches (début 2024) ont montré que seul Kodak fournit des pilotes TWAIN pour l'utilisation de ses scanners d'images sous Linux.
SANE est une interface de programmation (API) qui offre un accès standardisé aux périphériques de numérisation d'images raster (scanners à plat, scanners portables, etc.). L'API SANE est libre de droits et ouverte à la discussion et au développement. C'est l'API de numérisation d'images la plus populaire sous Linux.
De nombreux fabricants de scanners ont créé des pilotes SANE pour leurs scanners d'images. Il existe également des pilotes SANE créés par la communauté SANE. Par conséquent, presque tous les scanners d'images modernes disposent d'un pilote SANE permettant d'utiliser le périphérique sous Linux.
Le kit de développement logiciel VintaSoft Twain .NET SDK fournit l'API JavaScript VintaSoft TWAIN et le service Web VintaSoft TWAIN, permettant ainsi aux développeurs web de créer rapidement et facilement une application web multiplateforme pour l'acquisition d'images depuis un scanner TWAIN ou SANE sous Windows et Linux. Les applications web ainsi développées sont compatibles avec tous les navigateurs web courants.
L'API JavaScript VintaSoft TWAIN permet d'interagir avec les scanners d'images TWAIN et SANE sous Windows et Linux. Autrement dit, le code côté client de l'application web est identique pour les deux systèmes d'exploitation. Pour utiliser l'API JavaScript VintaSoft TWAIN, vous devez installer le service Web TWAIN de VintaSoft sur votre ordinateur. En effet, l'API envoie des requêtes à ce service pour accéder aux scanners d'images TWAIN et SANE locaux. Pour plus d'informations sur l'API JavaScript VintaSoft TWAIN, veuillez consulter la documentation en ligne destinée aux développeurs web:
https://www.vintasoft.com/docs/vstwain-dotnet-web/
Le service "VintaSoft Web TWAIN" fournit une API Web permettant à tous les utilisateurs de l'ordinateur d'accéder aux scanners TWAIN locaux. Il existe une version de ce service pour Windows et une autre pour Linux.
La version Windows du service VintaSoft Web TWAIN peut être installée sur n'importe quel ordinateur Windows à l'aide d'un programme d'installation Windows. Pour obtenir des informations détaillées sur la version Windows du service VintaSoft Web TWAIN, veuillez consulter le lien suivant:
https://www.vintasoft.com/docs/vstwain-dotnet-web/Programming-Twain_Web-Vintasoft_Web_TWAIN_service.html
La version Linux du service VintaSoft Web TWAIN peut être installée sur un ordinateur Ubuntu, Debian ou Fedora à l'aide d'un paquet .deb ou .rpm. Pour plus d'informations sur la version Linux du service VintaSoft Web TWAIN, veuillez consulter le lien suivant:
https://www.vintasoft.com/docs/vstwain-dotnet-web/Programming-Twain_Web-Vintasoft_Web_TWAIN_service_for_Linux.html
Pour créer une application web qui acquiert des images à partir d'un scanner d'images TWAIN ou SANE dans un navigateur web sous Windows et Linux, vous devez suivre les étapes suivantes:
- Installez le service VintaSoft Web TWAIN sur l'ordinateur auquel sont connectés les scanners d'images TWAIN et SANE.
- Écrivez un code JavaScript qui utilise l'API JavaScript VintaSoft TWAIN pour accéder aux scanners d'images locaux.
Voici un code JavaScript qui montre comment acquérir des images à partir d'un scanner d'images TWAIN ou SANE dans un navigateur web (Firefox, Chrome, Edge, Opera, etc.) sous Windows et 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();
}
}