Produkt-Info


Überschau

Lizenzierung

FAQ

Forums

Beispiele

History


Download

Testversion

On-line manual

Referenzen


We purchased the Vintasoft ActiveX Control a little over a year ago and it has performed flawlessly. I wanted to say thank you. We originally bought the control to integrate it with an MS Access database to track checkouts. We used the control to scan driver's license images and photos. Things are working great.

Rich Hadden
Wright State University


VintaSoftTwain ActiveX Control - Häufig gestellte Fragen

Allgemeine Fragen:

 

Distribution:

 

Deployment:

 

Web Installation:

 

Programmierung:

 

Datenbanken:



 

Wofür kann ich die VintaSoftTwain ActiveX Komponente einsetzen?

Die Komponente verwaltet die Arbeit der Scanner, der Digitalkameras und anderer Geräte, die den TWAIN Standard unterstützen.

 


 

In welchen Programmiersprachen kann ich die ActiveX Komponente nutzen?

Die Lizenz für einen Softwareentwickler und Site-Lizenz gelten für:

  • MS Visual Studio 6.0 (VB, VC++, VFoxpro)
  • Borland Delphi, Borland C++ Builder
  • MS .NET Studio (VB.NET, C#.NET, C++.NET)
  • MS Office (Excel, Word, Access)
  • beliebigen Programmiersprachen und Programme, die die Arbeit mit ActiveX unterstützen.

Die Server-Lizenz gilt außerdem für:

  • Internet Explorer 5.0 und höher : ASP.NET, PHP, JavaScript, VBScript, etc
  • Mozilla Firefox 3.0 und höher mit IE Tab Plug-in : ASP.NET, PHP, JavaScript, VBScript, etc
  • beliebige Programmiersprachen, die sich auf HTML stützen.

 

 

Welche Beschränkungen hat die unregistrierte Version der Komponente?

Unregistrierte Version hat die folgenden Beschränkungen:

  • den Dialog "Über das Programm"
  • jedes Bild kann zu einer Lokalfestplatte gespeichert werden oder zu einem Server geladen werden wie eine BMP-Datei
  • Farbenbild kann nicht zu einer Lokalfestplatte gespeichert werden oder zu einem Server geladen werden wie JPEG- oder TIFF-Datei (nur schwarz-weißes und grau Bild)

Alle diese Beschränkungen sind in der registrierten Version der Komponente gelöscht.

 

 

Ich habe eine Frage oder Problem. Was kann ich tun?

Die Antworten auf die meisten Fragen stehen bestimmt in der Dokumentation zur Komponente oder in den FAQ. Wenn Sie nicht fündig wurden, dann schreiben Sie bitte an den technischen Support.

 


 

Kann ich diese ActiveX zusammen mit meiner Anwendung ohne Lizenzzahlungen verbreiten?

Ja, Sie können die Komponente zusammen mit ihrer Anwendung verbreiten. Sie zahlen nur für die primäre Registrierung. Die Site-Lizenz und die Server-Lizenz haben keine Beschränkungen zur Verbreitung.
Die Entwickler-Lizenz hat Beschränkungen zur Verbreitung. Bitte lesen Sie das Lizenzabkommen für ausführliche Informationen.

 


 

Welche Dateien sollen im Distributionpaket meines Programms sein?

Sie müssen Ihr Programm um nur eine Datei ergänzen: vstwain.dll.
Nach der Installation Ihres Programms auf dem Rechner tragen Sie die Komponente mit Hilfe des Programms regsvr32.exe in die Registry ein (Kommandozeile: regsvr32 vstwain.dll).

 


 

Ich habe das Programm in Visual Studio .NET entwickelt. Was muss ich tun, damit das Programm auf dem Client richtig ausgeführt wird?

Vor dem Programmerzeugung:

  • Entfernen Sie die Referenz von AxVSTWAINLib und VSTWAINLib im Projekt und ersetzen Sie diese (Add Reference) durch die Standardinstallation von VintaSoftTwain ActiveX.
  • Achten Sie darauf, das die Eigenschaft "Local Copy" bei der AxVSTWAINLib.dll und VSTWAINLib.dll aud "false" steht, da die DLL's sonst im lokalen BIN-Verzeichniss stehen mussen.
  • In der Programminstallation mussen Dateien vstwain.dll, AxInterop.VSTWAINLib.dll, Interop.VSTWAINLib.dll enthalten sein. Letztere zwei Dateien werden durch VS.NET erzeugt.

Vor der Installation auf dem Zielrechner:

  • Prüfen Sie, ob das .NET Framework installiert ist. Ist dies nicht der Fall, installieren Sie das .NET Framework. Informationen zur Verwendung von ActiveX Komponenten unter .NET erhalten Sie unter: "Using ActiveX Controls with Windows Forms in Visual Studio .NET Upgrading to Microsoft .NET" und unter: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetdep/html/vsredistdeploy.asp
  • Weiterhin ist es notwendig, dass Sie die Komponente registrieren (regsvr32.exe vstwain.dll).

 

 

Ich habe eine Fehlermeldung, wenn ich versuche, das VintaSoftTwain ActiveX in Windows 98 zu registrieren. Was kann ich tun?

Es ist das Problem mit Abhängigkeiten. ActiveX hat die folgenden Abhängigkeiten:

  • KERNEL32.DLL
  • ATL.DLL
  • GDI32.DLL
  • OLE32.DLL
  • OLEAUT32.DLL
  • SHELL32.DLL
  • USER32.DLL
  • WS2_32.DLL

Installieren Sie bitte das "Visual C++ run time files" auf Computer an, um dieses Problem zu lösen. Dieses Einstellungspaket kann von dieser Verbindung gedownloadet werden: http://download.microsoft.com/download/vc60pro/update/1/w9xnt4/en-us/vc6redistsetup_enu.exe

 

 

Ich habe das Programm in Delphi entwickelt. Das Programm arbeitet richtig, wenn Benutzer als Verwalter geloggt wird, aber wenn Benutzer während Gast geloggt wird, er folgende Anzeige beim Anfang des Programms "Exception EOleSysError in module..." erhaltet. Wie kann ich dieses Problem lösen?

Zuerst von allen es ist notwendig, ActiveX im System durch register32.exe Programm zu registrieren. Dieser Betrieb muß gebildet werden mit Verwalterrechten.

Weiter ist notwendig der folgende Code zu deinem Programm hinzuzufügen:

program Simple;

uses
  Forms,
  Windows, Registry, Dialogs,  ActiveX,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

function IsVSTwainRegistered : Boolean;
var Reg:TRegistry;
begin
 Reg:=TRegistry.Create;
 try
  Reg.RootKey:=HKEY_CLASSES_ROOT;
  Result:=Reg.OpenKey('CLSID\{1169E0CD-9E76-11D7-B1D8-FB63945DE96D}',False);
  if Result then Reg.CloseKey;
 finally
  Reg.Free;
 end;
end;

begin
  if not IsVSTwainRegistered() then
    begin
      ShowMessage('VintaSoftTwain ActiveX is not registered!');
      Exit;
    end;
    
  OleInitialize(nil);
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
  OleUninitialize;
end.

Dieser Code darf prüfen ob das Programm im System registriert wird und darf dein Programm mit Gastrechten laufen lassen.

 

 

Wie kann ich das Objekt VintaSoftTwain zu einer Form meines VB.NET-Projektes hinzufügen?

Sie sollen diese Schritte tun, um den VintaSoftTwain Objekt zu Ihrer Form hinzuzufügen:

  • Visual Studio.NET mit deinem eigenen Projekt beginnen
  • Die Hauptform in der Designansicht öffnen
  • Toolboxscheibe öffnen
  • Rechte Maus knopf an die Toolboxscheibe klicken
  • "Add/Remove Items..." Menüeinzelteil vom popup Menü auswählen
  • öffnen COM Components tabelle
  • Klicken "Browse..." and VSTwain.dll file auswählen
  • Finden und überprüfen VintaSoftTwain component in der Liste
  • Fenster mit OK Taste schließen
  • Finden und vorwählen VintaSoftTwain im Toolboxscheibe
  • VintaSoftTwain auf die Form setzen, indem Sie Steuerviereck vorwählen

 

 

Ich möchte ActiveX in Delphi 2005 und BDS 2006 verwenden, aber ich kann nicht ActiveX zu einer Form hinzufügen. Ich habe eine Fehlermeldung: "Failed to add a reference to the ActiveX type library. Ensure that it is properly registered. ...". Wie kann ich dieses Problem lösen?

Borland Delphi 8.0 (2005) and Borland C# Builder 1.0 haben bug und sie nehmen ActiveX Kontrollen an, nur wenn US Gegende benutzt wird. Andere Gegende hat mann ignoriert.

Hier sind Schritte, die helfen dieses Problem zu lösen:

  • Uninstall die ActiveX Kontrollern von der Werkzeug-Palette
  • Zum US Locale ändern
  • Neuladen
  • Die ActiveX Steuerung zur Werkzeug-Palette wieder installieren und ...voila! Es funktioniert.

 

 

Wie kann ich das VintaSoftTwain Objekt in mein Projekt auf VB dynamisch zu ergänzen?

Sie müssen die nächsten Wirkungen erfüllen:
  • Den Menüpunkt "Project -> References" zu öffnen.
  • Im geöffneten Fenster die Link auf das Objekt "VintaSoftTwain ActiveX Control" zu ergänzen.
  • Weiter muß man den nächsten Code zum Projekt ergänzen:
  Option Explicit
  Dim WithEvents VSTwain1 As VSTWAINLib.VintaSoftTwain

  Private Sub StartScan_Click()
     Set VSTwain1 = New VSTWAINLib.VintaSoftTwain
     With VSTwain1
        .StartDevice
        If .SelectSource = 1 Then
            .ShowUI = True
            .Acquire
        End If
     End With
  End Sub

  Private Sub VSTwain1_PostScan(ByVal Flag As Long)
     If Flag <> 0 Then
        If VSTwain1.ErrorCode <> 0 Then
            MsgBox VSTwain1.ErrorString
        End If
     Else
        Set Image1.Picture = VSTwain1.GetCurrentImage
        VSTwain1.TiffCompression = 10
        VSTwain1.SaveImage 0, "c:\test.tif"
     End If
  End Sub

 

 

Ich versuche, VintaSoftTwain ActiveX in Windows 2003 Server zu verwenden, aber ich habe immer Fehler: "Error at loading the TWAIN_32.DLL". Wie kann ich dieses Problem lösen?

Ihre Version von Windows Server 2003 hat bug in der Konfiguration: GetWindowsDirectory Funktion liefert falsche Pfad zu Windows-Verzeichnis "C: \ Dokumente und Einstellungen \ Benutzer \ Windows \" statt "C:\Windows\".
Lesen Sie bitte diesen Artikel, die hilft diese Problem zu lösen: http://support.microsoft.com/kb/832048.

 


 

Ich kann nicht VintaSoftTwain ActiveX zu einer Form in mein Projekt in .NET 2005 hinzufügen. Wie kann ich dieses Problem lösen?

Sie mussen Hinweis auf der "stdole" Bibliothek in deinem Projekt hinzufügen, bevor Sie den VintaSoftTwain Objekt zu Ihrer Form einsetzen. Hier sind notwendige Schritte:

  • Rechte Maus knopf an "References" klicken
  • "Add reference" Menüeinzelteil vom popup Menü auswählen
  • öffnen"COM" Tabelle
  • "OLE Automation" Kategorie in der Liste finden und überprüfen
  • Fenster mit OK Taste schließen

Nach diesen Schritten Sie können den VintaSoftTwain Objekt zu deiner Form ohne irgendwelche Probleme hinzufügen.

 

 

Wenn ich versuche hinüberziehen ActiveX-Steuerelement aus der Toolbox in das Formular im MS Visual Studio 2005, ich bekomme die folgende Fehler: "Fehler beim Import der ActiveX-Steuerelement. Bitte stellen Sie sicher, es ist richtig registriert". Gibt es eine Möglichkeit zur Lösung dieses?

  • Ziehen Sie VintaSoftTWAIN ActiveX-Steuerelement aus der Toolbox auf das Formular. Dieser Fehler tritt auf: "Fehler beim Import der ActiveX-Steuerelement. Bitte stellen Sie sicher, es ist richtig registriert."
  • Rebuild das Projekt, wählen Sie "Build > Rebuild Solution".
  • Ziehen Sie VintaSoftTWAIN ActiveX-Steuerelement aus der Toolbox auf das Formular für das zweite Mal. Sie bekommen die bekannte Fehler wieder.
  • Rebuild das Projekt für das zweite Mal, wählen Sie "Build > Rebuild Solution".
  • Ziehen Sie VintaSoftTWAIN ActiveX-Steuerelement aus der Toolbox auf das Formular für das dritte Mal, und das ActiveX Control wird erfolgreich importiert.

 

 

Wie kann ich die Komponente digital signieren, um es auf meiner Website einzusetzen?

VintaSoftTwain ActiveX ist mit den Zertifikat von Thawte gezeichnet.
Kontaktieren Sie uns bitte, wenn Sie wollen Ihre Kopie von VintaSoftTwain ActiveX durch eine eigene Zertifikat zeichnen.

 


 

Welche Wirkungen soll ich erfüllen, um die Komponente auf meiner Website einzusetzen?

Sie müssen die nächsten Wirkungen erfüllen:

  • Die vstwain.dll Datei auf den Server zu laden.
  • In den HTML Code die nächsten Zeilen zu korrigieren.
  // In example:
  <OBJECT ID="VSTwain1" WIDTH=1 HEIGHT=1
          CLASSID="CLSID:1169E0CD-9E76-11D7-B1D8-FB63945DE96D"
          CODEBASE="">
  </OBJECT>

  // In your code:
  <OBJECT ID="VSTwain1" WIDTH=1 HEIGHT=1
          CLASSID="CLSID:1169E0CD-9E76-11D7-B1D8-FB63945DE96D"
          CODEBASE="http://www.your-server.com/activex/VSTwain.dll#version=5,0,0,1">
  </OBJECT>

Nach allen diesen Wirkungen müssen Sie nicht die Komponente auf allen PC Ihrer Organisation aufstellen. Wenn der Benutzer die Seite mit der Komponente öffnet, wird er die Abfrage auf die Installation der Komponente auf seinen PC bekommen. Wenn er die Installation übereinstimmt, so wird die Komponente auf seinen PC automatisch eingerichtet sein, so er kann mit die Webseite arbeiten.

Wenn es notwendig ist, so kann man ActiveX in die CAB Datei unterbringen: (CODEBASE="http://www.your-server.com/activex/vstwain.cab").

 

 

Wie lade ich die eingescanten Bilder auf den Webserver?

Das HTTP-Protokoll erlaubt nicht das direkte Übertragen von Dateien auf einen Web (HTTP) Server. Dazu benötigen Sie Serverseitigen Code. Im Internet finden Sie viele Möglichkeiten und Scriptbeispiele dazu. Um Bilder auf einen Webserver zu laden werden folgende Felder benötigt: ASP script, Perl script.

Zum Uploaden der Bilder auf den Server muß man wissen welche Felder enthält script.

ASP script enthält folgende Felder:

  • Textfeld mit Namen "Demo"
  • Datafeld mit Namen "txtFile"
  • Submitbutton mit Namen "cmdSubmit"

Sie benötigen folgenden Code zum Uploaden der Bilder:

  if VSTwain1.SetHttpServerParams("http://www.your-server.com/clsUploadTest.asp",
                 "http://www.your-server.com/clsUploadTest.asp", 4) = 0 then
    MsgBox VSTwain1.ErrorString
  else
    VSTwain1.SetHttpFormField "Demo", "Demo string"
    VSTwain1.SetHttpFormField "cmdSubmit", "SUBMIT"
    if VSTwain1.SaveImageToHttp(0, "txtFile", "demo.jpg") = 0 then
        MsgBox VSTwain1.ErrorString
    else
        Timer.Interval = 10
    end if
  end if

Perl script enthält folgende Felder:

  • Textfeld mit Namen "login"
  • Textfeld mit Namen "pass"
  • Dateifeld mit Namen "file"

Sie benötigen folgende Code zum Uploaden der Bilder:

  if VSTwain1.SetHttpServerParams("http://www.your-server.com/cgimages/upload.cgi",
                 "http://www.your-server.com/upload.html", 4) = 0 then
    MsgBox VSTwain1.ErrorString
  else
    VSTwain1.SetHttpFormField "login", "guest"
    VSTwain1.SetHttpFormField "pass", "guest"
    if VSTwain1.SaveImageToHttp(0, "file", "demo.jpg") = 0 then
        MsgBox VSTwain1.ErrorString
    else
        Timer.Interval = 10
    end if
  end if

Bitte sehen Sie unsere Beispiele.

 

 

Ich versuche Vorrichtung mit der SourceIndex Eigenschaft im Internet Explorer vorzuwählen, aber ich erhalte ein Fehler. Warum?

Jeder Objekt der Webseite im Internet Explorer hat eine SourceIndex Eigenschaft. Dieses ist eine Read-only-Eigenschaft. Sie müssen den folgenden Code verwenden, um mit einer SourceIndex Eigenschaft eines VSTwain Objektes im Javascript oder in VBScript zu arbeiten:
  VSTwain1.StartDevice()
  VSTwain1.object.SourceIndex = 1     ' second device
  VSTwain1.Acquire()

 

 

Kann ich benutzen ActiveX in Mozilla Firefox?

Ja, Sie können benutzen ActiveX in Mozilla Firefox 3.0 und höher mit aktiviertem IE Tab Plug-in.

 


 

Wie kann ich die Schwarz-weißbilder einlesen?

Da das Beispiel des Codes für das Erhalten der Schwarz-weißbilder:
  Private Sub StartScan()
      VSTwain1.StartDevice()
      If VSTwain1.SelectSource() = 1 Then
          VSTwain1.OpenDataSource()
          VSTwain1.PixelType = 0     ' 0 - BW images, 1 - gray images , 2 - RGB images
          VSTwain1.Acquire()
      End If
  End Sub

 

 

Ich verwende die Programmiersprache, der die Arbeit mit den Massiven nicht unterstützt. Wie kann ich dieses Problem entscheiden?

Wenn Sie das Massiv der Werte mit Hilfe der Methoden GetPageSizes, GetPixelTypes, GetResolutions, GetUnitsOfMeasure bekommen müssen, aber Sie verwenden die Programmiersprache, die das Arbeit mit den Massiven nicht unterstützt, dann können Sie die nächste Methode ausnutzen:
  ' This example shows how to get supported pixel types
  VSTwain1.StartDevice()
  VSTwain1.OpenDataSource()
  bSupportBW = 0
  VSTwain1.PixelType = 0                ' black-white (1 bit per pixel)
  if VSTwain1.ErrorCode = 0 then        ' black-white images is supported by device
    bSupportBW = 1
  end if
  bSupportGray = 0
  VSTwain1.PixelType = 1                ' gray (8 bit per pixel)
  if VSTwain1.ErrorCode = 0 then        ' gray images is supported by device
    bSupportGray = 1
  end if
  bSupportRGB = 0
  VSTwain1.PixelType = 2                ' RGB (24 bit per pixel)
  if VSTwain1.ErrorCode = 0 then        ' RGB images is supported by device
    bSupportRGB = 1
  end if
  ...................

 

 

Kann ich den ADF (den Schacht der automatischen Abgabe der Dokumente) ohne Benutzerschnittstelle verwalten?

Da ist ein Beispiel für die Arbeit mit den ADF ohne Benutzerschnittstelle:
  Private Sub StartScan()
      VSTwain1.StartDevice()
      If VSTwain1.SelectSource() = 1 Then             ' user selected the device
          VSTwain1.ShowUI = False                     ' disable UI
          VSTwain1.DisableAfterAcquire = True
          VSTwain1.MaxImages = 1
          VSTwain1.AutoCleanBuffer = True
          VSTwain1.TiffMultiPage = True               ' multi page TIFF file
          VSTwain1.TiffCompression = 10               ' auto detect of best compression algorithm
          If VSTwain1.OpenDataSource() = 1 Then
              VSTwain1.UnitOfMeasure = 0              ' inches
              VSTwain1.PixelType = 0                  ' black-white image
              VSTwain1.Resolution = 200               ' 200 dpi
              If VSTwain1.FeederPresent = 1 Then
                  VSTwain1.FeederEnabled = True
                  If VSTwain1.Duplex <> 0 Then
                      VSTwain1.DuplexEnabled = True   ' enable duplex
                  End If
                  If VSTwain1.FeederLoaded = 1 Then
                      VSTwain1.XferCount = -1
                      VSTwain1.AutoFeed = True
                      VSTwain1.Acquire()
                  End If
              End If
          End If
      End If
  End Sub

  Private Sub VSTwain1_PostScan(ByVal Flag As Long)
      If Flag <> 0 Then
          If VSTwain1.ErrorCode <> 0 Then
              MsgBox VSTwain1.ErrorString
          Else
              MsgBox "Scan completed."
          End If
      Else
          If VSTwain1.SaveImage(VSTwain1.NumImages-1,"c:\test.tiff") = 0 Then
            MsgBox VSTwain1.ErrorString
          End If
      End If
  End Sub

 

 

Kann ich die Konsoleanwendung verwendend diese ActiveX Komponente erstellen?

Verwendend diese ActiveX Komponente darf man die Konsoleanwendung nicht erstellen. Die Anwendung soll das eigene Fenster für die Arbeit mit der Komponente haben.

 


 

Wie kann ich Geräte ohne Auswahldialog wählen?

Benutzen Sie folgenden Code für die Auflistung der verfugbaren Geräte:
  VSTwain1.StartDevice
  For i = 0 To VSTwain1.SourcesCount - 1
     MsgBox VSTwain1.GetSourceProductName(i)
  Next

Dieser Code selectiert das erste Gerät:

  VSTwain1.StartDevice
  VSTwain1.SourceIndex = 0
  .....
  VSTwain1.Acquire

Dies ist der beste Weg:

  VSTwain1.StartDevice
  For i = 0 To VSTwain1.SourcesCount - 1
     If VSTwain1.GetSourceProductName(i) = "Your device name" Then
       VSTwain1.SourceIndex = i
       Exit For
    End If
  Next
  .....

In diesem fall benötigen Sie den korrekten Gerätenamen.

 

 

Wie kann ich die Fortschrittsanzeige ausblenden wenn ich Bilder ohne UI einlesen mochte?

Sie können alle Resourcen der Gärate kontrollieren. Der Twain Standard ermöglicht das deaktivieren der Fortschrittsanzeige wenn showUI=False gesetzt wird. Dies kann wie folgt geschehen:
  VSTwain1.StartDevice
  VSTwain1.ShowUI = False
  VSTwain1.DisableAfterAcquire = True
  VSTwain1.MaxImages = 1
  VSTwain1.OpenDataSource
  VSTwain1.ShowIndicators = 0     ' disable indicator window
  VSTwain1.Acquire

 

 

Ich muß nur den Teil des Bildes einlesen. Wie kann ich es zu tun?

Verwenden Sie den nächsten Code, um den Teil des Bildes zu bekommen, der vom Rechteck (0.2,0.2) - (8.3,10.8) beschränkt ist:
  VSTwain1.StartDevice()
  VSTwain1.ShowUI = False
  VSTwain1.OpenDataSource()
  .............
  VSTwain1.UnitOfMeasure = 0                 ' inches
  VSTwain1.SetImageLayout(0.2,0.2,8.3,10.8)
  VSTwain1.Acquire()

 

 

Kann ich unterschiedliche Werte für die X- und Y-Auflösung verwenden?

Ja. Hier ist Beispielcode in dem X auf 4800 dpi und Y auf 9600 dpi eingestellt wird:
  VSTwain1.StartDevice
  VSTwain1.ShowUI = False
  VSTwain1.DisableAfterAcquire = True
  VSTwain1.MaxImages = 1
  VSTwain1.OpenDataSource
  VSTwain1.UnitOfMeasure = 0     ' inches
  VSTwain1.Capability = 4376     ' ICAP_XRESOLUTION (0x1118)
  VSTwain1.CapType = 1           ' one value
  VSTwain1.CapValue = 4800       ' 4800 dpi
  VSTwain1.SetCap
  VSTwain1.Capability = 4377     ' ICAP_YRESOLUTION (0x1119)
  VSTwain1.CapType = 1           ' one value
  VSTwain1.CapValue = 9600       ' 9600 dpi
  VSTwain1.SetCap
  VSTwain1.Acquire

 

 

Wie ich dem Scanner befehlen kann in die Orientierung der Landschaft oder des Porträts abzutasten?

Wenn Scanner die ICAP_ORIENTATION Fähigkeit stützt, dann kannst du sie verwenden um in der Landschaftslagebestimmung abzutasten, wie folgt:
  .....
  VSTwain1.OpenDataSource
  VSTwain1.capability = 4368     ' ICAP_ORIENTATION (0x1110)
  If VSTwain1.IsCapSupported Then
    VSTwain1.capType = 1         ' one value
    VSTwain1.capValue = 3        ' Landscape
    VSTwain1.SetCap
  End If
  .....

Mögliche Werte für Lagebestimmung:

  • 0   Portraitlagebestimmung, Umdrehung auf 0 Grad
  • 1   Umdrehung auf 90 Grad
  • 2   Umdrehung auf 180 Grad
  • 3   Landschaftslagebestimmung, Umdrehung auf 270 Grad

 

 

Wir arbeiten mit einem Netztwerk-Scanner mit ADF und lesen sehr viele Dokumente pro Tag ein. Wie können wir unsere Arbeit automatisieren? Jedes Bild soll dabei in einer eigenen Datei abgelegt werden.

Sie können einzelne Dokumente durch leere Seiten von einander trennen in dem Sie mit der Methode IsBlankPage arbeiten. Hier ist ein Beispiel:
  Dim documentsCounter as Integer

  ............
  documentsCounter = 0
  ............

  Private Sub StartScan()
      VSTwain1.StartDevice()
      If VSTwain1.SelectSource() = 1 Then         ' select the device
          VSTwain1.ShowUI = False                 ' disable UI
          VSTwain1.DisableAfterAcquire = True
          VSTwain1.MaxImages = 1
          VSTwain1.AutoCleanBuffer = True
          VSTwain1.TiffMultiPage = True           ' multi page TIFF file
          VSTwain1.TiffCompression = 10           ' auto detect of best compression algorithm
          If VSTwain1.OpenDataSource() = 1 Then
              VSTwain1.UnitOfMeasure = 0          ' inches
              VSTwain1.PixelType = 0              ' black-white image
              VSTwain1.Resolution = 200           ' 200 dpi
              If VSTwain1.Duplex <> 0 Then
                  VSTwain1.DuplexEnabled = True   ' enable duplex
              End If
              If VSTwain1.FeederPresent = 1 Then
                  VSTwain1.XferCount = -1
                  VSTwain1.FeederEnabled = True
                  VSTwain1.AutoFeed = True
                  If VSTwain1.FeederLoaded = 1 Then
                      VSTwain1.Acquire()
                  End If
              End If
          End If
      End If
  End Sub

  Private Sub VSTwain1_PostScan(ByVal Flag As Long)
      If Flag <> 0 Then
          If VSTwain1.ErrorCode <> 0 Then
              MsgBox VSTwain1.ErrorString
          Else
              VSTwain1.StopDevice()
              MsgBox "Scan completed."
          End If
      Else
          Dim currNoiseLevel As Single
          If VSTwain1.IsBlankImage(0, 0.01, currNoiseLevel) = 1 Then
            documentsCounter = documentsCounter + 1
          End If
          If VStwain1.SaveImage(0,"c:\documents\doc"+Str(documentsCounter)+".tiff") = 0 Then
            MsgBox VSTwain1.ErrorString
          End If
      End If
  End Sub

 

 

Kann ich Fleckencodes verwenden, um die Stapelauftrage zu trennen? Wenn ja, wie kann ich das Ende des Stapelauftrag ermitteln?

Sie können batch jobs ermitteln, indem Sie die CAP_JOBCONTROL Fähigkeit verwenden.

Hier ist ein Beispiel für Visual Basic:

  Dim jobsCounter As Integer
  
  Private Sub Form_Load()
    jobsCounter = -1
  End Sub
  
  Private Sub Scan_Click()
    VSTwain1.StartDevice
    VSTwain1.MaxImages = 1
    VSTwain1.ShowUI = 0
    VSTwain1.DisableAfterAcquire = 1
    VSTwain1.TiffMultiPage = 1
    VSTwain1.OpenDataSource
    ' 1 - Detect and include job separator and continue scanning.
    ' 3 - Detect and exclude job separator and continue scanning.
    VSTwain1.JobControl = 1
    jobsCounter = jobsCounter + 1
    VSTwain1.Acquire
  End Sub
  
  Private Sub VSTwain1_PostScan(ByVal Flag As Long)
    If Flag <> 0 Then
      If VSTwain1.ErrorCode <> 0 Then
        MsgBox (VSTwain1.ErrorString)
      End If
    Else
      If VSTwain1.EndOfJob = 1 Then
        jobsCounter = jobsCounter + 1
      Else
        VSTwain1.SaveImage 0, "c:\job"+Str(jobsCounter)+".tif"
      End If
    End If
  End Sub
  .....

 

 

Ich möchte in meinem Programm warten bis die Seite eingescannt ist, kann aber den PostScan-Event nicht auswerten. Wie kann ich das Problem beheben?

Sie können die AcquireModal Methode für das Lösen dieses Problems verwenden.

Hier ist ein Beispiel für Visual Basic:

  VSTwain1.AppProductName = "MyTwainApplication"
  If VSTwain1.StartDevice() Then
      VSTwain1.SelectSource
      VSTwain1.ShowUI = True
      While VSTwain1.AcquireModal() = 1
          Set Image1.Picture = VSTwain1.GetCurrentImage()
          If VSTwain1.SaveImage(0, "c:\test.tiff") = 0 Then
              MsgBox (VSTwain1.ErrorString)
          End If
      Wend
  Else
      MsgBox VSTwain1.ErrorString
  End If

 

 

Kann Ich die Bilder mit der 48 Bits Farbtiefe bekommen?

Ja, Sie können die Bilder mit der 48 Bits Farb- und 16-bit Grau-Tiefe bekommen. Diese Bilder können ohne Verlust der Farbtiefe nur in den TIFF-Dateien gespeichert sein.

Hier ist ein Beispiel, das zeigt, wie zu erwerben 48-bpp Farbbild ohne UI vom Scanner:
  VSTwain1.OpenDataSource()
  VSTwain1.PixelType = 2       ' RGB
  VSTwain1.Capability = 4395   ' IBitDepth
  VSTwain1.CapType = 1         ' One value
  VSTwain1.CapValue = 16       ' 16 bits per color component
  VSTwain1.SetCap()
  VSTwain1.Acquire()
Hier ist ein Beispiel, das zeigt, wie zu erwerben 24-bpp Farbbild ohne UI vom Scanner:
  VSTwain1.OpenDataSource()
  VSTwain1.PixelType = 2       ' RGB
  VSTwain1.Capability = 4395   ' IBitDepth
  VSTwain1.CapType = 1         ' One value
  VSTwain1.CapValue = 8        ' 8 bits per color component
  VSTwain1.SetCap()
  VSTwain1.Acquire()
Hier ist ein Beispiel, das zeigt, wie zu erwerben 16-bpp Graubild ohne UI vom Scanner:
  VSTwain1.OpenDataSource()
  VSTwain1.PixelType = 1       ' Gray
  VSTwain1.Capability = 4395   ' IBitDepth
  VSTwain1.CapType = 1         ' One value
  VSTwain1.CapValue = 16       ' 16 bits per color component
  VSTwain1.SetCap()
  VSTwain1.Acquire()

 

 

Bei verwendung HP Scanjet Scanner ich habe verloren den Gipfel der Darstellung - 1/2 Zoll. Ich habe zusätzlich auch 1/2 Zoll der schwarzen Ortes in dem Darstellungunterteil. Wie kann ich dieses Problem lösen?

Sie sollten Wert von pageSize Eigenschaft von A4 zu USLETTER wechseln und das wird das Problem lösen.

 


 

Kann Ich die eingescannte Bilder in die OLE-Feld des Tabelle des MS Access speichern?

Ja. Die eingescannte Bilder können gespeichert sein in die OLE-Feld des Tabelle des MS Access mit Hilfe des GetImageAsDib Methode.

Hier ist ein Beispiel für MS Access ("OrderImage" ist ein OLE-Feld des Tabelle):

Option Compare Database
Option Explicit

Private Sub Form_AfterUpdate()
    On Error GoTo error1
    Image1.PictureData = Me![OrderImage]
    Exit Sub
error1:
    Image1.Picture = ""
End Sub

Private Sub Form_Current()
    On Error GoTo error1
    Image1.PictureData = Me![OrderImage]
    Exit Sub
error1:
    Image1.Picture = ""
End Sub

Private Sub BAcquire_Click()
    With VSTwain1
        .StartDevice()
        If .SelectSource() = 1 Then
            .AutoCleanBuffer = 1
            .MaxImages = 1
            .ShowUI = 1
            .Acquire()
        End If
    End With

End Sub

Private Sub VSTwain1_PostScan(ByVal Flag As Long)
    If Flag <> 0 Then
        If VSTwain1.ErrorCode <> 0 Then
            MsgBox VSTwain1.ErrorString
        End If
    Else
        If VSTwain1.NumImages > 0 Then
            If IsNull(Me!OrderName) Then ' a new record?
                Me![OrderName] = " "
                Me![OrderName] = "Order N" + Str(Me!Index)
            End If
            
            Me![OrderImage] = VSTwain1.GetImageAsDIB(0)
            If VSTwain1.ErrorCode <> 0 Then
                MsgBox VSTwain1.ErrorString
            End If
            Form.Refresh
        End If
    End If
End Sub

 

 

Kann Ich die eingescannte Bilder in die Tabelle des MS SQL Server speichern?

Ja. Die eingescannte Bilder können gespeichert sein in die Tabelle des MS SQL Server mit Hilfe des GetImageAsDib Methode.

Hier ist ein Beispiel für C#, in der die eingescannte Bilder in die Tabelle des MS SQL Servers speichern:

  private void SaveToSql_Click(object sender, System.EventArgs e)
  {
     byte[] dib = (byte[]) VSTwain1.GetImageAsDIB(0);
     int imageSize = 14 + dib.Length;
     int imageOffset = 14 + 40;
     int imageBPP = VSTwain1.GetImageBPP(0);
     if (imageBPP == 1) imageOffset += 2*4;
     else if (imageBPP == 8) imageOffset += 256*4;
     
     byte[] image = new byte[imageSize];
     Array.Clear(image,0,imageSize);
   
     // BITMAPFILEHEADER
     image[0] = (byte)'B';
     image[1] = (byte)'M';
     image[2] = (byte)(imageSize&0xFF);
     image[3] = (byte)((imageSize&0xFF00)>>8);
     image[4] = (byte)((imageSize&0xFF0000)>>16);
     image[5] = (byte)((imageSize&0xFF000000)>>24);
     image[10] = (byte)(imageOffset&0xFF);
     image[11] = (byte)((imageOffset&0xFF00)>>8);
     image[12] = (byte)((imageOffset&0xFF0000)>>16);
     image[13] = (byte)((imageOffset&0xFF000000)>>24);
   
     Array.Copy(dib,0,image,14,dib.Length);
     
     // Insert the image into the database
     SqlConnection myConnection = new SqlConnection (@"server=(local);
						database=northwind;uid=sa;pwd=");
     try
     {
        myConnection.Open();
        SqlCommand myCommand = new SqlCommand("DELETE FROM Images WHERE ImageID=1",
						myConnection);
        myCommand.ExecuteNonQuery();
        myCommand = new SqlCommand ("INSERT INTO Images " 
        	+ "(Image, ImageID) VALUES (@Image, @ImageID)", myConnection);
        myCommand.Parameters.Add("@Image", image);
        myCommand.Parameters.Add("@ImageID", 1);
        myCommand.ExecuteNonQuery();
        MessageBox.Show("Image is saved successfully.");
     }
     finally 
     {
        myConnection.Close();
     }		
  }

Und hier ist ein Beispiel für C#, in der die eingescannte Bilder aus die Tabelle des MS SQL Servers bekommen:

  private void BGetImageFromSql_Click(object sender, System.EventArgs e)
  {
     SqlConnection myConnection = null;
     try    
     {        
        myConnection = new SqlConnection(@"server=(local);
					database=northwind;uid=sa;pwd=");
        SqlCommand myCommand = new SqlCommand("SELECT Image FROM Images WHERE ImageID=1",
					myConnection);
        myConnection.Open();                
        
        // Get the image from the database.        
        byte[] imagedata = (byte[])myCommand.ExecuteScalar();        
        if (imagedata != null)        
        {
           if (pictureBox1.Image != null)
           {
              pictureBox1.Image.Dispose();
              pictureBox1.Image = null;
           }
           MemoryStream stream = new MemoryStream(imagedata);
           pictureBox1.Image = new Bitmap(stream);
           MessageBox.Show("Image is loaded successfully.");
        }        
        else        
        {            
           MessageBox.Show("Image does not exist in database.");
        }    
     }    
     finally    
     {        
        myConnection.Close();    
     }		
  }

 

 

Ich benutze Visual Foxpro und der PostScan-Event wird nicht gefeuert. Warum?

Das Kommando Application.AutoYield = .F. muss zu Programbegin in Visual Foxpro gesetzt sein.