我有一台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_AHEAD或WIA_DPS_SCAN_AHEAD_PAGES对应的属性,但这是有道理的,因为根据文档,此属性是可选的。
我尝试使用TWAIN(通过NTwain库,我强烈推荐)同样的问题。
答案 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