리눅스 콘솔 .NET 애플리케이션을 사용하여 TWAIN 스캐너에서 이미지 획득

블로그 카테고리: TWAIN.NETLinux

2023/03/02

이 문서에서는 콘솔 .NET 애플리케이션을 만들고 우분투에서 TWAIN 스캐너에서 이미지를 획득하는 방법을 설명합니다. TWAIN 스캐너에서 이미지를 획득하기 위해 VintaSoft TWAIN .NET SDK가 사용됩니다.

다음은 작업을 완료하는 단계입니다.
  1. 우분투 데스크톱을 엽니다.

  2. .NET 애플리케이션 파일을 저장할 폴더를 생성합니다. 현재 사용자의 바탕 화면에 "Scan_Images" 폴더를 생성하고 해당 폴더로 이동합니다.


  3. 콘솔 명령 터미널을 엽니다. 컨텍스트 메뉴에서 "터미널에서 열기"를 선택하거나 Ctrl+Alt+T 키 조합을 눌러 열 수 있습니다.


  4. 터미널에서 새 콘솔 .NET 애플리케이션 프로젝트를 생성하는 명령을 실행합니다.
    dotnet new console --framework net7.0
    



    생성된 프로젝트에는 프로젝트 파일 "Scan_Images.csproj"와 애플리케이션의 C# 코드가 포함된 "Program.cs" 파일이 있습니다. 터미널을 닫습니다.

  5. 텍스트 편집기에서 "Scan_Images.csproj" 프로젝트 파일을 열고 파일 내용을 다음과 같이 변경하십시오.
    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>net7.0</TargetFramework>
        <RootNamespace>ConsoleApp1</RootNamespace>
        <ImplicitUsings>enable</ImplicitUsings>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="Vintasoft.Shared" Version="3.4.0.1" />
        <PackageReference Include="Vintasoft.Shared" Version="14.0.1.1" />
      </ItemGroup>
    
    </Project>
    



    변경된 프로젝트는 VintaSoft TWAIN .NET SDK(Vintasoft.Shared.dll, Vintasoft.Twain.dll)의 NuGet 패키지를 참조합니다.

  6. "Program.cs" 파일을 열고 코드를 다음과 같은 C# 코드로 변경하십시오.
    using System;
    using System.IO;
    
    using Vintasoft.Twain;
    
    namespace ConsoleApp1
    {
        class Program
        {
    
            static void Main(string[] args)
            {
                Vintasoft.Twain.TwainGlobalSettings.Register("VintaSoft", "support@vintasoft.com", "2023-04-02", "...");
            
                try
                {
                    // create TWAIN device manager
                    using (DeviceManager deviceManager = new DeviceManager())
                    {
                        // open TWAIN device manager
                        if (!OpenDeviceManager(deviceManager))
                            return;
    
                        // select TWAIN device
                        Device device = SelectDevice(deviceManager);
                        // if device is not selected
                        if (device == null)
                            return;
    
                        // specify that device UI should not be shown
                        device.ShowUI = false;
                        // specify that image scanning progess UI should not be shown
                        device.ShowIndicators = false;
                        // specify that device must be disabled after image scan
                        device.DisableAfterAcquire = true;
    
                        // open the device
                        device.Open();
    
                        // set device parameters
                        device.TransferMode = TransferMode.Native;
                        device.PixelType = PixelType.BW;
                        device.XferCount = 1;
    
                        // create directory for TIFF file
                        string directoryForImages = Path.GetDirectoryName(Directory.GetCurrentDirectory());
                        directoryForImages = Path.Combine(directoryForImages, "Images");
                        if (!Directory.Exists(directoryForImages))
                            Directory.CreateDirectory(directoryForImages);
    
                        string multipageTiffFilename = Path.Combine(directoryForImages, "multipage.tif");
    
                        // acquire image(s) from the device
                        int imageIndex = 0;
                        AcquireModalState acquireModalState = AcquireModalState.None;
                        do
                        {
                            acquireModalState = device.AcquireModal();
                            switch (acquireModalState)
                            {
                                case AcquireModalState.ImageAcquired:
                                    // save acquired image to a file
                                    device.AcquiredImage.Save(multipageTiffFilename);
                                    // dispose an acquired image
                                    device.AcquiredImage.Dispose();
    
                                    Console.WriteLine(string.Format("Image{0} is saved.", imageIndex++));
                                    break;
    
                                case AcquireModalState.ScanCompleted:
                                    Console.WriteLine("Scan is completed.");
                                    break;
    
                                case AcquireModalState.ScanCanceled:
                                    Console.WriteLine("Scan is canceled.");
                                    break;
    
                                case AcquireModalState.ScanFailed:
                                    Console.WriteLine(string.Format("Scan is failed: {0}", device.ErrorString));
                                    break;
    
                                case AcquireModalState.UserInterfaceClosed:
                                    Console.WriteLine("User interface is closed.");
                                    break;
                            }
                        }
                        while (acquireModalState != AcquireModalState.None);
    
                        // close the device
                        device.Close();
    
                        // close the device manager
                        deviceManager.Close();
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Error: " + ex.Message);
                }
    
                Console.WriteLine("Press any key to continue...");
                Console.ReadKey();
            }
    
            /// <summary>
            /// Opens the TWAIN device manager.
            /// </summary>
            /// <param name="deviceManager">Device manager.</param>
            /// <returns><b>True</b> - device manager is opened successfully; otherwise, <b>false</b>.</returns>
            private static bool OpenDeviceManager(DeviceManager deviceManager)
            {
                // try to use TWAIN device manager 2.x
                deviceManager.IsTwain2Compatible = true;
                // if TWAIN device manager 2.x is not available
                if (!deviceManager.IsTwainAvailable)
                {
                    Console.WriteLine("TWAIN device manager is not available.");
                    return false;
                }
    
                // open the device manager
                deviceManager.Open();
    
                return true;
            }
    
            /// <summary>
            /// Selects the TWAIN device.
            /// </summary>
            /// <param name="deviceManager">TWAIN device manager.</param>
            /// <returns>TWAIN device if device is selected; otherwiase, <b>null</b>.</returns>
            private static Device SelectDevice(DeviceManager deviceManager)
            {
                int deviceCount = deviceManager.Devices.Count;
                // if no devices are found in the system
                if (deviceCount == 0)
                {
                    Console.WriteLine("Devices are not found.");
                    return null;
                }
    
                Console.WriteLine("Device list:");
                for (int i = 0; i < deviceCount; i++)
                {
                    Console.WriteLine(string.Format("{0}. {1}", i + 1, deviceManager.Devices[i].Info.ProductName));
                }
    
                int deviceIndex = -1;
                while (deviceIndex < 0 || deviceIndex > deviceCount)
                {
                    Console.Write(string.Format("Please select device by entering the device number from '1' to '{0}' or press '0' to cancel: ", deviceCount));
                    deviceIndex = Console.ReadKey().KeyChar - '0';
                    Console.WriteLine();
                }
                Console.WriteLine();
    
                if (deviceIndex == 0)
                    return null;
    
                return deviceManager.Devices[deviceIndex - 1];
            }
    
        }
    }
    



    이 애플리케이션 코드는 사용 가능한 TWAIN 스캐너 목록을 출력하고, TWAIN 스캐너를 선택할 수 있도록 하며, TWAIN 스캐너에서 흑백 이미지를 획득하고, 스캔한 이미지를 다중 페이지 TIFF 파일로 저장합니다.

  7. 문서에 설명된 방법을 사용하여 Linux에서 평가판을 사용하는 코드를 얻고, 얻은 코드를 "Program.cs" 파일의 C# 코드에 삽입하십시오.


  8. 터미널을 열고 다음 명령어를 사용하여 .NET 프로젝트를 컴파일하십시오.
    dotnet build Scan_Images.csproj
    



    터미널을 닫으십시오.

  9. "bin/Debug/net7.0/" 폴더로 이동합니다.


  10. 터미널을 열고 다음 명령어를 사용하여 .NET 애플리케이션을 실행합니다.
    dotnet ./Scan_Images.dll
    



    터미널을 닫으십시오.

  11. 생성된 다중 페이지 TIFF 파일을 열고 결과를 확인합니다.