Как создать быстрое дуплексное сканирование с помощью WIA C #? - PullRequest
0 голосов
/ 22 октября 2019

Я новичок в WIA. И меня попросили сделать сканирование службы сканирования быстрее и дуплекс. Моя текущая служба сканирует одну страницу, затем помещает ее в pdf и т. Д., Пока не будет менее 20 страниц (этот номер - просто костыль, использовавшийся до меня, будет рад, если кто-то объяснит, как получить «если там есть бумага»)переменная). Я начал копать и нашел документы на MSDN, описывающие свойства, и после того, как нашел этот пост, описывающий дуплексный саннинг, но с таинственным 5 в наборе. После того, как я нашел это и выяснил, что мне нужно, чтобы WIA_DPS_DOCUMENT_HANDLING_SELECT установить в 0x205 (FEEDER + DUPLEX + AUTO_ADVANCE). Поэтому я попытался настроить их следующим образом:

    private static void SetProperty(Property property, int value)
    {
        IProperty x = (IProperty)property;
        Object val = value;
        x.set_Value(ref val);
    }

... некоторый код ...

    foreach (Property prop in device.Properties)
    {
        //LOGGER.Warn(prop.Name);
        //LOGGER.Warn(prop.PropertyID);
        switch ((Int32)prop.PropertyID)
        {
           // Document Handling Select
           case 3088:
              SetProperty(prop, 517);
              break;
           // Pages
           case 3096:
              SetProperty(prop, 1);
              break;
        }
    }

И у меня это не сработало. .. Он просто застрял на настройке ... Может кто-нибудь объяснить, как настроить реквизиты AUTO_ADVANCE и DUPLEX? Или, может быть, «сделать сканирование быстрее и дуплекс» нужно нечто большее, чем просто AUTO_ADVANCE и DUPLEX, и мое восприятие о них неверно? Или мне следует рассмотреть строку «ISIS / TWAIN (Windows XP / Vista / 7/8 / 8.1 / 10)» в описании сканирования и использовать другие библиотеки?
(Window 10, Canon DR-M160 ||, DR-M160& DR-M160II Драйвер для Windows)

, а также текущая функция выборки:

    public List<ImageFile> FetchImageList()
    {
        List<ImageFile> imageList = new List<ImageFile>();
        //bool hasMorePages = true;
        int testcount = 0;
        while (testcount >= 0)
        {
            testcount--;
            WIA.Device device = FindDevice(_deviceId);
            if (device == null)
            {
                LOGGER.Warn("Scanner device not found");
                return null;
            }
            // get item
            WIA.Item scanItem = device.Items[1] as WIA.Item;
            LOGGER.Debug($"ScanItem: {scanItem.ItemID}");

            try
            {
                foreach (Property prop in device.Properties)
                {
                    //LOGGER.Warn(prop.Name);
                    //LOGGER.Warn(prop.PropertyID);
                    switch ((Int32)prop.PropertyID)
                    {
                        // Document Handling Select
                        case 3088:
                            LOGGER.Warn("here");
                            SetProperty(prop, 517);
                            LOGGER.Warn("here");
                            break;
                        // Pages
                        case 3096:
                            SetProperty(prop, 1);
                            break;
                    }
                }
                // scan image
                WIA.ICommonDialog wiaCommonDialog = new WIA.CommonDialog();
                WIA.ImageFile image = (WIA.ImageFile)scanItem.Transfer(WIA.FormatID.wiaFormatPNG);
                imageList.Add(image);
                LOGGER.Warn("Front");

                //get back side
                image = (WIA.ImageFile)scanItem.Transfer(WIA.FormatID.wiaFormatPNG);
                imageList.Add(image);
                LOGGER.Warn("Back");
            }
            catch (Exception e)
            {
                throw (e);
            }
        }
        return imageList;
    }

1 Ответ

1 голос
/ 22 октября 2019

Хорошо ... Я попытался выполнить дуплексное сканирование без AUTO_ADVANCE и получил HRESULT: 0x8000FFFF (E_UNEXPECTED) при переводе вызова. Согласно этому посту (даже если это было в Windows 7), я думаю, что нет способа решить эту проблему для меня с помощью WIA, все еще надеюсь, что будут другие предложения ...

Решенная проблема Я использовал saraff.twain, и он работал для меня: - git page: https://github.com/saraff-9EB1047A4BEB4cef8506B29BA325BD5A/Saraff.Twain.NET хорошая библиотека с большой страницей вики (также есть аналогичная библиотека для .net 4.6.1)

...