Possiedo una stampante/scanner/fax di rete/fax multifunzione Brother (modello MFC-9140CDN). Sto cercando di utilizzare il seguente codice con WIA, per recuperare elementi acquisiti con l'alimentatore di documenti:Impossibile leggere la seconda pagina scansionata tramite ADF
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;
}
Quando il metodo Transfer
viene raggiunto per la prima volta, tutte le pagine attraverso l'alimentatore documenti. La prima pagina viene salvata con img.SaveFile
nel percorso passato, ma tutte le pagine successive non sono disponibili - device.Items.Count
è 1 e il tentativo di device.Items[2]
genera un'eccezione.
Nella successiva iterazione, chiamare Transfer
genera un'eccezione, comprensibilmente, perché ora non ci sono pagine nell'alimentatore.
Come posso ottenere le immagini successive che sono state scansionate nell'alimentatore?
(NB iterazione attraverso tutte le proprietà del dispositivo, v'è una proprietà senza nome supplementare con l'id di 38922. Non sono stato in grado di trovare alcun riferimento a questa proprietà.)
Aggiornamento
Non sono riuscito a trovare una proprietà sul dispositivo corrispondente a WIA_IPS_SCAN_AHEAD o WIA_DPS_SCAN_AHEAD_PAGES, ma ciò ha senso poiché questa proprietà è facoltativa in base alla documentazione.
Ho provato a utilizzare TWAIN (tramite la libreria NTwain, che consiglio vivamente) con lo stesso problema.
Speculazione pura: il TIFF supporta più pagine, la seconda pagina potrebbe essere contenuta in quel singolo file? Magari dai un'occhiata con Irfanview. Anche se questo è normalmente C# 1 è .Items [0] e 2 è .Items [1]. – WhoIsRich
@WhoIsRich (1) Le pagine aggiuntive non sono contenute nel file TIFF. Anche questa è impossibile, poiché il controllo viene restituito alla riga successiva del codice prima che lo scanner abbia terminato la scansione delle pagine successive. (2) Il primo elemento è 'Items [0]' è una convenzione .NET, non una convenzione C# - in VB.NET Devo anche scrivere 'Dim l As New List (Of Integer): Dim firstInt = l (0) '. WIA per qualche motivo ha la convenzione alternativa del primo elemento che è '.Items [1]'. –