Escanear imágenes con una aplicación web para Windows y Linux

Categoría del blog: TWAINWeb

08.04.2024

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:

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();
    }
}