Home | Download | Registrar | Recomendações | Suporte | Quem somos English version   Deutsch version   Русская версия   Português versão   Española versión   Version française


VintaSoftTwain.NET Library    Info Info  Licença Licença  FAQ FAQ  Exemplos Exemplos  Download Download  Compre agora Compre agora



Questões gerais:
  • Para que propósito posso usar o VintaSoftTwain.NET Library?
  • De que partes consiste a biblioteca?
  • Em que linguagem de programação posso usar o componente VintaSoft.Twain?
  • Que restrições tem os usuários não registrados?
  • Estou com problemas. O que devo fazer?

  • Redistribuição:
  • Que arquivos eu preciso incluir na instalação do meu programa?
  • Posso distribuir o VintaSoft.Twain.dll com meu programa sem pagar royalties?

  • Programação:
  • Posso adicionar o componente VintaSoft.Twain em um Form de um projeto .NET?
  • Posso obter imagens em preto-e-branco?
  • Posso trabalhar com ADF sem mostrar a tela de interface com o usuário?
  • Posso trabalhar com ADF sem mostrar a tela de interface com o usuário e sem passar pelo evento PostScan?
  • Eu quero escanear apenas parte da imagem. Como posso fazer isso?
  • É possível selecionar um dispositivo sem mostrar a tela de seleção de dispositivos?
  • Eu tento selecionar o dispositivo com a propriedade SourceIndex no Internet Explorer mas um erro é mostrado. Por quê?
  • Posso desabilitar a tela de indicador de progresso quando obtenho imagens sem a interface com o usuário?
  • Eu gostaria de criar meu próprio indicador do processo de escaneamento da imagem. Isto é possível?
  • Posso configurar uma resolução diferente, com posições X e Y?
  • Eu gostaria de escanear documentos em processo separado. Isto é possível?
  • 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.
  • Posso usar códigos patch para separar as tarefas em batch? Se sim, como posso detectar o fim das tafefas em batch?
  • Eu gostaria de guardar as imagens adquiridas em conjunto e processá-los. Como posso fazer isso?
  • Quando eu estou usando o scanner HP Scanjet, eu estou perdendo a parte superior ½ inch do que foi escaneado – e existe uma parte extra ½ inch de espaço em branco na parte inferior. Como posso resolver esse problema?

  • Servidor instalação:
  • Que passos devo seguir para adicionar um componente VintaSoft.Twain em meu projeto web?
  • 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?
  • 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?

  • Bases de dados:
  • Posso gravar as imagens adquiridas em uma tabela do MS SQL Server?


  •  
    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 VintaSoft.Twain.chm)
  • Exemplos para MS Visual Basic.NET, MS Visual C#, Borland Delphi 8.0, Borland C# Builder, ASP.NET
  •     (arquivos estão no diretório Examples)


     
    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 a versão não registrada?
    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 redistribuir o VintaSoft.Twain.dll com meu programa sem pagar royalties?
    Sim, este componente e livre de royalts. Você paga apenas para registrar, uma única vez. Apenas este componente pode ser redistribuído com seu programa.
    A licença desenvolvedor tem limitação na redistribuição. Por favor, veja o acordo de licenciamento.


     
    Posso adicionar um componente VintaSoft.Twain no form do meu projeto?
    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 interface com 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
    

     
    Como posso trabalhar com ADF sem mostrar a interface com o usuário e sem usar o evento PostScan?
    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 parte da imagem. Como faço 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()
    

     
    Como posso 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)
         MsgBox VSTwain1.GetSourceProductName(i)
      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.


     
    Eu tento selecionar o dispositivo com a propriedade SourceIndex no Internet Explorer mas um erro é mostrado. Por quê?
    Cada objecto da web page no Internet Explorer tem uma propriedade SourceIndex. Esta é uma propriedade de leitura apenas. Você precisa usar o seguinte código para trabalhar com a propriedade SourceIndex do objeto VSTwain no JavaScript ou VBScript:
      VSTwain1.StartDevice()
      VSTwain1.object.SourceIndex = 1   ' second device
      VSTwain1.Acquire()
    

     
    Como posso desabilitar a janela de indicador de progresso quando eu adquiro imagens sem a interface do 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    ' disable indicator window
      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
          If e.action = Action.Deskew Then
            txtAction.Text = "Deskewing..."
          ElseIf e.action = Action.Despecle Then
            txtAction.Text = "Despeckling..."
          ElseIf e.action = Action.BorderDetection Then
            txtAction.Text = "Border detecting..."
          ElseIf e.action = Action.Rotation Then
            txtAction.Text = "Rotating..."
          ElseIf e.action = Action.ImageScan Then
            txtAction.Text = "Image scan..."
          ElseIf e.action = Action.ImageSaving Then
            txtAction.Text = "Saving image to PDF document..."
          End If
          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 com ADF e nós escaneamos muitos documentos todo o dia. Como podemos 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()
          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
              If VSTwain1.OpenDataSource() = 1 Then
                  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
          End If
      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
              ' check the first image (page)
              If VSTwain1.IsBlankImage(0) Then                 
                documentsCounter = documentsCounter + 1
              End If
              If Not VStwain1.SaveImage(0,"c:\documents\doc"+
                                        Str(documentsCounter)+".tiff") Then
                MsgBox VSTwain1.ErrorString
              End If
              If VSTwain1.DataSourceState = 0 Then
                  VSTwain1.StopDevice()
                  MsgBox "Scan completed."
              End if
          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:
      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_PostScan(ByVal sender As System.Object,
               ByVal e As VintaSoft.Twain.PostScanEventArgs) Handles VSTwain1.PostScan
        If Not e.Flag Then
          If VSTwain1.ErrorCode <> 0 Then
            MsgBox(VSTwain1.ErrorString)
          End If
        Else
          If VSTwain1.EndOfJob Then
            jobsCounter = jobsCounter + 1
          Else
            VSTwain1.SaveImage 0, "c:\job"+jobsCounter.ToString()+".tif"
          End If
        End If
      End Sub
      .....
    

     
    Eu gostaria de guardar as imagens adquiridas em conjunto e processá-los. Como posso fazer isso?
    Se você quer guardar as imagens em seu próprio buffer (por exemplo, em uma conjunto de objetos em VB.NET), então você precisa criar uma cópia completa do objeto da imagem retornado pelo método GetImage e colocar este objeto em seu buffer. Você não pode colocar no buffer o objeto de imagem retornada pelo método GetImagem porque este objeto será destruído quando você adquirir uma nova imagem ou quando você chamar o método StopDevice.

    Aqui o código correto:
      ...
      Dim colDocumentPages As New Collection
      ...
      Dim picNewPage As Image = New Bitmap(vnsScanner.GetCurrentImage)
      colDocumentPages.Add(picNewPage)
      ...
    
    E aqui o código incorreto:
      ...
      Dim colDocumentPages As New Collection
      ...
      Dim picNewPage As Image
      picNewPage = vnsScanner.GetCurrentImage
      colDocumentPages.Add(picNewPage)
      ...
    

     
    Quando eu estou usando o scanner HP Scanjet, eu estou perdendo a parte superior ½ inch do que foi escaneado – e existe uma parte extra ½ inch de espaço em branco na parte inferior. Como posso resolver esse problema?
    Você precisa trocar o valor da propriedade PageSize de A4 para USLETTER e assim poderá resolver o problema.


     
    Que passos devo dar para adicionar o componente VintaSoft.Twain em meu projeto web?
    No lado servidor você precisa fazer o seguinte:
    1. Coloque a dll VintaSoft.Twain.dll no servidor.
    2. 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=4,0,0,1">
        </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.
    3. 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:
    1. O Framework 1.0 ou mais novo precisa ser instalado.
    2. O Internet Explorer 6.0 ou mais novo precisa ser usado.
    3. A política de segurança .NET precisa ser configurado em seu web site.
    Você pode fazer isto como mostrado a seguir:
    1. Abra o Microsoft .NET Framework pelo Painel de Controle | Ferramentas Administrativas
    2. Selecione Runtime Security Policy | Machine | Code Groups | All_Code
    3. Clique com o botão direito e selecione New para criar um novo code group
    4. Nomeie o code group Meu_Web_Site
    5. Escolha a opção site Site em code group
    6. Coloque o nome do Site como meu_web_site.com
    7. 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.


     
    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_MyCompany_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, 4.0.0.1).
    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=4,0,0,1">
      </OBJECT>

    Isto é tudo o que você precisa fazer.


     
    Posso gravar as imagens adquiridas em uma tabela do MS SQL Server?
    Sim, você pode fazer isto, veja 3 exemplos aqui.




    Copyright © 2008 VintaSoft Ltd. Todos os direitos reservados.