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:
- Installieren Sie den VintaSoft Web TWAIN-Dienst auf dem Computer, an den die TWAIN- und SANE-Bildscanner angeschlossen sind.
- Schreiben Sie JavaScript-Code, der die VintaSoft TWAIN JavaScript API verwendet, um auf lokale Bildscanner zuzugreifen.
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();
}
}