I've been going nuts trying to scan from the document feeder on my Canon imageClass MF4150. Everything worked as expected from the flatbed, no dice trying to persuade the ADF to kick in. I found some sample code but it was oriented towards devices that can detect when a document is available in the feeder. Evidently my Canon doesn't expose this and so needs to be told the source to use.
The way to do this is to set the WIA_DPS_DOCUMENT_HANDLING_SELECT property to FEEDER. You then read WIA_DPS_DOCUMENT_HANDLING_STATUS to check that it's in the right mode and initiate the scan. This did not work for toffee.
After much experimentation I discovered a solution. I had been setting device properties and then setting item properties before requesting the scan. Switching the order - item then device - made everything work.
Here's the function to scan one page:
A few notes — XImage is a type from PDFSharp. I wrote this as part of a PDF scanner that I'll post next so the scanned images are saved and then loaded into an XImage for rendering to the PDF document. The magic numbers come from WiaDef.h in the Platform SDK. If the ADF is out of pages this method sets the return image to null and eats the exception. This is because the function is called repeatedly to scan in pages until the ADF is empty if _adf is true (otherwise it grabs one image from the flatbed).
If you've been banging your head against a wall trying to get WIA to work with a document feeder I hope this helps.
(grin) Thanks Rob. I've been reading a bunch about WIA the last couple days and I just went ahead and implemented those yesterday afternoon as Extension methods on the Properties object and also another helpful one on the COMException object. Check 'em out:
This code doesn't work for me. It stalls after checking the handling status. It acts like it is not setting the device handling to the feeder. Is there an issue with specific devices not being able to be set from WIA?
I took out the check for status and it throws a value out of expected range exception when it calls ShowTransfer. If I don't try to set the prop, it automatically goes to the flatbed. This is driving me insane.
Great post ... I looked all over the place for a decent WIA example example and was about to give up when I uncovered this ! I was amazed that everything was pointing to a 10 yr article on codeproject for some crap twain example. I'm gonna post this link to some of the threads on stack overflow, hopefully will save some people some time ... Thank you, much ...
by David Wetherell
on Wednesday, March 23 2011
Looks good, but when I ran it with an HP OfficeJet Pro 8500A Plus, the ADF pulled two pages (instead of one), but the code only spit out a single JPG.
Did you get a device progress dialog, and did this appear once or twice? Are the DPI/Width/Height set correctly for the paper type that you're scanning? Not sure what else to suggest other than maybe checking to see if updated firmware or drivers exist for your device (could be a device bug).
Do you know where it's failing? Any exception or error code? Hard to troubleshoot without a specific issue. There are a few earlier posts about a Brother device in the thread, could it be the same issue?
Reboot computer in C# / .NET — .NET doesn’t support rebooting, logging off or shutting down your computer though a managed API. Searching for the best way to do this brings up three options: WMI, shutdown.exe and ExitWindowsEx. I regard WMI as the last resort of the desperate. Weakly...
Using the Azure Monitor REST API from Google Apps Script — This post describes how to get metrics (in this case average response time) from an Azure App Service into a Google Sheet. I’m doing this so I can go from the sheet to a Data Studio dashboard. I already have a report in Data...