Recomendações


Got it downloaded and we will put that to work right away! We purchased a .Net twain control set for a custom written application using cameras about three years ago. We found Vintasoft in an Internet search. When we updating the software, we purchased the newer version that we needed.

Our developer had said it was well written code. Thank you once again.

Peter Philbrick
IT Director | ComCor, Inc.





VintaSoftTwain.NET SDK - FAQ

Questões gerais:

 

Redistribuição:

 

Vendas:

 

Programação:

 

Web:

 

Bases de dados:

 

 

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

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 SDK contém:

  • Arquivo Vintasoft.Twain.dll - a 100% .NET assembly
  • 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\v2.0\x86 and Bin\v4.0\x86 directories)
  • Demo applications for 64-bit systems (files in Bin\v2.0\x64 and Bin\v4.0\x64 directories)

 

 

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.

 

 

O que fazer quando minha licença individual de programador para a redistribuição da aplicação estiver prestes a exceder 100 cópias em um ano?

Se você possuir a licença individual para programador você precisa entrar em contato com o pessoal de vendas e explicar que você está prestes a exceder a quantidade de 100 cópias durante o ano. Será oferecido a oportunidade de atualizar sua licença individual de programador para uma licença sítio com desconto de 30% ou para comprar uma licença individual para programador adicional.

 

 

Qual a diferença entre licença individual para programador e licença sítio?

  • Licença individual para programador precisa ser usado no desenvolvimento de software por apenas um programador, onde o nome deste programador será indicado nos dados da licença.
  • A licença sítio precisa ser usado no desenvolvimento de software por qualquer programador que trabalhe em uma empresa que tenha seus dados indicados na licença.
  • A licença individual de programador pode ser usada para o desenvolvimento de software em um PC localizado em qualquer endereço físico.
  • A licença sítio pode ser usada no desenvolvimento de software em qualquer PC localizado em um único endereço físico (apenas em um escritório).
  • Licença individual para programador permite distribuiçăo de livre de royalties de uma aplicaçăo e o SDK redistribuível até o limite de 100 cópias em um ano.
  • A licença sítio permite ilimitada distribuição livre de royalties de uma aplicação e o SDK redistribuível.

 

 

Posso atualizar minha licença Standard para a licença Standard + WPF equivalente?

Sim, por favor contate o departamento de vendas VintaSoft e você poderá ter a opção de comprar a licença Standard + WPF equivalente com 70% de desconto.

 

 

Existe uma diferença em fazer o deploy de minha aplicação em um desktop PC ou em um Server?

Sim, existe. Por favor leia a sessão "Deploying" na documentação do produto para entender a diferença.

Termos: Desktop PC – Windows XP, Vista, 7 SO instalado. Server – Windows Server 2000, 2003, 2008 SO instalado.

 

 

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

Para adicionar o componente Vintasoft.Twain.DeviceManager 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.DeviceManager
  • Coloque o componente Vintadoft.Twain.DeviceManager 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:

  [VB.NET]
  Dim _device As Vintasoft.Twain.Device
  ...

  Private Sub AcquireBlackWhiteImages()
      _device.ShowUI = False
      _device.DisableAfterAcquire = True

      ' open the device
      _device.Open()
      ' set necessary pixel type
      _device.PixelType = PixelType.BW

      ' acquire images from device
      _device.Acquire()
  End Sub

 

 

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

