Windows 및 Linux용 웹 애플리케이션을 사용하여 이미지 스캔

블로그 카테고리: TWAIN

2024/04/08

TWAIN은 프로그램과 이미지 스캐너 간의 상호 작용을 정의하는 표준 프로토콜 및 인터페이스(API)입니다. TWAIN 표준은 TWAIN 워킹 그룹에서 개발 중입니다. TWAIN 표준 버전 1은 Windows용 이미지 스캐너와의 상호 작용을 정의합니다. TWAIN 표준 버전 2는 Windows, macOS, Linux용 이미지 스캐너와의 상호 작용을 정의합니다.
TWAIN 표준은 Windows용 이미지 스캐너에서 가장 널리 사용되는 표준입니다. 거의 모든 이미지 스캐너에는 Windows에서 사용할 수 있는 TWAIN 드라이버가 있습니다.
TWAIN 표준은 Linux에서 널리 사용되지 않으며, 저희 조사(2024년 초 기준)에 따르면 Kodak만이 Linux에서 자사 이미지 스캐너를 사용할 수 있도록 TWAIN 드라이버를 제공하고 있습니다.

SANE은 래스터 이미지 스캐닝 장치(평판 스캐너, 휴대용 스캐너 등)에 표준화된 방식으로 접근할 수 있도록 하는 애플리케이션 프로그래밍 인터페이스(API)입니다. SANE API는 공개 도메인이며, 누구나 토론하고 개발할 수 있습니다. SANE API는 Linux에서 가장 널리 사용되는 이미지 스캐너 API입니다.
많은 스캐너 제조업체들이 자사 이미지 스캐너용 SANE 드라이버를 개발했습니다. SANE 커뮤니티에서도 SANE 드라이버를 개발했습니다. 결과적으로 거의 모든 최신 이미지 스캐너에는 Linux에서 장치를 사용할 수 있도록 하는 SANE 드라이버가 있습니다.

VintaSoft Twain .NET SDK는 웹 개발자가 Windows 및 Linux 환경에서 TWAIN 또는 SANE 스캐너로부터 이미지를 획득하는 크로스 브라우저 웹 애플리케이션을 빠르고 쉽게 개발할 수 있도록 VintaSoft TWAIN JavaScript API와 VintaSoft Web TWAIN 서비스를 제공합니다. 개발된 웹 애플리케이션은 모든 인기 웹 브라우저에서 사용할 수 있습니다.

VintaSoft TWAIN JavaScript API는 Windows 및 Linux 환경에서 TWAIN 및 SANE 이미지 스캐너와 연동할 수 있도록 해주는 API입니다. 즉, 웹 애플리케이션의 클라이언트 측에서 동일한 코드를 사용하여 Windows와 Linux 환경의 TWAIN 및 SANE 이미지 스캐너를 사용할 수 있습니다. VintaSoft TWAIN JavaScript API를 사용하려면 로컬 컴퓨터에 VintaSoft 웹 TWAIN 서비스를 설치해야 합니다. VintaSoft TWAIN JavaScript API는 로컬 TWAIN 및 SANE 이미지 스캐너에 접근하기 위해 VintaSoft 웹 TWAIN 서비스에 요청을 보내기 때문입니다. VintaSoft TWAIN JavaScript API에 대한 자세한 정보는 웹 개발자용 온라인 문서(https://www.vintasoft.com/docs/vstwain-dotnet-web/)에서 확인할 수 있습니다.

VintaSoft 웹 TWAIN 서비스는 로컬 컴퓨터의 모든 사용자가 로컬 TWAIN 스캐너에 액세스할 수 있는 웹 API를 제공합니다. VintaSoft 웹 TWAIN 서비스는 Windows 및 Linux용으로 제공됩니다.
VintaSoft Web TWAIN 서비스의 Windows 버전은 Windows 설치 프로그램을 사용하여 모든 Windows 컴퓨터에 설치할 수 있습니다. VintaSoft Web TWAIN 서비스의 Windows 버전에 대한 자세한 정보는 다음 링크를 참조하십시오. https://www.vintasoft.com/docs/vstwain-dotnet-web/Programming-Twain_Web-Vintasoft_Web_TWAIN_service.html
VintaSoft Web TWAIN 서비스의 Linux 버전은 .deb 또는 .rpm 패키지를 사용하여 Ubuntu, Debian, Fedora 컴퓨터에 설치할 수 있습니다. VintaSoft Web TWAIN 서비스의 Linux 버전에 대한 자세한 정보는 다음 링크를 참조하십시오. https://www.vintasoft.com/docs/vstwain-dotnet-web/Programming-Twain_Web-Vintasoft_Web_TWAIN_service_for_Linux.html

Windows 및 Linux 웹 브라우저에서 TWAIN 또는 SANE 이미지 스캐너의 이미지를 가져오는 웹 애플리케이션을 만들려면 다음 단계를 완료해야 합니다.

다음은 Windows 및 Linux의 웹 브라우저(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();
    }
}