无法读取通过ADF扫描的第二页

时间:2014-12-14 19:25:30

标签: scanning twain wia

我有一台Brother多功能网络打印机/扫描仪/传真机(型号MFC-9140CDN)。我正在尝试使用以下代码与WIA,检索使用文档进纸器扫描的项目:

const int FEEDER = 1;

var manager=new DeviceManager();
var deviceInfo=manager.DeviceInfos.Cast<DeviceInfo>().First();
var device=deviceInfo.Connect();
device.Properties["Pages"].set_Value(1);
device.Properties["Document Handling Select"].set_Value(1);

var morePages=true;
var counter=0;
while (morePages) {
    counter++;
    var item=device.Items[1];
    item.Properties["Bits Per Pixel"].set_Value(1);
    item.Properties["Horizontal Resolution"].set_Value(300);
    item.Properties["Vertical Resolution"].set_Value(300);

    var img=(WIA.ImageFile)item.Transfer();
    var path=String.Format(@"C:\Users\user1\Documents\test_{0}.tiff",counter);
    img.SaveFile(path);

    var status=(int)device.Properties["Document Handling Status"].get_Value();
    morePages = (status & FEEDER) > 0;
}

首次到达Transfer方法时,所有页面都会通过文档进纸器。第一页将img.SaveFile保存到传入路径,但所有后续页面都不可用 - device.Items.Count为1,尝试device.Items[2]会引发异常。

在下一次迭代中,调用Transfer会引发异常 - 可以理解,因为现在没有页面中的页面。

如何将已扫描的后续图像送入进纸器?

(N.B。迭代所有设备属性,还有一个额外的未命名属性,其id为38922.我还没有找到对此属性的任何引用。)

更新

我无法在设备上找到与WIA_IPS_SCAN_AHEADWIA_DPS_SCAN_AHEAD_PAGES对应的属性,但这是有道理的,因为根据文档,此属性是可选的。

我尝试使用TWAIN(通过NTwain库,我强烈推荐)同样的问题。

3 个答案:

答案 0 :(得分:2)

我最近遇到了与HP MFC类似的错误。

似乎驾驶员正在改变房产。我之前正在开发的软件的开发人员每次都在for循环中不停地重新启动驱动程序。

就我而言,该物业属于媒体类型&#39;被设置为FLATBED(0x02)即使我正在进行多页扫描并且需要它是NEXT_PAGE(0x80)。

我发现这种方式的方法是在扫描之前(设备和项目属性)存储每个属性,并在扫描第一页后再次存储。然后,我的应用程序打印出任何已更改的属性,并能够识别我的问题。

答案 1 :(得分:1)

这是一个联网扫描程序,我正在使用WSD驱动程序。

安装制造商的驱动程序后,行为符合预期 - 一页通过ADF,然后控制权返回给程序。

(即使是现在,当我使用WIA的CommonDialog.ShowSelectDevice方法时,扫描仪可以使用两次,一次使用Windows驱动程序,一次使用Brother驱动程序;当我选择WSD驱动程序时,我仍然可以看到问题。)

答案 2 :(得分:-1)

您应该在&#39;内部实例化和设置设备。环。参见:

const int FEEDER = 1;

var morePages=true;
var counter=0;
while (morePages) {
    counter++;

    var manager=new DeviceManager();
    var deviceInfo=manager.DeviceInfos.Cast<DeviceInfo>().First();
    var device=deviceInfo.Connect();

    //device.Properties["Pages"].set_Value(1);
    device.Properties["Document Handling Select"].set_Value(1);

    var item=device.Items[1];
    item.Properties["Bits Per Pixel"].set_Value(1);
    item.Properties["Horizontal Resolution"].set_Value(300);
    item.Properties["Vertical Resolution"].set_Value(300);

    var img=(WIA.ImageFile)item.Transfer();
    var path=String.Format(@"C:\Users\user1\Documents\test_{0}.tiff",counter);
    img.SaveFile(path);

    var status=(int)device.Properties["Document Handling Status"].get_Value();
    morePages = (status & FEEDER) > 0;
}

我看到了这个免费项目,我相信它也可以帮助你:adfwia.codeplex.com