Aqui um exemplo que mostra como obter imagens de forma assíncrona de documentos fornecidos:

  [VB.NET]
  Dim _device As Vintasoft.Twain.Device
  ...

  Private Sub AcquireImagesFromAdf()
      ' set scan settings
      _device.ShowUI = False
      _device.DisableAfterAcquire = True
      _device.Open()
      _device.PixelType = PixelType.RGB
      _device.UnitOfMeasure = UnitOfMeasure.Inches
      _device.Resolution = New Resolution(200, 200)

      ' set document feeder settings
      If _device.DocumentFeeder.Present Then
          _device.DocumentFeeder.Enabled = True
          _device.XferCount = -1

          ' enable duplex if possible
          If _device.DocumentFeeder.DuplexMode <> DuplexMode.None Then
              _device.DocumentFeeder.DuplexEnabled = True
          End If

          ' acquire images from device
          If _device.DocumentFeeder.PaperDetectable Then
              If _device.DocumentFeeder.Loaded Then
                  _device.Acquire()
              End If
          Else
              _device.Acquire()
          End If
      End If
  End Sub

  ' Handler of the ImageAcquired event.
  Private Sub _device_ImageAcquired(ByVal sender As System.Object, _
                                    ByVal e As Vintasoft.Twain.ImageAcquiredEventArgs)
      e.Image.Save("c:\multipage.tif")
  End Sub

  ' Handler of the ScanCompleted event.
  Private Sub _device_ScanCompleted(ByVal sender As System.Object, _
                                    ByVal e As System.EventArgs)
      ' do not close the device if UI is used
      If Not _device.ShowUI Then
          _device.Close()
          MsgBox("Scan completed.")
      End If
  End Sub

 

 

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

Aqui um exemplo que mostra como adquirir imagens de forma síncrona a partir do dispositivo:

  [VB.NET]
  Friend Shared Sub Main(args As String())
      Try
          Using deviceManager As New DeviceManager()
              ' open the device manager
              deviceManager.Open()

              ' get reference to the current device
              Dim device As Device = deviceManager.CurrentDevice

              ' open the device
              device.Open()

              ' set acquisition parameters
              device.TransferMode = TransferMode.Memory
              device.ShowUI = False
              device.DisableAfterAcquire = True
              device.PixelType = PixelType.BW

              ' create directory for TIFF file
              Dim directoryForImages As String = _
                  Path.GetDirectoryName(Directory.GetCurrentDirectory())
              directoryForImages = Path.Combine(directoryForImages, "Images")
              If Not Directory.Exists(directoryForImages) Then
                  Directory.CreateDirectory(directoryForImages)
              End If

              Dim multipageTiffFilename As String = Path.Combine(directoryForImages, _
                                                                 "multipage.tif")

              ' acquire image(s) from the device
              Dim acquireModalState1 As AcquireModalState = AcquireModalState.None
              Dim imageIndex As Integer = 0
              Do
                  acquireModalState1 = device.AcquireModal()
                  Select Case acquireModalState1
                      Case AcquireModalState.ImageAcquired
                          ' save image to file
                          device.AcquiredImages.Last.Save(multipageTiffFilename)
                          ' output current state
                          imageIndex = imageIndex + 1
                          Console.WriteLine(String.Format("Image{0} is saved.", _
                                                          imageIndex))

                      Case AcquireModalState.ScanCompleted
                          ' close device and device manager
                          CloseDeviceAndDeviceManager(deviceManager, device)
                          ' output current state
                          Console.WriteLine("Scan completed.")

                      Case AcquireModalState.ScanCanceled
                          ' close device and device manager
                          CloseDeviceAndDeviceManager(deviceManager, device)
                          ' output current state
                          Console.WriteLine("Scan canceled.")

                      Case AcquireModalState.ScanFailed
                          ' close device and device manager
                          CloseDeviceAndDeviceManager(deviceManager, device)
                          ' output current state
                          Console.WriteLine(String.Format("Scan failed: {0}", _
                                                          deviceManager.ErrorString))
                  End Select
              Loop While acquireModalState1 <> AcquireModalState.None
          End Using
      Catch ex As TwainException
          Console.WriteLine("Error: " + ex.Message)
      End Try

      Console.ReadLine()
  End Sub

  ' Close device and device manager.
  Private Shared Sub CloseDeviceAndDeviceManager(deviceManager As DeviceManager, _
                                                 device As Device)
      If device.State = DeviceState.Opened Then
          ' close the device
          device.Close()
      End If

      ' close the device manager
      deviceManager.Close()
  End Sub

 

 

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

