Ստացեք պատկերներ TWAIN սկաներից՝ օգտագործելով կոնսոլային .NET ծրագիրը Linux-ում

Բլոգի կատեգորիա՝ TWAIN.NETLinux

02.03.2023

Այս հոդվածը բացատրում է, թե ինչպես ստեղծել կոնսոլային .NET ծրագիր և ստանալ պատկերներ TWAIN սկաներից Ubuntu-ում: TWAIN սկաներից պատկերներ ստանալու համար օգտագործվում է VintaSoft TWAIN .NET SDK:

Ահա այդ առաջադրանքը կատարելու քայլերը.
  1. Բացեք Ubuntu աշխատասեղանը:

  2. Ստեղծեք թղթապանակ, որը կպահի .NET ծրագրի ֆայլերը: Եկեք ստեղծենք "Scan_Images" թղթապանակը ընթացիկ օգտատիրոջ աշխատասեղանին և անցնենք թղթապանակին:


  3. Բացեք կոնսոլային հրամանների տերմինալը: Դա կարելի է անել՝ ընտրելով "Բացել տերմինալում" կետը համատեքստային ցանկում կամ սեղմելով Ctrl+Alt+T ստեղների համադրությունը:


  4. Կանչեք հրամանը տերմինալում, որը կստեղծի նոր կոնսոլային .NET ծրագրի նախագիծ՝
    dotnet new console --framework net7.0
    



    Ստեղծված նախագիծը պարունակում է "Scan_Images.csproj" նախագծի ֆայլը և "Program.cs" ֆայլը, որը պարունակում է ծրագրի C# կոդը։ Փակեք տերմինալը։

  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-packages-ին։

  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 ֆայլը և տեսեք արդյունքները.