Сканирование изображений с помощью веб приложения в Windows и Linux

Категория: TWAINВеб

8 апреля 2024

TWAIN - это стандартный протокол и интерфейс (API), определяющий взаимодействие между программой и сканером изображений. Стандарт TWAIN разрабатывается рабочей группой TWAIN. Версия 1 TWAIN стандарта определяет взаимодействие с сканерами изображений для Windows. Версия 2 TWAIN стандарта определяет взаимодействие с сканерами изображений для Windows, macOS, Linux.
TWAIN стандарт является самым популярным стандартом для сканеров изображений для Windows. Практически любой сканер изображений имеет TWAIN драйвер для использования сканера изображений в Windows.
TWAIN стандарт не является популярным стандартом в Linux и наше исследование (на начало 2024 года) показало что только компания Kodak предоставляет TWAIN драйвера для использования Kodak сканеров изображений в Linux.

SANE (Scanner Access Now Easy) - это интерфейс прикладного программирования (API), который предоставляет стандартизированный доступ к устройствам сканирования растровых изображений (планшетные сканеры, ручные сканеры и другие). SANE API является общественным достоянием и открыт для всеобщего обсуждения и разработки. SANE API является самым популярным API для сканеров изображений для Linux.
Многие производители сканеров создали SANE драйвера для своих сканеров изображений. Также есть SANE драйвера, которые созданы SANE сообществом. В итоге практически для любого современного сканера изображений есть SANE драйвер, который позволяет использовать сканер изображений в Linux.

VintaSoft Twain .NET SDK предоставляет VintaSoft TWAIN JavaScript API и VintaSoft Web TWAIN сервис, которые позволяют веб разработчику быстро и легко создать кросс-браузерное веб-приложение для получения изображений от TWAIN или SANE сканера в Windows и Linux. Разработанные веб приложения можно использовать во всех популярных веб браузерах.

VintaSoft TWAIN JavaScript API - это API, который позволяет работать с TWAIN и SANE сканерами изображений в Windows и Linux, т.е. клиентская сторона веб приложения использует один и тот же код для работы с TWAIN и SANE сканерами изображений в Windows и Linux. Для работы VintaSoft TWAIN JavaScript API необходимо установить VintaSoft Web TWAIN сервис на локальный компьютер, потому что VintaSoft TWAIN JavaScript API отправляет запросы к VintaSoft Web TWAIN сервису, чтобы получить доступ к локальным TWAIN и SANE сканерам изображений. Подробную информацию о VintaSoft TWAIN JavaScript API пожалуйста читайте в он-лайн документации для веб разработчика: https://www.vintasoft.ru/docs/vstwain-dotnet-web/

VintaSoft Web TWAIN сервис - это сервис, который предоставляет Web API для доступа к локальным TWAIN сканерам для всех пользователей локального компьютера. Есть версия VintaSoft Web TWAIN сервиса для Windows и Linux.
Windows версия VintaSoft Web TWAIN сервиса может быть установлена на любой Windows компьютер с помощью Windows инсталлятора. Подробную информацию о Windows версии VintaSoft Web TWAIN сервиса пожалуйста читайте здесь: https://www.vintasoft.ru/docs/vstwain-dotnet-web/Programming-Twain_Web-Vintasoft_Web_TWAIN_service.html
Linux версия VintaSoft Web TWAIN сервиса может быть установлена на Ubuntu, Debian, Fedora компьютер с помощью .deb- или .rpm-пакета. Подробную информацию о Linux версии VintaSoft Web TWAIN сервиса пожалуйста читайте здесь: https://www.vintasoft.ru/docs/vstwain-dotnet-web/Programming-Twain_Web-Vintasoft_Web_TWAIN_service_for_Linux.html

Для создания веб приложения, которое получает изображения от TWAIN или SANE сканера изображений в веб браузере в Windows и Linux, необходимо выполнить следующие шаги:

Вот JavaScript код, который показывает как получить изображения от TWAIN или SANE сканера изображений в веб браузере (Firefox, Chrome, Edge, Opera, ...) в Windows и 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();
    }
}