Aqui um exemplo que mostra como adquirir apenas a parte de cima de uma página:

  [VB.NET]
  Private Sub AcquirePartOfImage()
      Using deviceManager As New DeviceManager()
          Try
              ' open the device manager
              deviceManager.Open()

              deviceManager.SelectDevice()

              ' get reference to current device
              Dim device As Device = deviceManager.CurrentDevice

              ' open the device
              device.Open()

              ' set acquisition parameters
              device.ShowUI = False
              device.DisableAfterAcquire = True
              ' set image layout (get only the top half of the page)
              device.UnitOfMeasure = UnitOfMeasure.Inches
              Dim imageLayout As System.Drawing.RectangleF = device.ImageLayout.Get()
              device.ImageLayout.Set(0, 0, imageLayout.Width, imageLayout.Height / 2)

              Dim tiffFilename As String = Path.Combine(Directory.GetCurrentDirectory(), _
                                                        "multipage.tif")

              ' acquire images from device
              Dim acquireModalState1 As AcquireModalState = AcquireModalState.None
              Do
                  acquireModalState1 = device.AcquireModal()
                  Select Case acquireModalState1
                      Case AcquireModalState.ImageAcquired
                          ' save acquired image to multipage TIFF file
                          device.AcquiredImages.Last.Save(tiffFilename)

                      Case AcquireModalState.ScanCompleted, _
                           AcquireModalState.ScanCanceled, _
                           AcquireModalState.ScanFailed
                          ' close the device
                          device.Close()
                          ' close the device manager
                          deviceManager.Close()
                  End Select
              Loop While acquireModalState1 <> AcquireModalState.None
          Catch ex As TwainException
              Console.WriteLine("Error: " + ex.Message)
              Console.ReadLine()
          End Try
      End Using
  End Sub

 

 

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

