Windows および Linux 用 Web アプリケーションを使用してイメージをスキャン

ブログカテゴリ: TWAINWeb

2024/04/08

TWAIN は、プログラムと画像スキャナー間のやり取りを定義する標準プロトコルおよびインターフェイス (API) です。TWAIN 標準は、TWAIN ワーキング グループによって開発されています。TWAIN 標準のバージョン 1 では、Windows 用画像スキャナーとのやり取りが定義されています。TWAIN 標準のバージョン 2 では、Windows、macOS、Linux 用画像スキャナーとのやり取りが定義されています。
TWAIN 標準は、Windows 用画像スキャナーの最も一般的な標準です。ほとんどすべての画像スキャナーには、Windows で使用するための TWAIN ドライバーがあります。
TWAIN規格はLinuxではそれほど普及しておらず、当社の調査(2024年初頭時点)によると、Linuxでイメージスキャナーを使用するためのTWAINドライバーを提供しているのはKodakのみでした。

SANEは、ラスターイメージスキャンデバイス(フラットベッドスキャナー、ハンドヘルドスキャナーなど)への標準化されたアクセスを提供するアプリケーションプログラミングインターフェース(API)です。SA​​NE APIはパブリックドメインであり、一般の議論や開発に開放されています。SANE APIは、Linuxで最も人気のあるイメージスキャナーAPIです。
多くのスキャナーメーカーが、自社のイメージスキャナー用のSANEドライバーを開発しています。SANEコミュニティによって開発されたSANEドライバーもあります。そのため、ほとんどの最新のイメージスキャナーには、Linuxでデバイスを使用できるようにするSANEドライバーが搭載されています。

VintaSoft Twain .NET SDK は VintaSoft TWAIN JavaScript API と VintaSoft Web TWAIN サービスを提供します。これにより、Web 開発者は Windows および Linux で TWAIN または SANE スキャナーからイメージを取得するためのクロスブラウザー Web アプリケーションを迅速かつ簡単に作成できます。開発された Web アプリケーションは、すべての一般的な Web ブラウザーで使用できます。

VintaSoft TWAIN JavaScript API は、Windows および Linux で TWAIN および SANE イメージ スキャナーを操作するための API です。つまり、Web アプリケーションのクライアント側は、Windows および Linux で TWAIN および SANE イメージ スキャナーを操作するために同じコードを使用します。VintaSoft TWAIN JavaScript API が機能するには、ローカル コンピューターに VintaSoft Web TWAIN サービスをインストールする必要があります。これは、VintaSoft TWAIN JavaScript API が、ローカルの TWAIN および SANE イメージ スキャナーにアクセスするために VintaSoft Web TWAIN サービスに要求を送信するためです。VintaSoft TWAIN JavaScript API に関する詳細情報は、Web 開発者向けのオンライン ドキュメント (https://www.vintasoft.com/docs/vstwain-dotnet-web/) をご覧ください。

VintaSoft Web TWAIN サービスは、ローカル コンピュータのすべてのユーザーがローカル TWAIN スキャナーにアクセスするための Web API を提供します。VintaSoft Web TWAIN サービスには、Windows 用と Linux 用のバージョンがあります。
VintaSoft Web TWAINサービスのWindows版は、Windowsインストーラーを使用して任意のWindowsコンピューターにインストールできます。 Windows版のVintaSoft Web TWAINサービスに関する詳細は、こちらをご覧ください:https://www.vintasoft.com/docs/vstwain-dotnet-web/Programming-Twain_Web-Vintasoft_Web_TWAIN_service.html
Linux版のVintaSoft Web TWAINサービスは、.debパッケージまたは.rpmパッケージを使用してUbuntu、Debian、Fedoraコンピュータにインストールできます。Linux版のVintaSoft Web TWAINサービスに関する詳細は、こちらをご覧ください:https://www.vintasoft.com/docs/vstwain-dotnet-web/Programming-Twain_Web-Vintasoft_Web_TWAIN_service_for_Linux.html

Windows および Linux の Web ブラウザーで TWAIN または SANE イメージ スキャナーから画像を取得する Web アプリケーションを作成するには、次の手順を完了する必要があります。

以下は、Windows および Linux の Web ブラウザー (Firefox、Chrome、Edge、Opera など) で TWAIN または SANE 画像スキャナーから画像を取得する方法を示した JavaScript コードです。
// 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();
    }
}