Fragensteller
Scanning, WIA - keine Rückmeldung neue Seite, macht aus vielen eine Seite

Allgemeine Diskussion
-
Hallo,
habe mit dem unten genanngen Code das Problem, WIA keinen Info darüber ausgibt, dass über den ADF eine neue Seite eingezogen wurde und somit macht der Code aus vielen Seiten nur eine einzige Seite...
Es wird immer nur die zuletzt eingescannte Seite gespeichert.
Habe vieles bereits geoggelt, aber leider bin ich zu diesem Prob. nicht fünfig geworden, so dass ich nicht darum herum komme :) euch zu fragen... Bin mit meinem Latein am Ende und bitte um Hilfe...
Imports WIA Imports System.IO Public Class Form2 Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ADFScan() End Sub Dim DeviceID As String Const wiaFormatBMP As String = "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}" Const wiaFormatPNG As String = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}" Const wiaFormatGIF As String = "{B96B3CB0-0728-11D3-9D7B-0000F81EF32E}" Const wiaFormatJPEG As String = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}" Const wiaFormatTIFF As String = "{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}" Private Class WIA_DPS_DOCUMENT_HANDLING_SELECT Public Const FEEDER As UInteger = &H1 Public Const FLATBED As UInteger = &H2 End Class Private Class WIA_DPS_DOCUMENT_HANDLING_STATUS Public Const FEED_READY As UInteger = &H1 End Class Private Class WIA_PROPERTIES Public Const WIA_RESERVED_FOR_NEW_PROPS As UInteger = 1024 Public Const WIA_DIP_FIRST As UInteger = 2 Public Const WIA_DPA_FIRST As UInteger = WIA_DIP_FIRST + WIA_RESERVED_FOR_NEW_PROPS Public Const WIA_DPC_FIRST As UInteger = WIA_DPA_FIRST + WIA_RESERVED_FOR_NEW_PROPS ' ' Scanner only device properties (DPS) ' Public Const WIA_DPS_FIRST As UInteger = WIA_DPC_FIRST + WIA_RESERVED_FOR_NEW_PROPS Public Const WIA_DPS_DOCUMENT_HANDLING_STATUS As UInteger = WIA_DPS_FIRST + 13 Public Const WIA_DPS_DOCUMENT_HANDLING_SELECT As UInteger = WIA_DPS_FIRST + 14 End Class Private Class WIA_ERRORS Public Const BASE_VAL_WIA_ERROR As UInteger = &H80210000UI Public Const WIA_ERROR_PAPER_EMPTY As UInteger = BASE_VAL_WIA_ERROR + 3 End Class Private Sub ADFScan() 'Choose Scanner Dim class1 As New CommonDialog() Dim d As Device = class1.ShowSelectDevice(WiaDeviceType.UnspecifiedDeviceType, True, False) If d IsNot Nothing Then Me.DeviceID = d.DeviceID Else 'no scanner chosen Return End If Dim WiaCommonDialog As WIA.CommonDialog = New CommonDialog() Dim hasMorePages As Boolean = True Dim x As Integer = 0 Dim numPages As Integer = 0 While hasMorePages 'Create DeviceManager Dim manager As DeviceManager = New DeviceManager() Dim WiaDev As Device = Nothing For Each info As DeviceInfo In manager.DeviceInfos If info.DeviceID = Me.DeviceID Then Dim infoprop As WIA.Properties = Nothing infoprop = info.Properties 'connect to scanner WiaDev = info.Connect() Exit For End If Next 'Start Scan Dim img As WIA.ImageFile = Nothing Dim Item As WIA.Item = TryCast(WiaDev.Items(1), WIA.Item) Try img = DirectCast(WiaCommonDialog.ShowTransfer(Item, wiaFormatJPEG, False), ImageFile) 'Save to file Dim varImageFileName As String = "E:\Pictures\TEST\" & x.ToString() & ".jpg" If File.Exists(varImageFileName) Then 'file exists, delete it File.Delete(varImageFileName) End If img.SaveFile(varImageFileName) numPages += 1 img = Nothing Catch ex As Exception MessageBox.Show("Error: " + ex.Message) Finally Item = Nothing 'determine if there are any more pages waiting Dim documentHandlingSelect As [Property] = Nothing Dim documentHandlingStatus As [Property] = Nothing For Each prop As [Property] In WiaDev.Properties If prop.PropertyID = WIA_PROPERTIES.WIA_DPS_DOCUMENT_HANDLING_SELECT Then documentHandlingSelect = prop End If If prop.PropertyID = WIA_PROPERTIES.WIA_DPS_DOCUMENT_HANDLING_STATUS Then documentHandlingStatus = prop End If Next hasMorePages = False 'assume there are no more pages If documentHandlingSelect IsNot Nothing Then 'may not exist on flatbed scanner but required for feeder 'check for document feeder If (Convert.ToUInt32(documentHandlingSelect.Value()) And WIA_DPS_DOCUMENT_HANDLING_SELECT.FEEDER) <> 0 Then hasMorePages = ((Convert.ToUInt32(documentHandlingStatus.get_Value()) And WIA_DPS_DOCUMENT_HANDLING_STATUS.FEED_READY) <> 0) End If End If x += 1 End Try End While End Sub End Class
- Typ geändert Robert BreitenhoferModerator Freitag, 18. Februar 2011 16:15 Keine Rückmeldung des Fragenstellender
Alle Antworten
-
Hallo,
ich habe mich für mein Programm (Scan4Office ) mit einem (alledings kostenpflichtigen Tool) geholfen das ein Control "Scanner" besitzt. Dieses basiert auf der AxSCANNERLIB.AXScanner und bietet das EndScan-Event.
Wenn ich hier ADF aktiviere werden alle Seiten gescannt und zum Schluss zu einer (allerdings kompletten Vorlage mit X Seiten) zusammengefasst.
Ich weiß nicht wie du das handelst aber gundsätzlich sollte dein WIA oder TWIN nach dem Scannen eine Rückmeldung geben mit der du dann was anstellen kannst.Deinen Code habe ich nur mal überflogen, habe dabei aber festgestellt, dass Du
Dim hasMorePages As Boolean = True
gesetzt hast. Setze doch mal den Wert auf false, erzeuge für jeden Scan eine eigene ggf. temporäre Datei und füge die später wieder zusammen. Eine spontane Idee wäre dies über einen PDF-Printer als "Druckauftrag" zusammenzusetzen.
.. nur mal so eine Idee.
Liebe Grüße Stefan | Cheers Stefan I'm using VB 2008 Express- Bearbeitet Robert BreitenhoferModerator Freitag, 18. Februar 2011 16:14 Formatierung