使用 WIA 2.0 和 C# 扫描多页时跳过的页面
Posted
技术标签:
【中文标题】使用 WIA 2.0 和 C# 扫描多页时跳过的页面【英文标题】:Pages skipped when scanning multiple pages using WIA 2.0 and C# 【发布时间】:2018-08-06 09:36:15 【问题描述】:我有一个 .NET 应用程序,它从文档进纸器扫描图像,但扫描时页面被跳过。
我目前使用的扫描仪是东芝 e-STUDIO2550C 系列,通过 LAN 连接到我的 PC。我在 Windows 10 64 位上使用 .NET 4.6.1。该问题也出现在另一台运行 Windows Server 2012 R2 的计算机上。我的代码如下:
public const int WIA_DPS_DOCUMENT_HANDLING_SELECT = 3088;
public const int FEEDER = 1;
public const uint WIA_ERROR_PAPER_EMPTY = 0x80210003;
private static void SetProperty(this IProperties properties, int id, object value)
var property = properties.Cast<Property>().FirstOrDefault(p => p.PropertyID == id);
property.set_Value(ref value);
private static void Scan(string deviceId)
var deviceManager = new DeviceManager();
var deviceInfo = deviceManager.DeviceInfos.Cast<DeviceInfo>().Single(d => d.DeviceID == deviceId);
var device = deviceInfo.Connect();
device.Properties.SetProperty(WIA_DPS_DOCUMENT_HANDLING_SELECT, FEEDER);
var scannerItem = device.Items[1];
var page = 1;
do
try
// When calling Transfer the two paper are fed in the ADF but only one image is retuned
var image = (ImageFile)scannerItem.Transfer(FormatID.wiaFormatJPEG);
image.SaveFile($"imagepage.jpg");
page++;
catch (COMException ex)
if ((uint)ex.HResult != WIA_ERROR_PAPER_EMPTY)
break;
throw;
while (true);
调用scannerItem.Transfer 方法时,扫描仪进纸器将扫描2 个文档,但只返回一个图像项。然后循环继续,有一个暂停,然后当再次调用scannerItem.Transfer 时,进纸器又扫描了2 页,但再次只返回一个图像。因此,如果我放置 10 页要扫描,则只保存第 1、3、5、7 和 9 页。其他第 2、4、6、8 和 10 页被送入自动进纸器,但不保存。
当我尝试在同一台计算机和同一台扫描仪上使用“Windows 传真和扫描”应用程序时,进纸器会非常快速地扫描所有 10 页,然后传输它们需要时间,但它们都被保存了。所以我认为这不是扫描仪本身或驱动程序的问题。
我的代码在 ASP.NET 应用程序中运行,因此我无法使用显示对话框或 UI 的方法。但是,我尝试了使用 CommonDialog.ShowAquireImage 和 CommonDialog.ShowTransfer 的控制台应用程序,但得到了相同的结果。
32 位和 64 位版本的 .NET Runtime 和 WIA 2.0 也会出现此问题。
【问题讨论】:
您找到解决方案了吗?我有同样的问题 不,我没有找到任何解决方案。 【参考方案1】:看这里。这位作者似乎找到了一个可行的解决方案。我还没有尝试过,但是有一个项目我可能很快就会使用它。 https://archive.codeplex.com/?p=adfwia
private void button2_Click(object sender, EventArgs e)
ADFScan scanner = new ADFScan();
scanner.Scanning += new EventHandler<WiaImageEventArgs>(_scanner_Scanning);
scanner.ScanComplete += new EventHandler(_scanner_ScanComplete);
ScanColor selectedColor = ScanColor.BlackWhite;
int dpi = 300;//some scanners have a problem if you set a lower DPI
scanner.BeginScan(selectedColor,dpi );
//ADFScan will now raise a Scanning event for EACH document scanned.
//then scan complete once there are no more documents to scan.
void _scanner_ScanComplete(object sender, EventArgs e)
MessageBox.Show("Scan Complete");
void _scanner_Scanning(object sender, WiaImageEventArgs e)
//e.ScannedImage is a System.Drawing.Image
e.ScannedImage.Save(filename, ImageFormat.Jpeg);//FILES ARE RETURNED AS BITMAPS
【讨论】:
虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。以上是关于使用 WIA 2.0 和 C# 扫描多页时跳过的页面的主要内容,如果未能解决你的问题,请参考以下文章