VintaSoft Twain .NET SDK 15.4: Documentation for .NET developer
In This Topic
How to skip blank pages while scanning?
In This Topic
Blank pages can be skipped while TWAIN image scanning by 2 ways:
  1. using TWAIN image scanner capabilities
  2. using the library (SDK) features

1. Skipping of blank pages using TWAIN image scanner capabilities

For the beginning, it is necessary to check if TWAIN image scanner supports the ability to skip blank pages - check if TWAIN image scanner supports ICAP_AUTODISCARDBLANKPAGES capability.

If TWAIN image scanner supports that capability, then you need to set the value of the capability in a way to let TWAIN image scanner skip blank pages or not.
Valid values of the capability:
Here is an example that demonstrates how to use TWAIN image scanner capability skipping blank pages during TWAIN image scanning:
/// <summary>
/// Synchronously acquires images from TWAIN device and skips blank pages using TWAIN capability.
/// </summary>
public void SynchronouslyAcquireImagesFromTwainDeviceAndSkipBlankPagesUsingTwainCapability()
{
    try
    {
        using (Vintasoft.Twain.DeviceManager deviceManager = new Vintasoft.Twain.DeviceManager())
        {
            // open the device manager
            deviceManager.Open();

            // get reference to the default device
            Vintasoft.Twain.Device device = deviceManager.DefaultDevice;

            // set scanning settings
            device.TransferMode = Vintasoft.Twain.TransferMode.Memory;
            device.ShowUI = false;

            // open the device
            device.Open();

            // get a reference to the IAutoDiscardBlankPages capability
            Vintasoft.Twain.DeviceCapability autoDiscardBlankPagesCap = device.Capabilities.Find(Vintasoft.Twain.DeviceCapabilityId.IAutoDiscardBlankPages);
            // if discarding of blank pages is not supported
            if (autoDiscardBlankPagesCap == null)
                System.Windows.Forms.MessageBox.Show("Device cannot automatically discard blank pages.");
            else
                // enable discarding of blank pages
                autoDiscardBlankPagesCap.SetValue(true);

            // synchronously acquire image(s) from TWAIN device
            Vintasoft.Twain.AcquireModalState acquireModalState;
            do
            {
                acquireModalState = device.AcquireModal();
                switch (acquireModalState)
                {
                    case Vintasoft.Twain.AcquireModalState.ImageAcquired:
                        // add the acquired image to a TIFF file
                        device.AcquiredImage.Save(@"d:\test.tif");

                        // dispose the acquired image
                        device.AcquiredImage.Dispose();
                        break;

                    case Vintasoft.Twain.AcquireModalState.ScanCompleted:
                        // output current state
                        System.Console.WriteLine("Scan completed.");
                        break;

                    case Vintasoft.Twain.AcquireModalState.ScanCanceled:
                        // output current state
                        System.Console.WriteLine("Scan canceled.");
                        break;

                    case Vintasoft.Twain.AcquireModalState.ScanFailed:
                        // output current state
                        System.Console.WriteLine(string.Format("Scan failed: {0}", device.ErrorString));
                        break;
                }
            }
            while (acquireModalState != Vintasoft.Twain.AcquireModalState.None);

            // close the device
            device.Close();

            // close the device manager
            deviceManager.Close();
        }
    }
    catch (Vintasoft.Twain.TwainException ex)
    {
        System.Console.WriteLine("Error: " + ex.Message);
    }

    System.Console.ReadLine();
}
''' <summary>
''' Synchronously acquires images from TWAIN device and skips blank pages using TWAIN capability.
''' </summary>
Public Sub SynchronouslyAcquireImagesFromTwainDeviceAndSkipBlankPagesUsingTwainCapability()
    Try
        Using deviceManager As New Vintasoft.Twain.DeviceManager()
            ' open the device manager
            deviceManager.Open()

            ' get reference to the default device
            Dim device As Vintasoft.Twain.Device = deviceManager.DefaultDevice

            ' set scanning settings
            device.TransferMode = Vintasoft.Twain.TransferMode.Memory
            device.ShowUI = False

            ' open the device
            device.Open()

            ' get a reference to the IAutoDiscardBlankPages capability
            Dim autoDiscardBlankPagesCap As Vintasoft.Twain.DeviceCapability = device.Capabilities.Find(Vintasoft.Twain.DeviceCapabilityId.IAutoDiscardBlankPages)
            ' if discarding of blank pages is not supported
            If autoDiscardBlankPagesCap Is Nothing Then
                System.Windows.Forms.MessageBox.Show("Device cannot automatically discard blank pages.")
            Else
                ' enable discarding of blank pages
                autoDiscardBlankPagesCap.SetValue(True)
            End If

            ' synchronously acquire image(s) from TWAIN device
            Dim acquireModalState As Vintasoft.Twain.AcquireModalState
            Do
                acquireModalState = device.AcquireModal()
                Select Case acquireModalState
                    Case Vintasoft.Twain.AcquireModalState.ImageAcquired
                        ' add the acquired image to a TIFF file
                        device.AcquiredImage.Save("d:\test.tif")

                        ' dispose the acquired image
                        device.AcquiredImage.Dispose()
                        Exit Select

                    Case Vintasoft.Twain.AcquireModalState.ScanCompleted
                        ' output current state
                        System.Console.WriteLine("Scan completed.")
                        Exit Select

                    Case Vintasoft.Twain.AcquireModalState.ScanCanceled
                        ' output current state
                        System.Console.WriteLine("Scan canceled.")
                        Exit Select

                    Case Vintasoft.Twain.AcquireModalState.ScanFailed
                        ' output current state
                        System.Console.WriteLine(String.Format("Scan failed: {0}", device.ErrorString))
                        Exit Select
                End Select
            Loop While acquireModalState <> Vintasoft.Twain.AcquireModalState.None

            ' close the device
            device.Close()

            ' close the device manager
            deviceManager.Close()
        End Using
    Catch ex As Vintasoft.Twain.TwainException
        System.Console.WriteLine("Error: " + ex.Message)
    End Try

    System.Console.ReadLine()
End Sub


Advantages of this technique:
Disadvantages of this technique:


2. Skipping of blank pages using the library (SDK) features

The algorithm of this technique is quite simple. TWAIN image scanner sends to the library all images of acquired pages and the library checks if the image is blank using AcquiredImage.IsBlank method.

Here is an example that demonstrates how to use IsBlank method for skipping blank pages during TWAIN image scanning:
/// <summary>
/// Synchronously acquires images from TWAIN device and skips blank pages using AcquiredImage.IsBlank method.
/// </summary>
public void SynchronouslyAcquireImagesFromTwainDeviceAndSkipBlankPagesUsingIsBlankMethod()
{
    try
    {
        using (Vintasoft.Twain.DeviceManager deviceManager = new Vintasoft.Twain.DeviceManager())
        {
            // open the device manager
            deviceManager.Open();

            // get reference to the default device
            Vintasoft.Twain.Device device = deviceManager.DefaultDevice;

            // set scanning settings
            device.TransferMode = Vintasoft.Twain.TransferMode.Memory;
            device.ShowUI = false;

            // open the device
            device.Open();

            // synchronously acquire image(s) from TWAIN device
            Vintasoft.Twain.AcquireModalState acquireModalState;
            do
            {
                acquireModalState = device.AcquireModal();
                switch (acquireModalState)
                {
                    case Vintasoft.Twain.AcquireModalState.ImageAcquired:
                        // if acquired image is not blank
                        if (!device.AcquiredImage.IsBlank(0.01f))
                            // add the acquired image to a TIFF file
                            device.AcquiredImage.Save(@"d:\test.tif");

                        // dispose the acquired image
                        device.AcquiredImage.Dispose();
                        break;

                    case Vintasoft.Twain.AcquireModalState.ScanCompleted:
                        // output current state
                        System.Console.WriteLine("Scan completed.");
                        break;

                    case Vintasoft.Twain.AcquireModalState.ScanCanceled:
                        // output current state
                        System.Console.WriteLine("Scan canceled.");
                        break;

                    case Vintasoft.Twain.AcquireModalState.ScanFailed:
                        // output current state
                        System.Console.WriteLine(string.Format("Scan failed: {0}", device.ErrorString));
                        break;
                }
            }
            while (acquireModalState != Vintasoft.Twain.AcquireModalState.None);

            // close the device
            device.Close();

            // close the device manager
            deviceManager.Close();
        }
    }
    catch (Vintasoft.Twain.TwainException ex)
    {
        System.Console.WriteLine("Error: " + ex.Message);
    }

    System.Console.ReadLine();
}
''' <summary>
''' Synchronously acquires images from TWAIN device and skips blank pages using AcquiredImage.IsBlank method.
''' </summary>
Public Sub SynchronouslyAcquireImagesFromTwainDeviceAndSkipBlankPagesUsingIsBlankMethod()
    Try
        Using deviceManager As New Vintasoft.Twain.DeviceManager()
            ' open the device manager
            deviceManager.Open()

            ' get reference to the default device
            Dim device As Vintasoft.Twain.Device = deviceManager.DefaultDevice

            ' set scanning settings
            device.TransferMode = Vintasoft.Twain.TransferMode.Memory
            device.ShowUI = False

            ' open the device
            device.Open()

            ' synchronously acquire image(s) from TWAIN device
            Dim acquireModalState As Vintasoft.Twain.AcquireModalState
            Do
                acquireModalState = device.AcquireModal()
                Select Case acquireModalState
                    Case Vintasoft.Twain.AcquireModalState.ImageAcquired
                        ' if acquired image is not blank
                        If Not device.AcquiredImage.IsBlank(0.01F) Then
                            ' add the acquired image to a TIFF file
                            device.AcquiredImage.Save("d:\test.tif")
                        End If

                        ' dispose the acquired image
                        device.AcquiredImage.Dispose()
                        Exit Select

                    Case Vintasoft.Twain.AcquireModalState.ScanCompleted
                        ' output current state
                        System.Console.WriteLine("Scan completed.")
                        Exit Select

                    Case Vintasoft.Twain.AcquireModalState.ScanCanceled
                        ' output current state
                        System.Console.WriteLine("Scan canceled.")
                        Exit Select

                    Case Vintasoft.Twain.AcquireModalState.ScanFailed
                        ' output current state
                        System.Console.WriteLine(String.Format("Scan failed: {0}", device.ErrorString))
                        Exit Select
                End Select
            Loop While acquireModalState <> Vintasoft.Twain.AcquireModalState.None

            ' close the device
            device.Close()

            ' close the device manager
            deviceManager.Close()
        End Using
    Catch ex As Vintasoft.Twain.TwainException
        System.Console.WriteLine("Error: " + ex.Message)
    End Try

    System.Console.ReadLine()
End Sub


Advantages of this technique:
Disadvantages of this technique: