TWAIN es un protocolo e interfaz (API) estándar que define la interacción entre un programa y un escáner de imágenes. El estándar TWAIN está siendo desarrollado por el Grupo de Trabajo TWAIN. La versión 1 del estándar TWAIN define la interacción con los escáneres de imágenes para Windows. La versión 2 del estándar TWAIN define la interacción con escáneres de imágenes para Windows, macOS y Linux.
El estándar TWAIN es el estándar más popular para escáneres de imágenes en Windows. Casi todos los escáneres de imágenes tienen un controlador TWAIN para su uso en Windows.
El estándar TWAIN no es tan popular en Linux y nuestra investigación (a principios de 2024) mostró que solo Kodak proporciona controladores TWAIN para usar sus escáneres de imágenes en Linux.
SANE es una interfaz de programación de aplicaciones (API) que proporciona acceso estandarizado a dispositivos de escaneo de imágenes rasterizadas (escáneres de superficie plana, escáneres de mano, etc.). La API de SANE es de dominio público y está abierta a la discusión y el desarrollo públicos. La API de SANE es la API de escáner de imágenes más popular para Linux.
Muchos fabricantes de escáneres han creado controladores SANE para sus escáneres de imágenes. También existen controladores SANE creados por la comunidad SANE. Como resultado, casi cualquier escáner de imágenes moderno cuenta con un controlador SANE que permite su uso en Linux.
VintaSoft Twain .NET SDK proporciona la API de JavaScript VintaSoft TWAIN y el servicio VintaSoft Web TWAIN, que permiten al desarrollador web crear rápida y fácilmente una aplicación web multinavegador para adquirir imágenes de escáneres TWAIN o SANE en Windows y Linux. Las aplicaciones web desarrolladas se pueden utilizar en todos los navegadores web populares.
VintaSoft TWAIN JavaScript API es una API que le permite trabajar con escáneres de imágenes TWAIN y SANE en Windows y Linux, es decir, el lado cliente de la aplicación web usa el mismo código para trabajar con escáneres de imágenes TWAIN y SANE en Windows y Linux. Para que funcione la API de JavaScript VintaSoft TWAIN, debe instalar el servicio VintaSoft Web TWAIN en su computadora local, porque la API de JavaScript VintaSoft TWAIN envía solicitudes al servicio VintaSoft Web TWAIN para obtener acceso a los escáneres de imágenes TWAIN y SANE locales. La información detallada sobre la API TWAIN JavaScript de VintaSoft se puede leer en la documentación en línea para desarrolladores web aquí:
https://www.vintasoft.com/docs/vstwain-dotnet-web/
El servicio VintaSoft Web TWAIN proporciona una API web para que todos los usuarios accedan a los escáneres TWAIN locales. Existe una versión del servicio VintaSoft Web TWAIN para Windows y Linux.
La versión para Windows del servicio VintaSoft Web TWAIN se puede instalar en cualquier ordenador con Windows mediante un instalador de Windows. Para obtener información detallada sobre la versión para Windows del servicio VintaSoft Web TWAIN, consulte aquí:
https://www.vintasoft.com/docs/vstwain-dotnet-web/Programming-Twain_Web-Vintasoft_Web_TWAIN_service.html
La versión para Linux del servicio VintaSoft Web TWAIN se puede instalar en ordenadores con Ubuntu, Debian o Fedora mediante paquetes .deb o .rpm. La información detallada sobre la versión Linux del servicio VintaSoft Web TWAIN, lea aquí:
https://www.vintasoft.com/docs/vstwain-dotnet-web/Programming-Twain_Web-Vintasoft_Web_TWAIN_service_for_Linux.html
Para crear una aplicación web que adquiera imágenes de un escáner de imágenes TWAIN o SANE en un navegador web en Windows y Linux, debe completar los siguientes pasos:
- Instale el servicio VintaSoft Web TWAIN en la computadora a la que están conectados los escáneres de imágenes TWAIN y SANE.
- Escribe código JavaScript que use la API TWAIN JavaScript de VintaSoft para obtener acceso a escáneres de imágenes locales.
Aquí hay un código JavaScript que muestra cómo adquirir imágenes de un escáner de imágenes TWAIN o SANE en un navegador web (Firefox, Chrome, Edge, Opera, etc.) en Windows y 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();
}
}