Info sobre o produto


Visão geral

Licenciamento

FAQ

Forums

Exemplos

History


Download

Versão de avaliação

On-line manual

Recomendações





VintaSoftTwain.NET SDK - FAQ

Questões gerais:

 

Redistribuição:

 

Instalação:

 

Programação:

 

Web:

 

Bases de dados:

 

 

Para que propósito posso usar o VintaSoftTwain.NET Library?

A biblioteca pode ser usada para controlar o trabalho de scanners, webcam ou câmeras digitais e qualquer outro dispositivo TWAIN.

 


 

De que partes consiste a biblioteca?

A biblioteca contém:

  • O componente VintaSoft.Twain – um componente 100% .NET (arquivo Vintasoft.Twain.dll)
  • Documentação em formato CHM (arquivo Help\Vintasoft.Twain.chm)
  • Exemplos para MS Visual Basic.NET, MS Visual C#, ASP.NET (arquivos estão no diretório Examples)
  • Demo applications for 32-bit systems (files in Bin\v1.1 and Bin\v2.0 directories)
  • Demo applications for 64-bit systems in WOW64 mode (files in Bin\v2.0\64-bit directory)

 

 

Em que linguagem de programação posso usar o componente VintaSoft.Twain?

Com uma licença desenvolvedor ou licença para várias estações de trabalho você pode usar o componente em:

  • Microsoft Visual Studio .NET : Visual Basic, Visual C#, Visual C++, Visual J#
  • Borland Delphi 8.0, Borland C# Builder, Borland C++ BuilderX
  • qualquer outra linguagem que seja compatível com o Framework .NET.

Com a licença servidor você pode usar o componente em:

  • Internet Explorer : ASP.NET, JavaScript, VBScript

 

 

Que restrições tem os usuários não registrados?

A versão não registrada tem as seguintes restrições:

  • tela de propaganda (nag screen)
  • qualquer imagem pode ser salva em disco ou enviada ao servidor como arquivo BMP
  • apenas imagens preto e branco, cinza ou da palheta de cores podem ser salvas em disco ou enviadas ao servidor como arquivo JPEG ou TIFF

Todas as restrições são removidas na versão registrada.

 

 

Estou com problemas. O que devo fazer?

As respostas para a maior parte as questões pode se encontrada na documentação ou neste FAQ.
Escreva para o nosso suporte para obter mais ajuda.

 

 

Que arquivos eu preciso incluir na instalação do meu programa?

Você precisa incluir apenas um arquivo: Vintasoft.Twain.dll. Este arquivo precisa ser colocado no mesmo diretório que o executável. Verifique se a versão que você vai distribuir seja a mesma versão que você usou para compilar o programa.

 

 

Posso distribuir o Vintasoft.Twain.dll com meu programa sem pagar royalties?

Sim, este componente é livre de royalties. Você paga apenas pelo registro uma única vez. Apenas o Vintasoft.Twain.dll pode ser distribuído junto com sua aplicação. A licença Individual de Desenvolvedor (Single Developer) tem limitação de distribuição. Por favor, leia o contrato de licença para mais informações.

 

 

Posso usar o VintaSoftTwain.NET SDK no Windows versão 64-bit?

Sim, você pode usar o VintaSoftTwain.NET SDK para Windows versão 64-bit.

