使用WIA 2.0 DLL实现柯达S2060w双面扫描时无法获取第二页求助
使用WIA实现柯达S2060w双面扫描(无需额外工具)
核心问题分析
你之前的失败原因在于:
- 强制设置
PAGES为1,限制仅扫描单页,导致双面的第二页被忽略 - 两次调用
Transfer/ShowTransfer时,设备在单次进纸完成双面扫描后判定进纸器已无纸,触发0x80210003错误
正确实现步骤与代码
1. 配置扫描属性(关键顺序)
先设置文档源为自动进纸器,再开启双面模式,最后设置自动扫描所有页面:
// 1. 设置文档源为自动进纸器(WIA_DPS_DOCUMENT_HANDLING_SELECT = 2) SetWIAProperty(scanner.Properties, "3087", 2); // 2. 设置双面扫描模式(柯达S2060w支持水平翻转,对应值5;垂直翻转用4) SetWIAProperty(scanner.Properties, "3088", 5); // 3. 设置自动扫描所有页面(0表示设备自动检测所有可用页面,包括双面正反) SetWIAProperty(scanner.Properties, "3096", 0);
2. 一次性获取所有扫描页面
通过ImageFile.Next属性遍历所有页面(包括双面的正反页),无需多次调用Transfer/ShowTransfer:
List<ImageFile> scannedPages = new List<ImageFile>(); CommonDialog cd = new CommonDialog(); // 首次获取第一页 ImageFile currentPage = (ImageFile)cd.ShowTransfer(scanner, formatId, false); scannedPages.Add(currentPage); // 遍历剩余页面(包括双面的第二页) while (currentPage.Next != null) { currentPage = currentPage.Next; scannedPages.Add(currentPage); } // 处理所有扫描页面(示例:保存到文件) for (int i = 0; i < scannedPages.Count; i++) { scannedPages[i].Save($"Page_{i+1}.jpg"); }
3. 复用你的SetWIAProperty方法(保持不变)
static void SetWIAProperty(IProperties properties, object propertyName, object propertyValue) { if (properties.Exists(propertyName)) { IProperty property = properties.get_Item(ref propertyName); if (property != null && !property.IsReadOnly && property.get_Value() != propertyValue) property.set_Value(ref propertyValue); } }
关键说明
- 柯达S2060w的双面模式值:
5对应水平翻转(适合横向文档),4对应垂直翻转(适合纵向文档),可根据需求调整 - 必须将
PAGES设为0,让设备自动识别并扫描双面的所有页面,而非手动指定单页 - 单次
ShowTransfer调用即可触发完整的双面扫描,后续通过Next属性获取第二页,避免重复调用导致的无纸错误
内容的提问来源于stack exchange,提问作者Unseen
相关产品推荐
相关产品推荐