Aqui um exemplo que mostra como selecionar um dispositivo pelo nome:

  [VB.NET]
  Private Sub SelectDeviceByName(ByVal deviceName As String)
      ' create TWAIN device manager
      Using deviceManager As New DeviceManager()
          ' open TWAIN device manager
          deviceManager.Open()

          ' select the device by device name
          Dim device As Device = Nothing
          For i As Integer = 0 To deviceManager.Devices.Length - 1
              If deviceManager.Devices(i).Info.ProductName = deviceName Then
                  deviceManager.CurrentDeviceIndex = i
                  device = deviceManager.CurrentDevice
                  Exit For
              End If
          Next

          ' throw exception if device is not found
          If device Is Nothing Then
              Throw New ApplicationException("Device is not found.")
          End If

          ' acquire images from the device
          device.Acquire()
      End Using
  End Sub

 


 

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:

  [VB.NET]
  Dim _device As Vintasoft.Twain.Device
  ...

  Private Sub AcquireImagesWithoutUiAndIndicator()
      _device.ShowUI = False
      _device.ShowIndicators = False
      _device.DisableAfterAcquire = True

      ' acquire images from device
      _device.Acquire()
  End Sub

 

 

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 ImageAcquiringProgress. Aqui um exemplo:

  [VB.NET]
  Dim _device As Vintasoft.Twain.Device
  ...

  ' Handler of the Device.ImageAcquiringProgress event
  Private Sub _device_ImageAcquiringProgress(ByVal sender As System.Object, _
                      ByVal e As Vintasoft.Twain.ImageAcquiringProgressEventArgs)
      ProgressBar1.Value = e.Progress
  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 200 dpi e Y com 400 dpi:

  [VB.NET]
  Dim _device As Vintasoft.Twain.Device
  ...

  Private Sub AcquireBlackWhiteImages()
      _device.ShowUI = False
      _device.DisableAfterAcquire = True

      ' open the device
      _device.Open()
      ' set scan settings
      _device.PixelType = PixelType.BW
      _device.UnitOfMeasure = UnitOfMeasure.Inches
      _device.Resolution = New Resolution(200, 400)

      ' acquire images from device
      _device.Acquire()
  End Sub

 

 

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 AcquiredImage.IsBlank. Aqui um exemplo:

  [VB.NET]
  Dim _device As Vintasoft.Twain.Device
  Dim _documentCounter as Integer
  ...

  Private Sub AcquireImages()
      ' set scan settings
      _device.ShowUI = False
      _device.DisableAfterAcquire = True
      _device.Open()
      _device.PixelType = PixelType.BW
      _device.UnitOfMeasure = UnitOfMeasure.Inches
      _device.Resolution = New Resolution(300, 300)

      ' set settings of the internal image buffer
      _device.AcquiredImages.Capacity = 1
      _device.AcquiredImages.AutoClean = True
      _device.AcquiredImages.TiffMultiPage = True        
      _device.AcquiredImages.TiffCompression = TiffCompression.Auto

      ' set document feeder settings
      If _device.DocumentFeeder.Present Then
          _device.DocumentFeeder.Enabled = True
          _device.XferCount = -1

          ' enable duplex if possible
          If _device.DocumentFeeder.DuplexMode <> DuplexMode.None Then
              _device.DocumentFeeder.DuplexEnabled = True
          End If

          ' acquire images from device
          If _device.DocumentFeeder.PaperDetectable Then
              If _device.DocumentFeeder.Loaded Then
                  _device.Acquire()
              End If
          Else
              _device.Acquire()
          End If
      End If
  End Sub

  ' Handler of the ImageAcquired event.
  Private Sub _device_ImageAcquired(ByVal sender As System.Object, _
                      ByVal e As Vintasoft.Twain.ImageAcquiredEventArgs)
        If e.Image.IsBlank() Then
            _documentCounter = _documentCounter + 1
        End If
        Try
            e.Image.Save("c:\documents\doc" + Str(_documentsCounter) + ".pdf")
        Catch ex As PdfException
            MsgBox(ex.Message)
        End Try
  End Sub

  ' Handler of the ScanCompleted event.
  Private Sub _device_ScanCompleted(ByVal sender As System.Object, _
                                    ByVal e As System.EventArgs)
      ' do not close the device if UI is used
      If Not _device.ShowUI Then
          _device.Close()
          MsgBox("Scan 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:

  [VB.NET]
  Imports Vintasoft.Twain

  Dim _deviceManager As DeviceManager
  Dim _device As Device
  Dim _jobCounter As Integer = -1

  Private Sub ScanWithJobControlButton_Click(ByVal sender As System.Object, _
                                       ByVal e As System.EventArgs) _
                                       Handles ScanWithJobControlButton.Click
      Try
          ' create and open device manager
          _deviceManager = New DeviceManager(Me)
          _deviceManager.Open()

          ' get reference to current device
          _device = _deviceManager.CurrentDevice
          ' create handlers of events
          AddHandler _device.ImageAcquired, AddressOf _device_ImageAcquired
          AddHandler _device.ScanCompleted, AddressOf _device_ScanCompleted
          AddHandler _device.ScanCanceled, AddressOf _device_ScanCanceled
          AddHandler _device.ScanFailed, AddressOf _device_ScanFailed

          ' set scanning settings
          _device.ShowUI = False
          _device.DisableAfterAcquire = True
          _device.AcquiredImages.Capacity = 1
          _device.AcquiredImages.TiffMultiPage = True
          _device.Open()
          _device.JobControl = JobControl.DetectAndIncludeJobSeparatorAndContinueScanning
          _jobCounter = _jobCounter + 1

          ' acquire images from device
          _device.Acquire()
      Catch ex As TwainException
          MsgBox(ex.Message)
      End Try
  End Sub
 
  Private Sub _device_ImageAcquired(ByVal sender As System.Object, _
                                    ByVal e As Vintasoft.Twain.ImageAcquiredEventArgs)
      If _device.EndOfJob Then
          _jobCounter = _jobCounter + 1
      Else
          Try
              e.Image.Save("c:\job" + Str(_jobCounter) + ".tif")
          Catch ex As ImageProcessingException
              MsgBox(ex.Message)
          End Try
      End If
  End Sub

  Private Sub _device_ScanCompleted(ByVal sender As System.Object, _
                                    ByVal e As System.EventArgs)
      _device.Close()
      MsgBox("Scan completed.")
  End Sub

  Private Sub _device_ScanCanceled(ByVal sender As System.Object, _
                                   ByVal e As System.EventArgs)
      _device.Close()
      MsgBox("Scan canceled.")
  End Sub

  Private Sub _device_ScanFailed(ByVal sender As System.Object, _
                                 ByVal e As Vintasoft.Twain.ScanFailedEventArgs)
      _device.Close()
      MsgBox("Scan failed: " + e.ErrorString)
  End Sub

 

 

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:

  [VB.NET]
  Dim _device As Vintasoft.Twain.Device
  ...

  ' set settings of PDF document
  _device.AcquiredImages.PdfMultiPage = True
  _device.AcquiredImages.PdfDocumentInfo.Author = "VintaSoft Ltd."
  _device.AcquiredImages.PdfDocumentInfo.Title = "Documents acquired from " + _
                                                 _device.Info.ProductName
  _device.AcquiredImages.PdfDocumentInfo.Creator = "VintaSoftTwain.NET SDK"
  _device.AcquiredImages.PdfDocumentInfo.ModificationDate = DateTime.Now
  ' save the first acquired image as new PDF document
  _device.AcquiredImages(0).Save("c:\test.pdf")
  ' add the second acquired image to existing PDF document
  _device.AcquiredImages(1).Save("c:\test.pdf")
  ' add the third acquired image to existing PDF document
  _device.AcquiredImages(2).Save("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:

  [VB.NET]
  Private Sub GetExtendedImageInfo()
      Using deviceManager As New DeviceManager()
          Try
              ' open the device manager
              deviceManager.Open()

              deviceManager.SelectDevice()

              ' get reference to current device
              Dim device As Device = deviceManager.CurrentDevice

              ' open the device
              device.Open()

              ' set acquisition parameters
              device.ShowUI = False
              device.DisableAfterAcquire = True

              ' specify that image info is necessary
              device.ExtendedImageInfo.Add(New _
                     ExtendedImageInfo(ExtendedImageInfoId.BarcodeCount))
              device.ExtendedImageInfo.Add(New _
                     ExtendedImageInfo(ExtendedImageInfoId.BarcodeType))
              device.ExtendedImageInfo.Add(New _
                     ExtendedImageInfo(ExtendedImageInfoId.BarcodeTextLength))
              device.ExtendedImageInfo.Add(New _
                     ExtendedImageInfo(ExtendedImageInfoId.BarcodeText))

              Dim tiffFilename As String = Path.Combine(Directory.GetCurrentDirectory(), _
                                                        "multipage.tif")

              ' acquire images from device
              Dim acquireModalState1 As AcquireModalState = AcquireModalState.None
              Do
                  acquireModalState1 = device.AcquireModal()
                  Select Case acquireModalState1
                      Case AcquireModalState.ImageAcquired
                          ' save acquired image to multipage TIFF file
                          device.AcquiredImages.Last.Save(tiffFilename)

                          Dim barcodeCount As ExtendedImageInfo = device.ExtendedImageInfo(0)
                          If barcodeCount.Items IsNot Nothing Then
                              If barcodeCount.Items.Length > 0 Then
                                  If barcodeCount.Items(0) > 0 Then
                                      Dim barcodeType As ExtendedImageInfo = _
                                                         device.ExtendedImageInfo(1)
                                      Dim barcodeTextLength As ExtendedImageInfo = _
                                                               device.ExtendedImageInfo(2)
                                      Dim barcodeText As ExtendedImageInfo = _
                                                         device.ExtendedImageInfo(3)
                                      Dim infoString As String
                                      For i As Integer = 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.StringItems(i) + "'"
                                          Else
                                              infoString = "BarcodeText=Undefined "
                                          End If
                                          Console.WriteLine(infoString)
                                      Next
                                  End If
                              End If
                          End If

                      Case AcquireModalState.ScanCompleted, AcquireModalState.ScanCanceled, _
                                                            AcquireModalState.ScanFailed
                          ' close the device
                          device.Close()
                          ' close the device manager
                          deviceManager.Close()
                  End Select
              Loop While acquireModalState1 <> AcquireModalState.None
          Catch ex As TwainException
              Console.WriteLine("Error: " + ex.Message)
              Console.ReadLine()
          End Try
      End Using
  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.

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

  [VB.NET]
  Dim _device As Vintasoft.Twain.Device
  ...

  _device.Open()
  _device.PixelType = PixelType.RGB
  _device.BitDepth = 16 ' 16 - for Epson scanners, 48 - for Canon scanners
  _device.Acquire()


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

  [VB.NET]
  Dim _device As Vintasoft.Twain.Device
  ...

  _device.Open()
  _device.PixelType = PixelType.RGB
  _device.BitDepth = 8 ' 8 - for Epson scanners, 24 - for Canon scanners
  _device.Acquire()


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

  [VB.NET]
  Dim _device As Vintasoft.Twain.Device
  ...

  _device.Open()
  _device.PixelType = PixelType.Gray
  _device.BitDepth = 16
  _device.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:

  [VB.NET]
  ...
  _device.Open()
  Dim fs As FileStream = New FileStream("scanner-setup.xml", FileMode.Append, _
                                        FileAccess.Write)
  _device.SaveSettings(fs)
  fs.Close()
  ...


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

  [VB.NET]
  ...
  _device.OpenDataSource()
  Dim fs As FileStream = New FileStream("scanner-setup.xml", FileMode.Open, _
                                        FileAccess.Read)
  _device.LoadSettings(fs)
  fs.Close()
  _device.Acquire()
  ...

 

 

Eu recebi a mensagem "Cannot initialize the device manager" quando eu estava abrindo o gerenciador de dispositivos. Como resolver este problema?

Você precisa:

  • verificar se o TWAIN DSM está instalado em seu sistema usando a propriedade DeviceManager.IsTwainAvailable
  • especifique o path para o TWAIN DSM usando a propriedade DeviceManager.TwainDllPath
  • mude a versão do TWAIN DSM usando a propriedade DeviceManager.Twain2Compatible.

TWAIN Data Source Manager (DSM) v1.X é o TWAIN_32.DLL, normalmente este arquivo está localizado no diretório "C:\Windows\" e incluido nos pacotes de distribuição de todas as versões do Windows de 32-bit.

TWAIN DSM v2.X para sistemas 32-bit consiste de 2 arquivos: TWAINDSM.DLL e TWAINDSM32.MSM. Este DSM NÃO é incluído na distribuição do pacote do Windows. Em sistemas 32-bit os arquivos DSM precisam ser colocados no diretório "C:\Windows\System32\". Em sistemas 64-bit os arquivos DSM precisam ser colocados no diretório "C:\Windows\SysWow64\".

TWAIN DSM v2.X para sistemas 64-bit consiste de 2 arquivos: TWAINDSM.DLL e TWAINDSM64.MSM. Este DSM NÃO é incluído na distribuição do pacote do Windows. Em sistemas 64-bit os arquivos DSM precisam ser colocados no diretório "C:\Windows\System32\".

A última versão do TWAIN DSM 2.X pode ser encontrada aqui: http://www.twain.org ou http://sourceforge.net/projects/twain-dsm/files/.

 

 

Eu não consigo ver os dispositivos TWAIN nas opções da minha aplicação, mas eu posso ver os dispositivos em outra aplicação. Por que?

Você pode compilar sua aplicação usando a versão 7.0 ou maior do VintaSoftTwain.NET SDK no modo "Any CPU" e sua aplicação poderá:

  • Funcionar em sistemas x32 com o TWAIN_32.DLL ou TWAINDSM.DLL (x32)
  • Funcionar em sistemas x64 com o TWAINDSM.DLL (x64)

Você pode compilar sua aplicação usando a versão 7.0 ou maior do VintaSoftTwain.NET SDK no modo "x86" (WOW) e sua aplicação poderá:

  • Funcionar em sistemas x32 com o TWAIN_32.DLL ou TWAINDSM.DLL (x32)
  • Funcionar em sistemas x64 com o TWAIN_32.DLL ou TWAINDSM.DLL (x32)

Você pode compilar sua aplicação usando a versão 7.0 ou maior do VintaSoftTwain.NET SDK no modo "x64" e sua aplicação poderá:

  • Não funcionar em sistemas x32
  • Funcionar em sistemas x64 com o TWAINDSM.DLL (x64)

Nós recomendamos usar o modo "x86" porque todos os scanners tem o driver x32 TWAIN, mas apenas os scanners profissionais e novos tem o driver x64 TWAIN.

 

 

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="TwainDeviceManager" WIDTH=1 HEIGHT=1
    CLASSID="http://your-server/path-on-server/Vintasoft.Twain.dll#Vintasoft.Twain.DeviceManager"
    CODEBASE="http://your-server/path-on-server/Vintasoft.Twain.dll#version=7,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.

  • Registre sua aplicação web no servidor ASP.NET (para mais informações por favor leia este Microsoft TechNet artigo)
  • 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:

  • .NET Framework 2.0 deve 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 2.0.

    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.

    Importante: Apenas aplicativos compilados no .NET 2.0 podem ser usados na aplicação-web. Os aplicativos compilados no .NET 4.0 não podem ser usados na aplicação porque o .NET 4.0 não permite usar os controles WinForms no Internet Explorer.

  • 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 VintaSoftTwain.NET SDK 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, 7.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="TwainDeviceManager" WIDTH=1 HEIGHT=1
CLASSID="http://your-server/path-on-server/Vintasoft.Twain.dll#Vintasoft.Twain.DeviceManager"
CODEBASE="http://your-server/path-on-server/Vintasoft.Twain.dll#version=7,0,0,1">
< /OBJECT >

Isto é tudo o que você precisa fazer.

 

 

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:

  [VB.NET]
  Dim _httpUpload As Vintasoft.Http.HttpUpload
  ...

  _httpUpload.Url = "http://localhost/vstwaindemo/imageupload.aspx"
  _httpUpload.UseDefaultCredentials = True
  ...


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

  [VB.NET]
  Dim _httpUpload As Vintasoft.Http.HttpUpload
  ...

  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))
  _httpUpload.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.

 

 