Aqui uma lista de passos que você deve seguir:

  • Faça do download da última versão do TWAIN Data Source Manager do web site TWAIN (arquivo (twaindsm-X.Y.Z.win.bin.zip)
  • Coloque o twaindsm.dll e twaindsm32.msm (arquivos do diretório twaindsm-X.Y.Z.win.bin.zip\Twain32) dentro do diretório “Windows\SysWow64\”
  • Coloque o twaindsm.dll e twaindsm64.msm (arquivos do diretório "twaindsm-X.Y.Z.win.bin.zip\Twain64") dentro do diretório "Windows\System32\"
  • Especifique o caminho (path) para o TWAIN Data Source Manager em seu código:
      ...
      VSTwain1.TwainDllPath = "c:\Windows\SysWow64\twaindsm.dll"
      VSTwain1.IsTwain2Compatible = True
      VSTwain1.StartDevice()
      ...
    

 

Posso adicionar o componente VintaSoft.Twain em um Form de um projeto .NET?

Para adicionar o componente VintaSoft.Twain em seu form, você precisa fazer o seguinte:

  • Inicialize o Visual Studion.NET com seu próprio projeto
  • Abra o form principal em modo de design (design view)
  • Abra o Toolbox
  • Com o botão direito clique no Toolbox
  • Selecione no menu popup a opção “Customize Toolbox...”
  • Abra o tab .NET Framework Components
  • Clique “Browse...” e selecione o arquivo Vintasoft.Twain.dll
  • Procure e selecione o componente VintaSoft.Twain na lista
  • Feche a janela usando o botão OK
  • Ache e selecione no ToolBox o item VintaSoft.Twain
  • Coloque o componente VintaSoft.Twain no from selecionando o controle retangular

 

 

Posso obter imagens em preto-e-branco?

Aqui um exemplo de código para adquirir apenas imagens em preto-e-branco:

  Private Sub StartScan()
      Try
          VSTwain1.StartDevice()
          If VSTwain1.SelectSource() Then
              VSTwain1.OpenDataSource()
              VSTwain1.PixelType = PixelType.BW
              VSTwain1.Acquire()
          End If
      Catch ex As TwainException
          MsgBox(ex.Message)
      End Try
  End Sub

 

 

Posso trabalhar com ADF sem mostrar a tela de interface com o usuário?

Aqui um exemplo de código para fazer o scanner trabalhar com ADF sem obter dados através da interface do usuário:

  Private Sub StartScanButton_Click(ByVal sender As Object, _
                       ByVal e As System.EventArgs) _
                       Handles StartScanButton.Click
      Try
          VSTwain1.StartDevice()
          VSTwain1.SelectSource()
          VSTwain1.ShowUI = false
          VSTwain1.DisableAfterAcquire = true
          VSTwain1.MaxImages = 1
          VSTwain1.AutoCleanBuffer = true
          VSTwain1.OpenDataSource()
          VSTwain1.UnitOfMeasure = UnitOfMeasure.Inches
          VSTwain1.PixelType = PixelType.RGB
          VSTwain1.Resolution = 200
          VSTwain1.TiffMultiPage = true
          VSTwain1.TiffCompression = TiffCompression.Auto
          If VSTwain1.Duplex <> DuplexMode.None Then
              VSTwain1.DuplexEnabled = true
          End If
          If VSTwain1.FeederPresent Then
              VSTwain1.FeederEnabled = true
              VSTwain1.AutoFeed = true
              VSTwain1.XferCount = -1
              If VSTwain1.FeederLoaded Then
                  VSTwain1.Acquire()
              Endif
          Endif
      Catch ex As TwainException
          MsgBox(ex.Message)
      End Try
  End Sub

  Private Sub VSTwain1_ImageAcquired(ByVal sender As Object, _
                       ByVal e As System.EventArgs) _
                       Handles VSTwain1.ImageAcquired
      Try
          VStwain1.SaveImage(0,"c:\test.tiff")
      Catch ex As ImagingException
          MsgBox(ex.Message)
      End Try
  End Sub
  
  Private Sub VSTwain1_ScanCompleted(ByVal sender As Object, _
                       ByVal e As System.EventArgs) _
                       Handles VSTwain1.ScanCompleted
      If VSTwain1.ErrorCode <> ErrorCode.None Then
          MsgBox(VSTwain1.ErrorString)
      Else
          MsgBox("Scan process is completed.")
      End If
  End Sub

 

 

Posso trabalhar com ADF sem mostrar a tela de interface com o usuário?

Aqui um exemplo de código para trabalhar com ADF sem obter dados através da interface do usuário:

  Private Sub StartScanButton_Click(ByVal sender As Object, _
                       ByVal e As System.EventArgs) _
                       Handles StartScanButton.Click
      Try
          VSTwain1.StartDevice()
          VSTwain1.SelectSource()
          VSTwain1.ShowUI = false
          VSTwain1.DisableAfterAcquire = true
          VSTwain1.MaxImages = 1
          VSTwain1.AutoCleanBuffer = true
          VSTwain1.OpenDataSource()
          VSTwain1.UnitOfMeasure = UnitOfMeasure.Inches
          VSTwain1.PixelType = PixelType.RGB
          VSTwain1.Resolution = 200
          VSTwain1.TiffMultiPage = true
          VSTwain1.TiffCompression = TiffCompression.Auto
          If VSTwain1.Duplex <> DuplexMode.None Then
              VSTwain1.DuplexEnabled = true   ' enable duplex
          End If
          If VSTwain1.FeederPresent Then
              VSTwain1.FeederEnabled = true
              VSTwain1.AutoFeed = true
              VSTwain1.XferCount = -1
              If VSTwain1.FeederLoaded Then
                  While VSTwain1.AcquireModal()
                      Try
                          VStwain1.SaveImage(0,"c:\test.tiff")
                      Catch ex As TwainException
                          MsgBox(ex.Message)
                      End Try
                  End While
                  VSTwain1.StopDevice()
                  MsgBox "Scan completed."
              Endif
          Endif
      Catch ex As TwainException
          MsgBox(ex.Message)
      End Try
  End Sub

 

 

Eu quero escanear apenas parte da imagem. Como posso fazer isso?

Você pode usar o seguinte código para obter apenas parte da imagem limitado por um retângulo (0.5,0.5) - (6,8):

  VSTwain1.StartDevice()
  VSTwain1.ShowUI = False
  VSTwain1.OpenDataSource()
  .............
  VSTwain1.UnitOfMeasure = UnitOfMeasure.Inches
  VSTwain1.SetImageLayout(0.5,0.5,6,8)
  VSTwain1.Acquire()

 

 

É possível selecionar um dispositivo sem mostrar a tela de seleção de dispositivos?

Você pode usar o seguinte código para enumerar os dispositivos:

  VSTwain1.StartDevice()
  For i = 0 To VSTwain1.SourcesCount - 1
      sourceInfo = VSTwain1.GetSourceInfo(i)
      If sourceInfo.IsTwain2Compatible Then
          MsgBox "Device " + sourceInfo.ProductName + _
                 " is TWAIN 2.0 compatible."
      Else
          MsgBox "Device " + sourceInfo.ProductName + _
                 " is not TWAIN 2.0 compatible."
      End If
  Next
E esse código para o primeiro dispositivo selecionado:
  VSTwain1.StartDevice()
  VSTwain1.SourceIndex = 0
  .....
  VSTwain1.Acquire
Mas o seguinte jeito é melhor:
  VSTwain1.StartDevice()
  For i = 0 To VSTwain1.SourcesCount - 1
     If VSTwain1.GetSourceProductName(i) = "Your device name" Then
       VSTwain1.SourceIndex = i
       break
    End If
  Next
  .....
Neste caso você precisa saber o nome do dispositivo.

 


 

Posso desabilitar a tela de indicador de progresso quando obtenho imagens sem a interface com o usuário?

O padrão TWAIN permite desabilitar a tela de indicador de progresso quando ShowUI=false. Isto pode ser feito deste modo:

  VSTwain1.StartDevice()
  VSTwain1.ShowUI = false
  VSTwain1.DisableAfterAcquire = true
  VSTwain1.MaxImages = 1
  VSTwain1.OpenDataSource()
  VSTwain1.ShowIndicators = 0
  VSTwain1.Acquire()

 

 

Eu gostaria de criar meu próprio indicador do processo de escaneamento da imagem. Isto é possível?

Sim, isto é possível se você usar o modo de transferência por Memória – você precisa usar o evento de progresso. Aqui um exemplo:

  Private Sub VSTwain1_ImageProcessingProgress(ByVal sender As Object, _
                       ByVal e As Vintasoft.Twain.ProgressEventArgs) _
                       Handles VSTwain1.Progress
      Select Case e.Action
          Case Action.Deskew
              txtAction.Text = "Deskewing..."
          Case Action.Despecle
              txtAction.Text = "Despeckling..."
          Case Action.BorderDetection
              txtAction.Text = "Border detecting..."
          Case Action.Rotation
              txtAction.Text = "Rotating..."
          Case Action.ImageScan
              txtAction.Text = "Image scan..."
          Case Action.ImageSaving
              txtAction.Text = "Saving image to PDF document..."
      End Select
      progressBar1.Value = e.percentComplete
      e.interrupt = bFinishFlag
  End Sub

 

 

Posso configurar uma resolução diferente, com posições X e Y?

Sim. Aqui um exemplo de código de como configurar a resolução de X para 48000 dpi e Y com 96000 dpi:

  VSTwain1.StartDevice()
  VSTwain1.ShowUI = false
  VSTwain1.DisableAfterAcquire = true
  VSTwain1.MaxImages = 1
  VSTwain1.OpenDataSource()
  VSTwain1.UnitOfMeasure = UnitOfMeasure.Inches
  VSTwain1.Capability = Capability.IXResolution
  VSTwain1.CapType = CapType.OneValue
  VSTwain1.CapValue = 4800     ' 4800 dpi
  VSTwain1.SetCap()
  VSTwain1.Capability = Capability.IYResolution
  VSTwain1.CapType = CapType.OneValue
  VSTwain1.CapValue = 9600     ' 9600 dpi
  VSTwain1.SetCap()
  VSTwain1.Acquire()

 

 

Eu gostaria de escanear documentos em processo separado. Isto é possível?

Sim, isso é possível se o método AcquireModal for usado. Aqui um exemplo em C#:

  .....
  public class Form1 : System.Windows.Forms.Form
  {
    private VSTwain twain=null;

    .....

    private void buttonScanASync_Click(object sender, System.EventArgs e)
    {
      ThreadStart ts = new ThreadStart(this.doScanning);
      Thread t = new Thread(ts);
      t.Name = "Scan-Thread";
      t.Start();
    }

    private void doScanning()
    {
      twain = new VSTwain();
      try
      { 
        twain.StartDevice();
        twain.ShowUI = false;
        if (twain.SelectSource())
        {
          while (twain.AcquireModal())
          {
            pictureBox.Image = twain.GetCurrentImage();
          }
        }
        twain.StopDevice();
      }
      catch (TwainException ex)
      {
        MessageBox.Show(ex.Message);
      }
    }
    .....
  }
  .....

 

 

Nossa organização tem um scanner na rede com ADF e nós escaneamos muitos documentos todo o dia. É possível automatizar nosso trabalho? Nós queremos salvar cada documento em um arquivo separado.

Você pode usar uma página em branco para separar os documentos e apagar a página em branco, como delimitador de documentos, pelo método IsBlankPage. Aqui um exemplo:

  Dim documentsCounter as Integer

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

  Private Sub StartScan()
      Try
          VSTwain1.StartDevice()
          If VSTwain1.SelectSource() = 1 Then
              VSTwain1.ShowUI = false        
              VSTwain1.DisableAfterAcquire = true
              VSTwain1.MaxImages = 1
              VSTwain1.AutoCleanBuffer = true
              VSTwain1.TiffMultiPage = true          
              VSTwain1.TiffCompression = TiffCompression.Auto
              VSTwain1.OpenDataSource()
              VSTwain1.UnitOfMeasure = UnitOfMeasure.Inches
              VSTwain1.PixelType = PixelType.GRAY
              VSTwain1.Resolution = 200             ' 200 dpi

              If VSTwain1.Duplex <> DuplexMode.None Then
                  VSTwain1.DuplexEnabled = true   
              End If
              If VSTwain1.FeederPresent Then
                  VSTwain1.XferCount = -1
                  VSTwain1.FeederEnabled = true
                  VSTwain1.AutoFeed = true
                  If VSTwain1.FeederLoaded Then
                      VSTwain1.Acquire()
                  End If
              End If
          End If
      Catch ex As TwainException
          MsgBox(ex.Message)
      End Try
  End Sub

  Private Sub VSTwain1_ImageAcquired(ByVal sender As Object, _
                       ByVal e As System.EventArgs) _
                       Handles VSTwain1.ImageAcquired
      If VSTwain1.IsBlankImage(0) Then              ' check the first image (page)

          documentsCounter = documentsCounter + 1
      End If
      Try
          VStwain1.SaveImage(0,"c:\documents\doc"+Str(documentsCounter)+".pdf")
      Catch ex As PdfException
          MsgBox(ex.Message)
      End Try
  End Sub
  
  Private Sub VSTwain1_ScanCompleted(ByVal sender As Object, _
                       ByVal e As System.EventArgs) _
                       Handles VSTwain1.ScanCompleted
      If VSTwain1.ErrorCode <> ErrorCode.None Then
          MsgBox(VSTwain1.ErrorString)
      Else
          MsgBox("Scan process is completed.")
      End If
  End Sub

 

 

Posso usar códigos patch para separar as tarefas em batch? Se sim, como posso detectar o fim das tafefas em batch?

Você pode detectar as tarefas em batch usando a capacidade CAP_JOBCONTROL.
Aqui um exemplo para o Visual Basic .NET:

  Dim jobsCounter As Integer
  
  Private Sub Form_Load()
    jobsCounter = -1
  End Sub
  
  Private Sub Scan_Click()
    VSTwain1.StartDevice
    VSTwain1.MaxImages = 1
    VSTwain1.ShowUI = false
    VSTwain1.DisableAfterAcquire = true
    VSTwain1.TiffMultiPage = true
    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_ImageAcquired(ByVal sender As Object, _
                       ByVal e As System.EventArgs) _
                       Handles VSTwain1.ImageAcquired
      If VSTwain1.EndOfJob Then
          jobsCounter = jobsCounter + 1
      Else
          VSTwain1.SaveImage 0, "c:\job"+jobsCounter.ToString()+".tif"
      End If
  End Sub
  
  Private Sub VSTwain1_ScanCompleted(ByVal sender As Object, _
                       ByVal e As System.EventArgs) _
                       Handles VSTwain1.ScanCompleted
      If VSTwain1.ErrorCode <> ErrorCode.None Then
          MsgBox(VSTwain1.ErrorString)
      Else
          MsgBox("Scan process is completed.")
      End If
  End Sub
  .....

 

 

Eu gostaria de guardar as imagens adquiridas em conjunto e processá-los. Como posso fazer isso?

Os métodos GetImage/GetCurrentImage retornam um objeto Bitmap assim você pode usa-lo em sua coleção:

  ...
  Dim colDocumentPages As New Collection
  ...
  Dim picNewPage As Image = vnsScanner.GetCurrentImage()
  colDocumentPages.Add(picNewPage)
  ...

 

 

Posso salver as imagens adquiridas para um documento PDF?

Sim, você pode fazer isso. As imagens obtidas podem ser salvas para um documento PDF ou adicionadas em um documento PDF existente.
Aqui está um exemplo para VB.NET:

  VSTwain1.PdfDocumentInfo.Author = "VintaSoft Ltd."
  VSTwain1.PdfDocumentInfo.Title = "Documents acquired from " + _
                                   VSTwain1.GetSourceProductName(VSTwain1.SourceIndex)
  VSTwain1.PdfDocumentInfo.Creator = "VintaSoftTwain.NET SDK"
  VSTwain1.PdfDocumentInfo.ModificationDate = DateTime.Now
  VSTwain1.PdfMultiPage = true
  VSTwain1.SaveImage(0, "c:\test.pdf")

 

 

Como posso reaver informações de imagem extendida do scanner?

Este exemplo mostra como obter informações sobre os códigos de barras achados em uma imagem adquirida:

  Public Sub ScanWithoutUI()
      VSTwain1.AppProductName = "MyTwainApplication"
      Try
          VSTwain1.StartDevice()
          VSTwain1.SelectSource()
          VSTwain1.ShowUI = false
          VSTwain1.ExtendedImageInfoCollection.Add(New _
                             ExtendedImageInfo(ExtendedImageInfoId.BarcodeCount))
          VSTwain1.ExtendedImageInfoCollection.Add(New _
                             ExtendedImageInfo(ExtendedImageInfoId.BarcodeType))
          VSTwain1.ExtendedImageInfoCollection.Add(New _
                             ExtendedImageInfo(ExtendedImageInfoId.BarcodeTextLength))
          VSTwain1.ExtendedImageInfoCollection.Add(New _
                             ExtendedImageInfo(ExtendedImageInfoId.BarcodeText))
          While VSTwain1.AcquireModal()
              If Not (PictureBox1.Image Is Nothing) Then
                  PictureBox1.Image.Dispose()
                  PictureBox1.Image = Nothing
              End If
              PictureBox1.Image = VSTwain1.GetCurrentImage
              VSTwain1.SaveImage 0, "c:\test.tiff"
              ' retrieve extended image info
              Dim barcodeCount As ExtendedImageInfo = _
                                       VSTwain1.ExtendedImageInfoCollection(0)
              If barcodeCount.Items IsNot Nothing And barcodeCount.Items.Length > 0 Then
                  If barcodeCount.Items(0) > 0 Then
                      Dim barcodeType As ExtendedImageInfo = _
                                       VSTwain1.ExtendedImageInfoCollection(1)
                      Dim barcodeTextLength As ExtendedImageInfo = _
                                       VSTwain1.ExtendedImageInfoCollection(2)
                      Dim barcodeText As ExtendedImageInfo = _
                                       VSTwain1.ExtendedImageInfoCollection(3)
                      Dim i As Integer, infoString As String
                      For i = 0 To barcodeCount.Items(0) - 1
                          infoString = ""
                          If barcodeType.IsValid Then
                              infoString = "BarcodeType=" + barcodeType.Items(i) + " "
                          Else
                              infoString = "BarcodeType=Undefined "
                          End If
                          If barcodeText.IsValid Then
                              infoString = "BarcodeText='" + barcodeText.Items(i) + "'"
                          Else
                              infoString = "BarcodeText=Undefined "
                          End If
                          MsgBox(infoString)
                      Next i
                  End If
              End If
          End While
      Catch ex As TwainException
          MsgBox ex.Message
      Catch ex As ImagingException
          MsgBox ex.Message
      End Try
  End Sub

 

 

Posso adquirir imagens 48-bit?

Sim. O VintaSoftTwain.NET SDK permite obter imagens coloridas 48-bit ou imagens em tons cinza 16-bit. Imagens podem ser salvas sem perda de bit depth apenas em arquivos TIFF.

Aqui está um exemplo que mostra como obter imagens coloridas 48-bpp sem o UI do scanner:

  
  VSTwain1.OpenDataSource()
  VSTwain1.PixelType = PixelType.RGB
  VSTwain1.Capability = DeviceCapability.IBitDepth
  VSTwain1.CapType = CapType.OneValue
  VSTwain1.CapValue = 16   ' 16 bits per color component
  VSTwain1.SetCap()
  VSTwain1.Acquire()

Aqui está um exemplo que mostra como obter imagens coloridas 24-bpp sem o UI do scanner:

  
  VSTwain1.OpenDataSource()
  VSTwain1.PixelType = PixelType.RGB
  VSTwain1.Capability = DeviceCapability.IBitDepth
  VSTwain1.CapType = CapType.OneValue
  VSTwain1.CapValue = 8    ' 8 bits per color component
  VSTwain1.SetCap()
  VSTwain1.Acquire()

Aqui está um exemplo que mostra como obter imagens cinza 16-bit sem o UI do scanner:

  
  VSTwain1.OpenDataSource()
  VSTwain1.PixelType = PixelType.Gray
  VSTwain1.Capability = DeviceCapability.IBitDepth
  VSTwain1.CapType = CapType.OneValue
  VSTwain1.CapValue = 16   ' 16 bits per color component
  VSTwain1.SetCap()
  VSTwain1.Acquire()

 

 

Posso criar uma sessão pré-definida das configurações para meu scanner high-volume?

Sim, a biblioteca permite carregar/salvar configurações para scanners de mid- e high-volume.

Aqui está um exemplo que mostra como salvar as configurações do dispositivo para um arquivo:

  
  VSTwain1.OpenDataSource()
  Dim fs As FileStream = New FileStream("scanner-setup.xml", FileMode.Append, FileAccess.Write)
  VSTwain1.SaveDeviceSettings(fs)
  fs.Close()

Aqui está um exemplo que mostra como carregar as configurações previamente salvas para o dispositivo:

  
  VSTwain1.OpenDataSource()
  Dim fs As FileStream = New FileStream("scanner-setup.xml", FileMode.Open, FileAccess.Read)
  VSTwain1.LoadDeviceSettings(fs)
  fs.Close()
  VSTwain1.Acquire()

 

 

Que passos devo seguir para adicionar um componente VintaSoft.Twain em meu projeto web?

No lado servidor você precisa fazer o seguinte:

  • Coloque a dll Vintasoft.Twain.dll no servidor.
  • Use o seguinte código em sua página web:
  • < OBJECT ID="VSTwain1" WIDTH=1 HEIGHT=1
    CLASSID="http://your-server/path-on-server/Vintasoft.Twain.dll#Vintasoft.Twain.VSTwain"
    CODEBASE="http://your-server/path-on-server/Vintasoft.Twain.dll#version=5,0,5,3">
    < /OBJECT >

    A versão correta é muito importante! Com versão de número errada seus clientes farão o download do executável toda a vez que eles abrirem sua página web.

  • O sub-pasta onde você planeja guardar as imagens precisa ter privilégios de gravação por todos os usuários.


No lado cliente você precisa fazer o seguinte:

  • O Framework 1.1 ou mais novo precisa ser instalado.
  • Internet Explorer 6.0 ou acima. Mozilla Firefox 3.0 e acima com o Plug-in IE Tab instalado.
  • Seu web-site precisa estar adicionado ao Trusted Runtime Security Group no .NET.

    Você pode fazer isto como mostrado a seguir:

    • Abra o Microsoft .NET Framework pelo Painel de Controle | Ferramentas Administrativas
    • Selecione Runtime Security Policy | Machine | Code Groups | All_Code
    • Clique com o botão direito e selecione New para criar um novo code group
    • Nomeie o code group Meu_Web_Site
    • Escolha a opção site Site em code group
    • Coloque o nome do Site como meu_web_site.com
    • Escolha a opção Full Trust em “use existing permission set”

    Para mais informação das políticas de segurança, por favor leia este artigo MSDN.

  • Seu web-site precisa estar adicionado na Zona Confiável (Trusted Zone) no Internet Explorer 8.0 ou acima.

    Você pode fazer isto como mostrado a seguir:

    • Abra o Internet Explorer e vá no menu para "Ferramentas > Opções da Internet", uma janela vai abrir.
    • Clique na tab "Segurança" e escolha o ícone "Sites confiáveis". Clique no botão "Sites", uma janela vai abrir.
    • Coloque o seu web-site na linha fornecida. Se necessário, remova a opção "Exigir verificação do servidor (https:)..." Clique no botão "Adicionar".
    • Clique no botão "Fechar". Seu web-site está agora adicionada à lista de sites confiáveis.
    Para mais informação, por favor leia este artigo How Internet Explorer determines permissions for .NET Framework assemblies.

 

 

Eu gostaria de criar um script para meu website que automaticamente configurasse a segurança do Framework .NET em meu servidor web, permitindo evitar rotinas de configurações complexas para o usuário final. O que eu devo fazer?

Você pode criar um script que executará este comando:


caspol.exe -q -machine -addgroup All_Code -site www.my-company.com FullTrust
-name VSTwain_MyEmpresa_Site
-description "This permission set grants the right to use VSTwain object on www.my-company.com."

 

 

Eu obtenho a mensagem “As configurações de segurança do Framework .NET precisam ser configuradas para serem executadas pelos componentes no seu navegador” quando eu executo minha aplicação web. O que fiz de errado?

Primeiramente você precisa configurar as políticas de segurança do Framework .NET como descrito aqui.

Em seguida, você precisa checar que versão do Vintasoft.Twain.dll você está usando (por exemplo, 5.0.5.3).

Depois você precisa configurar um OBJECT objeto em sua página web corretamente. O número da versão correta é muito importante!

Aqui um exemplo:

< OBJECT ID="VSTwain1" WIDTH=1 HEIGHT=1
CLASSID="http://your-server/path-on-server/Vintasoft.Twain.dll#Vintasoft.Twain.VSTwain"
CODEBASE="http://your-server/path-on-server/Vintasoft.Twain.dll#version=5,0,5,3">
< /OBJECT >

Isto é tudo o que você precisa fazer.

 

 

Eu estou tentado selecionar um dispositivo com a propriedade SourceIndex no Internet Explorer, mas eu obtenho apenas erros. Por que?

Cada objeto da página web no Internet Explorer tem uma propriedade SourceIndex. Esta propriedade é read-only. Você precisa usar o seguinte código para trabalhar com uma propriedade SourceIndex de um objeto VSTwain no JavaScript ou VBScript:

  VSTwain1.StartDevice()
  VSTwain1.object.SourceIndex = 1   ' second device
  VSTwain1.Acquire()

 

 

Posso escanear imagens e enviá-los para o servidor em uma aplicação intranet com a autenticação integrada do windows?

Sim, a biblioteca permite usar qualquer método de autenticação suportado pelo Framework .NET.

O exemplo seguinte mostra como usar a informação de autenticação para o usuário que esteja logado:

  ...
  httpUpload1.Url = "http://localhost/vstwaindemo/imageupload.aspx"
  httpUpload1.UseDefaultCredentials = true
  ...

O exemplo seguinte ilustra como usar informações de múltiplas autenticações:

  ...
  Dim myCache As New CredentialCache()
  myCache.Add(New Uri("http://www.my-web-server.com/"), "Basic",
              New NetworkCredential(UserName, SecurelyStoredPassword))
  myCache.Add(New Uri("http://www.my-web-server.com/"), "Digest",
              New NetworkCredential(UserName, SecurelyStoredPassword, Domain))
  httpUpload1.Credentials = myCache
  ...

 

 

Posso escaner imagens e enviá-los para o servidor usando uma aplicação web com autenticação Cookieless Forms?

Sim, eu posso fazer isso, por favor, veja aqui os exemplos 8 e 9.

 

 

Posso gravar as imagens adquiridas em uma tabela do MS SQL Server?

Sim, você pode fazer isto, veja 3 exemplos aqui.

 

 

Eu quero armazenar as imagens adquiridas em um documento PDF no banco de dados. Posso fazer isso?

Sim, você pode saber as imagens adquiridas para um stream e mais tarde salvá-los em um banco de dados.

Aqui um exemplo que mostra como salvar cada imagem adquirida como um documento PDF separado em um stream:

  Dim mem As MemoryStream = VSTwain1.GetImageAsStream(0, ImageFileFormat.PDF)

E aqui um exemplo que mostra como salver todas as imagens adquiridas para um único documento PDF em um stream:

  Dim mem As MemoryStream = VSTwain1.GetImageAsStream(0, ImageFileFormat.PDF)
  Dim i As Integer
  For i = 1 To VSTwain1.NumImages - 1
    VSTwain1.SaveImageToStream(i, mem, ImageFileFormat.PDF)
  Next i