You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 05:39:53