Como obter imagens de um escaner, salvar as imagens obtidas como stream PDF e fazer o upload para o servidor em JavaScript?

Se você usar o VintaSoftTwain.NET SDK no JavaScript você deve saber que:

  • O indexador da classe não pode ser acessado de um JavaScript, ex. a linha "device.AcquiredImages[0]" não está correto no JavaScript
  • O JavaScript não sabe nada sobre a enumeração do ImageFileFormat. Aqui são as constantes da enumeração do ImageFileFormat: BMP - 0, JPEG - 1, TIFF - 2, PNG - 3, GIF - 4, PDF - 5.
O exemplo seguinte mostra como salvar imagens adquiridas como stream PDF para a memória e fazer o upload do stream PDF para o servidor (depois que todas as imagens forem adquiridas):

  [JavaScript]
  ...

  // acquire image(s) from the device
  var acquireModalState;
  var acquireStatusString = "Scan canceled";
  var mem;
  var firstImage = true;
  do
  {
    acquireModalState = device.AcquireModal();
	      
    // image acquired
    if (acquireModalState == 2)
    {
      if (firstImage)
      {
        // get the first image as PDF stored in the memory
        mem = device.AcquiredImages.Last.GetAsStream(5);
        firstImage = false;
      }
      else
      {
        // add image to PDF stored in the memory
        device.AcquiredImages.Last.SaveToStream(mem, 5);
      }
    }
	      
    // scan completed
    else if (acquireModalState == 3)
    {
      acquireStatusString = "Scan completed";

      // upload data from the memory stream (mem) to the server
      ...
    }

    // scan failed
    else if (acquireModalState == 4)
      acquireStatusString = "Scan failed";

    // scan canceled
    else if (acquireModalState == 5)
      acquireStatusString = "Scan canceled";
  }
  while (acquireModalState != 0)

  ...

 

 

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:

  [VB.NET]
  Dim mem As MemoryStream = _device.AcquiredImages(0).GetAsStream(ImageFileFormat.PDF)


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

  [VB.NET]
  Dim mem As MemoryStream = _device.AcquiredImage(0).GetAsStream(ImageFileFormat.PDF)
  Dim i As Integer
  For i = 1 To _device.AcquiredImages.Count - 1
      _device.AcquiredImages(i).SaveToStream(mem, ImageFileFormat.PDF)
  Next i