Bilder scannen mit einer Webanwendung für Windows und Linux

Blog-Kategorie: TWAINWeb

08.042024

TWAIN ist ein Standardprotokoll und eine Schnittstelle (API), die die Interaktion zwischen einem Programm und einem Bildscanner definiert. Der TWAIN-Standard wird von der TWAIN Working Group entwickelt. Version 1 des TWAIN-Standards definiert die Interaktion mit Bildscannern für Windows. Version 2 des TWAIN-Standards definiert die Interaktion mit Bildscannern für Windows, macOS und Linux.
Der TWAIN-Standard ist der beliebteste Standard für Bildscanner unter Windows. Fast jeder Bildscanner verfügt über einen TWAIN-Treiber für die Verwendung unter Windows.
Der TWAIN-Standard ist unter Linux nicht so verbreitet. Unsere Recherchen (Stand Anfang 2024) ergaben, dass nur Kodak TWAIN-Treiber für die Verwendung seiner Bildscanner unter Linux anbietet.

SANE ist eine Programmierschnittstelle (API), die einen standardisierten Zugriff auf Rasterbildscanner (Flachbettscanner, Handscanner usw.) ermöglicht. Die SANE-API ist Public Domain und steht für öffentliche Diskussionen und Weiterentwicklungen offen. Die SANE-API ist die beliebteste Bildscanner-API für Linux.
Viele Scannerhersteller haben SANE-Treiber für ihre Bildscanner entwickelt. Auch die SANE-Community stellt SANE-Treiber bereit. Daher verfügt nahezu jeder moderne Bildscanner über einen SANE-Treiber, der die Nutzung des Geräts unter Linux ermöglicht.

Das VintaSoft Twain .NET SDK bietet die VintaSoft TWAIN JavaScript API und den VintaSoft Web TWAIN-Dienst. Damit können Webentwickler schnell und einfach browserübergreifende Webanwendungen zum Erfassen von Bildern von TWAIN- oder SANE-Scannern unter Windows und Linux erstellen. Die entwickelten Webanwendungen können in allen gängigen Webbrowsern verwendet werden.

Die VintaSoft TWAIN JavaScript API ermöglicht die Arbeit mit TWAIN- und SANE-Bildscannern unter Windows und Linux. Das heißt, die Clientseite der Webanwendung verwendet denselben Code für die Kommunikation mit TWAIN- und SANE-Bildscannern unter Windows und Linux. Für die Nutzung der VintaSoft TWAIN JavaScript API muss der VintaSoft Web TWAIN-Dienst auf dem lokalen Computer installiert sein, da die VintaSoft TWAIN JavaScript API Anfragen an den VintaSoft Web TWAIN-Dienst sendet, um auf lokale TWAIN- und SANE-Bildscanner zuzugreifen. Detaillierte Informationen zur VintaSoft TWAIN JavaScript API finden Sie in der Online-Dokumentation für Webentwickler hier: https://www.vintasoft.com/docs/vstwain-dotnet-web/

Der VintaSoft Web TWAIN-Dienst bietet eine Web-API für den Zugriff auf lokale TWAIN-Scanner für alle Benutzer des lokalen Computers. Es gibt eine Version des VintaSoft Web TWAIN-Dienstes für Windows und Linux.
Die Windows-Version des VintaSoft Web TWAIN-Dienstes kann mithilfe eines Windows-Installers auf jedem Windows-Computer installiert werden. Detaillierte Informationen zur Windows-Version des VintaSoft Web TWAIN-Dienstes finden Sie hier: https://www.vintasoft.com/docs/vstwain-dotnet-web/Programming-Twain_Web-Vintasoft_Web_TWAIN_service.html
Die Linux-Version des VintaSoft Web TWAIN-Dienstes kann auf Ubuntu-, Debian- und Fedora-Computern mithilfe eines .deb- oder .rpm-Pakets installiert werden. Detaillierte Informationen zur Linux-Version des VintaSoft Web TWAIN-Dienstes finden Sie hier: https://www.vintasoft.com/docs/vstwain-dotnet-web/Programming-Twain_Web-Vintasoft_Web_TWAIN_service_for_Linux.html

Um eine Webanwendung zu erstellen, die Bilder von TWAIN- oder SANE-Bildscannern in einem Webbrowser unter Windows und Linux erfasst, sollten Sie die folgenden Schritte ausführen:

Hier ist JavaScript-Code, der zeigt, wie Bilder von TWAIN- oder SANE-Bildscannern in einem Webbrowser (Firefox, Chrome, Edge, Opera usw.) unter Windows und Linux erfasst werden:
// 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();
    }
}