when using ADF it scans also flatbed and adds one empty image how to solve this issue, scanning takes time?

-1
 '''
class WIA_DPS_DOCUMENT_HANDLING_SELECT
        {
            public const uint FEEDER = 0x00000001;
            public const uint FLATBED = 0x00000002;
        }
        class WIA_DPS_DOCUMENT_HANDLING_STATUS
        {
            public const uint FEED_READY = 0x00000001;
        }
        class WIA_PROPERTIES
        {
            public const uint WIA_RESERVED_FOR_NEW_PROPS = 1024;
            public const uint WIA_DIP_FIRST = 2;
            public const uint WIA_DPA_FIRST = WIA_DIP_FIRST + WIA_RESERVED_FOR_NEW_PROPS;
            public const uint WIA_DPC_FIRST = WIA_DPA_FIRST + WIA_RESERVED_FOR_NEW_PROPS;
            //
            // Scanner only device properties (DPS)
            //
            public const uint WIA_DPS_FIRST = WIA_DPC_FIRST + WIA_RESERVED_FOR_NEW_PROPS;
            public const uint WIA_DPS_DOCUMENT_HANDLING_STATUS = WIA_DPS_FIRST + 13;
            public const uint WIA_DPS_DOCUMENT_HANDLING_SELECT = WIA_DPS_FIRST + 14;
        }
'''

how could i stop scanning from flatbed when ADF has pages in it also the hasMorePages addds unwanted one scanning process
after finishing papers at ADF :

'''
public static List<Image> Scan()
                {
                    WIA.ICommonDialog dialog = new WIA.CommonDialog();
                    WIA.Device device = dialog.ShowSelectDevice(WIA.WiaDeviceType.UnspecifiedDeviceType, true, false);
                    if (device != null)
                    {
                        return Scan(device.DeviceID);
                    }
                    else
                    {
                        throw new Exception("You must select a device for scanning.");
                    }
                }
                /// <summary>
                /// Use scanner to scan an image (scanner is selected by its unique id).
                /// </summary>
                /// <param name="scannerName"></param>
                /// <returns>Scanned images.</returns>
'''

the output is a list of images i put that list into pdf file then store it in database:

'''
                public static List<Image> Scan(string scannerId)
                {
                    List<Image> images = new List<Image>();
        
                    bool hasMorePages = true;
                    while (hasMorePages)
                    {
                        // select the correct scanner using the provided scannerId parameter
                        WIA.DeviceManager manager = new WIA.DeviceManager();
                        WIA.Device device = null;
                        foreach (WIA.DeviceInfo info in manager.DeviceInfos)
                        {
                            if (info.DeviceID == scannerId)
                            {
                                // connect to scanner
                                device = info.Connect();
                                break;
                            }
                        }
                        // device was not found
                        if (device == null)
                        {
                            // enumerate available devices
                            string availableDevices = "";
                            foreach (WIA.DeviceInfo info in manager.DeviceInfos)
                            {
                                availableDevices += info.DeviceID + "n";
                            }
        
                            // show error with available devices
                            throw new Exception("The device with provided ID could not be found. Available Devices:n" + availableDevices);
                        }
                        WIA.Item item = device.Items[1] as WIA.Item;
                        try
                        {
                            // scan image
                            WIA.ICommonDialog wiaCommonDialog = new WIA.CommonDialog();
                            WIA.ImageFile image = (WIA.ImageFile)wiaCommonDialog.ShowTransfer(item, wiaFormatBMP, true);
        
                            // save to temp file
                            string fileName = Path.GetTempFileName();
                            File.Delete(fileName);
                            image.SaveFile(fileName);
                            image = null;
        
                            // add file to output list
                            images.Add(Image.FromFile(fileName));
                        }
                        catch (Exception exc)
                        {
                            System.Windows.MessageBox.Show(exc.ToString());
                            throw exc;
                        }
                        finally
                        {
                            item = null;
                            //determine if there are any more pages waiting
                            WIA.Property documentHandlingSelect = null;
                            WIA.Property documentHandlingStatus = null;
                            foreach (WIA.Property prop in device.Properties)
                            {
                                if (prop.PropertyID == WIA_PROPERTIES.WIA_DPS_DOCUMENT_HANDLING_SELECT)
                                    documentHandlingSelect = prop;
        
                                if (prop.PropertyID == WIA_PROPERTIES.WIA_DPS_DOCUMENT_HANDLING_STATUS)
                                    documentHandlingStatus = prop;
                            }
                            // assume there are no more pages
                            hasMorePages = false;
                            // may not exist on flatbed scanner but required for feeder
                            if (documentHandlingSelect != null)
                            {
                                // check for document feeder
                                if ((Convert.ToUInt32(documentHandlingSelect.get_Value()) & WIA_DPS_DOCUMENT_HANDLING_SELECT.FEEDER) != 0)
                                {
                                    hasMorePages = ((Convert.ToUInt32(documentHandlingStatus.get_Value()) & WIA_DPS_DOCUMENT_HANDLING_STATUS.FEED_READY) != 0);
                                }
                            }
                        }
                    }
                    return images;  
                }
'''

any modification to this code that can solve the issue is appreciated, posting a question here is the hardest thing to me cause i am new here.

c#
wpf
image
documentation
wia
asked on Stack Overflow Nov 14, 2020 by Rafeeq alfaqih

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0