Отзывы


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

Общие вопросы:

 

Распространение:

 

Продажи:

 

Программирование:

 

Web:

 

Базы данных:

 

 

Для каких целей могу я использовать эту библиотеку?

Данная библиотека может использоваться для управления работой сканеров, цифровых и веб камер и любых других устройств, которые поддерживают TWAIN стандарт.

 


 

Что включает в себя библиотека?

Библиотека включает в себя:

  • Файл Vintadoft.Twain.dll - 100% сборка для .NET
  • Документацию в формате MS Help Workshop (файл Help\Vintasoft.Twain.chm)
  • Примеры для MS Visual Basic.NET, MS Visual C#, ASP.NET (каталог Examples)
  • Демо приложения для 32-битных систем (файлы в директориях Bin\v2.0\x86 и Bin\v4.0\x86)
  • Демо приложения для 64-битных систем (файлы в директориях Bin\v2.0\x64 и Bin\v4.0\x64)

 

 

В каких языках программирования могу я использовать библиотеку?

Лицензия разработчика и лицензия для компании позволяют использовать компонент в:

  • Microsoft Visual Studio .NET : Visual Basic, Visual C#, Visual C++, Visual J#
  • Borland Delphi 8.0, Borland C# Builder, Borland C++ BuilderX
  • любых языках программирования и приложениях, совместимых с .NET технологией.

Лицензия для сервера позволяет использовать компонент в:

  • Internet Explorer : ASP.NET, JavaScript, VBScript

 

 

Какие ограничения имеет незарегистрированная версия библиотеки?

Ограничения незарегистрированной версии библиотеки:

  • будет показано окно "О программе" при каждом сканировании изображений
  • любое изображение может быть сохранено на диск или загружено на сервер как BMP файл
  • только черно-белое или серое изображение может быть сохранено на диск или загружено на сервер как JPEG или TIFF файл

Все эти ограничения удалены в зарегистрированной версии библиотеки.

 

 

Я не нашел ответа на свой вопрос. Что мне делать?

Информация по большинству вопросов может быть найдена в документации или в этом FAQ. Если Вы не нашли ответа на свой вопрос, тогда напишите письмо в службу технической поддержки.

 

 

Какие файлы мне нужно включать в дистрибутив моей программы?

Вам нужно включить в дистрибутив Вашей программы только один файл: Vintasoft.Twain.dll. При установке Вашей программы этот файл должен быть помещен в каталог на который была ссылка при компиляции программы.

 

 

Могу я распространять VintaSoft.Twain компонент вместе с моим приложением без какой либо дополнительной оплаты?

Да, Вы можете распространять компонент вместе со своим приложением. Вы платите только за первоначальную регистрацию. Лицензия для компании не имеет ограничений в распространении. Лицензия для разработчика имеет некоторые ограничения в распространении. Распространение с Лицензией для сервера требует оплаты для каждого сервера. Пожалуйста, читайте лицензионное соглашение.

 

 

Что делать если распространение моей программы, созданной на основе Лицензии для разработчика, может превысить 100 копий в текущем году?

Если Вы обладаете Лицензией для разработчика и распространение Вашей программы может превысить 100 копий в текущем году, Вам необходимо обратиться в Отдел продаж "ВинтаСофт", где Вам будет предоставлена возможность апгрейда до Лицензии для организации со скидкой 30% или предложено купить дополнительную Лицензию для разработчика.

 

 

Каковы различия между Лицензией для разработчика и Лицензией для организации?

  • Лицензия для разработчика должна быть использована в разработке программ только одним программистом, чьё имя указано в данных лицензии.
  • Лицензия для организации должна быть использована в разработке программ любым программистом работающим на компанию, чьё название указано в данных лицензии.
  • Лицензия для разработчика может быть использована в разработке программ на любом ПК находящемся по любому физическому адресу.
  • Лицензия для организации должна быть использована в разработке программ на любом ПК находящемся по одному физическому адресу (только в одном офисе).
  • Лицензия для разработчика разрешает распространение программ, включающих в себя предназначенные для распространения файлы SDK, не более 100 копий в год.
  • Лицензия для организации разрешает неограниченное распространение программ, включающих в себя предназначенные для распространения файлы SDK.

 

 

Могу я сделать апгрейд моей "Standard edition" лицензии на эквивалентную "Standard + WPF edition" лицензию?

Да, пожалуйста напишите запрос в Отдел продаж и Вам будет предоставлена возможность купить эквивалентную "Standard + WPF edition" лицензию со скидкой 70%.

 

 

Есть ли разница в использовании моего приложения на настольном ПК или на сервере?

Да, есть. Пожалуйста, прочитайте раздел "Deploying" в документации этого продукта, чтобы понять в чем разница.

Термины: Desktop PC - установлена ОС Windows XP, Vista, 7. Server - установлена ОС Windows Server 2000, 2003, 2008.

 

 

Как мне добавить Vintasoft.Twain.DeviceManager компонент на форму моего .NET приложения?

Чтобы добавить Vintasoft.Twain.DeviceManager компонент на форму необходимо выполнить следующее:

  • Открыть Ваш проект в Visual Studio .NET
  • Открыть нужную форму
  • Открыть панель "Toolbox"
  • Нажать правую кнопку мыши на панели "Toolbox"
  • Выбрать пункт меню "Customize Toolbox..." из появившегося меню
  • Открыть закладку .NET Framework Components
  • Нажать кнопку "Browse..." и выбрать файл Vintasoft.Twain.dll
  • Найти и отметить VintaSoft.Twain компонент
  • Закрыть окно нажав кнопку "Ok"
  • Найти и выбрать на панели "Toolbox" объект Vintasoft.Twain.DeviceManager
  • Поместить Vintasoft.Twain.DeviceManager компонент на форму

 

 

Как мне получить черно-белые изображения (документы)?

Вот пример кода для получения черно-белых изображений:

  [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

 

 

Могу ли я управлять лотком автоматической подачи документов без пользовательского интерфейса?

Вот пример который демонстрирует как можно асинхронно получать изображения из лотка ADF:

  [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

 

 

Могу ли я получать изображения со сканера в модальном цикле без использования пользовательского интерфейса?

Вот пример который демонстрирует как можно синхронно получать изображения от устройства:

  [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

 

 

Мне нужно отсканировать только часть изображения. Как это сделать?

Вот пример который демонстрирует как можно получить только верхнюю часть страницы:

  [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

 

 

Могу ли я выбрать нужное мне устройство без стандартного диалога выбора устройства?

Вот пример который демонстрирует как можно выбрать устройство по его имени:

  [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

 


 

Как мне отключить окно индикатора процесса сканирования при получении изображений без пользовательского интерфейса?

Стандарт TWAIN позволяет отключать окно индикатора процесса сканирования, если пользовательский интерфейс не используется (ShowUI=False). Это можно сделать следующим образом:

  [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

 

 

Я хочу создать собственный индикатор процесса сканирования. Возможно ли это?

Да, это возможно, если изображение передается от сканера к приложению через память (Memory transfer). Для создания своего индикатора процесса сканирования необходимо использовать событие ImageAcquiringProgress, вот пример:

  [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

 

 

Как мне установить разное разрешение для оси X и Y во время сканирования изображений?

Вот пример в котором разрешение по оси X устанавливается равным 200 dpi, а по оси Y равным 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

 

 

Наша организация испрользует сетевой сканер с автоматической подачей листов (ADF) и мы обрабатываем множество документов каждый день. Как мы можем автоматизировать нашу работу? Хотелось бы сохранять каждый документ в отдельном файле.

Вы можете использовать пустую страницу как разделитель документов и определять пустые страницы с помощью метода AcquiredImage.IsBlank. Вот пример:

  [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

 

 

Могу я использовать patch-коды для разделения пакетных заданий? Если да, как мне определить конец пакетного задания?

Вы можете разделять пакетные задания, если будете использовать возможность CAP_JOBCONTROL. Вот пример для 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

 

 

Могу ли я сохранить отсканированное изображение в PDF документ?

Да, это возможно. Отсканированное изабражение может быть сохранено как новый или добавлено в существующий PDF документ. Вот пример:

  [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")

 

 

Как можно получить расширенную информацию об изображении от сканера?

Данный пример демонстрирует как получить информацию о штрих-кодах найденных в отсканированном изображении:

  [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

 

 

Как мне получить 48-битное изобразение со сканера?

Да. VintaSoftTwain.NET SDK позволяет получить 48-битные цветные изображения или 16-битные серые изображения если используется режим передачи изображений через память.

Вот пример демонстрирующий как получить 48-битное цветное изображение со сканера без пользовательского интерфейса:

  [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()


Вот пример демонстрирующий как получить 24-битное цветное изображение со сканера без пользовательского интерфейса:

  [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()


Вот пример демонстрирующий как получить 16-битное серое изображение со сканера без пользовательского интерфейса:

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

  _device.Open()
  _device.PixelType = PixelType.Gray
  _device.BitDepth = 16
  _device.Acquire()

 

 

Как мне создать профиль сканирования для высокоскоросного сканера?

Да, библиотека позволяет загружать/сохранять предопределенные профили сканированя для средне- и высоко-скоросных сканеров.

Вот пример демонстрирующий как можно сохранить настройки текущего устройства в файл:

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


Вот пример демонстрирующий как можно загрузить сохраненные настройки в устройство:

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

 

 

Я получаю сообщение "Cannot initialize the device manager" после попытки открыть менеджер устройств. Что делать?

Вам необходимо:

  • проверить установлен ли TWAIN DSM в системе используя свойство DeviceManager.IsTwainAvailable
  • указать путь к TWAIN DSM используя свойство DeviceManager.TwainDllPath
  • изменить версию TWAIN DSM используя свойство DeviceManager.IsTwain2Compatible.

TWAIN Data Source Manager (DSM) версии 1.X это TWAIN_32.DLL, обычно этот файл находится в папке "C:\Windows\" и включен в стандартную комплектацию всех 32-битных версий Windows.

TWAIN DSM версии 2.X для 32-битных систем состоит из 2 файлов: TWAINDSM.DLL и TWAINDSM32.MSM. Он НЕ включен в стандартную комплектацию Windows. В 32-битных системах файлы DSM должны быть помещены в папку "C:\Windows\System32\". В 64-битных системах файлы DSM должны быть помещены в папку "C:\Windows\SysWow64\".

TWAIN DSM версии 2.X для 64-битных систем состоит из 2 файлов: TWAINDSM.DLL и TWAINDSM64.MSM. Он НЕ включен в стандартную комплектацию Windows. В 64-битных системах файлы DSM должны быть помещены в папку "C:\Windows\System32\".

Последняя версия TWAIN DSM 2.X может быть найдена здесь: http://www.twain.org или http://sourceforge.net/projects/twain-dsm/files/.

 

 

Я не вижу сканер в окне выбора TWAIN устройств моей программы, но вижу в других программах. Почему?

Вы можете скомпилировать Вашу программу с VintaSoftTwain.NET SDK версии 7.0 и выше в режиме "Any CPU" и Ваша программа будет:

  • работать в x32 системах с TWAIN_32.DLL или TWAINDSM.DLL (x32)
  • работать в x64 системах с TWAINDSM.DLL (x64)

Вы можете скомпилировать Вашу программу с VintaSoftTwain.NET SDK версии 7.0 и выше в режиме "x86" (WOW) и Ваша программа будет:

  • работать в x32 системах с TWAIN_32.DLL или TWAINDSM.DLL (x32)
  • работать в x64 системах с TWAIN_32.DLL или TWAINDSM.DLL (x32)

Вы можете скомпилировать Вашу программу с VintaSoftTwain.NET SDK версии 7.0 и выше в режиме "x64" и Ваша программа будет:

  • НЕ работать в x32 системах
  • работать в x64 системах с TWAINDSM.DLL (x64)

Мы рекомендуем использовать режим "x86", т.к. все сканеры имеют 32-битные TWAIN драйверы, но только новые и профессиональные сканеры имеют 64-битные TWAIN драйверы.

 

 

Какие шаги мне нужно выполнить чтобы добавить библиотеку к моему интернет проекту?

Вы должны выполнить следующие действия на стороне сервера:

  • Поместить Ваше веб приложение вместе с файлом Vintasoft.Twain.dll на сервер.
  • Использовать следующий код на Вашей веб странице:

    < 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 >

    Правильный номер версии очень важен!

  • Зарегистрировать Ваше веб приложение на сервере ASP.NET (более подробную информацию читайте в статье Microsoft TechNet).
  • Все (Everyone) должны иметь права на запись в директорию на сервере в которой будут храниться загруженные изображения.


Вы должны выполнить следующие действия на стороне клиента:

  • Должна быть установлена версия .NET Framework 2.0.
  • Нужно использовать Internet Explorer 6.0 и выше ИЛИ Mozilla Firefox 3.0 и выше с плагином IE Tab.
  • Ваш сайт должен быть помечен как Доверенный в Политике Безопасности .NET Framework 2.0.

    Это можно сделать следующим образом:

    • Открыть конфигуратор Microsoft .NET Framework из "Control Panel | Administrative Tools"
    • Выбрать "Runtime Security Policy | Machine | Code Groups | All_Code"
    • Нажать правую кнопку на пункте "All_Code" и выбрать "New",чтобы создать новую кодовую группу
    • Ввести название кодовой группы, например My_Web_Site, нажать кнопку "Далее"
    • Выбрать условие "Site" для кодовой группы
    • Указать "my_web_site.ru" как имя сервера, нажать кнопку "Далее"
    • Установить полный доступ (Full Trust) для кодовой группы
    Для более подробной информации о безопасности .NET Framework, пожалуйста читайте данную статью из MSDN.


    Важно: Сборка скомпиллированная в .NET 4.0 не может быть использована в веб проектах потому что .NET Framework 4.0 не позволяет использовать WinForms компоненты в Internet Explorer. Только сборка скомпиллированная в .NET 2.0 может быть использована в веб проектах.

  • Ваш сайт должен быть добавлен в список Надежных Узлов в Internet Explorer 8.0 и выше.

    Это можно сделать следующим образом:

    • Открыть Internet Explorer и выбрать пункт меню "Сервис => Свойства обозревателя", откроется окно "Свойства обозревателя".
    • Выбрать закладку "Безопасность" и иконку "Надежные узлы", нажать кнопку "Узлы", откроется окно "Надежные узлы".
    • Ввести Url Вашего сайта, снять флажок "Для всех узлов этой зоны требуется проверка серверов...", если это нужно.
    • Нажать кнопку "Добавить" и затем кнопку "Закрыть". Теперь Ваш сайт добавлен в список надежных узлов..
    Для более подробной информации, пожалуйста читайте How Internet Explorer determines permissions for .NET Framework assemblies.

 

 

Я хочу создать скрипт на моем веб сервере, который будут использовать пользователи для автоматической установки необходимых параметров безопасности .NET Framework на компьютере пользователя. Могу я это сделать?

Вы должны создать скрипт, который будет запускать следующую команду:


caspol.exe -q -machine -addgroup All_Code -site www.my-company.com FullTrust
-name VSTwain_MyКомпания_Site
-description "This permission set grants the right to use VintaSoftTwain.NET SDK on www.my-company.com."

 

 

Я получил сообщение "Your .NET Framework Security settings must be configured to run the components in your browser" во время запуска моего веб приложения. Что я делаю не верно?

Прежде всего Вы должны настроить безопасность .NET Framework как описано здесь.

Далее Вам необходимо проверить версию Vintasoft.Twain.dll которую Вы используете (например, 7.0.0.1).

После этого Вы должны правильно описать объект OBJECT на Вашей веб странице. Использование правильного номера версии очень важно!

Вот пример:

< 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 >

Это все что Вы должны сделать.

 

 

Могу ли я загрузить изображения полученные со сканера на веб сервер использующий интегрированную аутентификацию Windows (integrated windows authentication) ?

Да, библиотека позволяет использовать любые методы аутентификации поддерживаемые .NET Framework.

Следующий пример демонстрирует как отослать изображения от имени текущего пользователя Windows:

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

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


А вот пример демонстрирующий как можно одновременно использовать несколько методов авторизации:

  [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
  ...

 

 

Могу ли я загрузить изображения полученные со сканера на веб сервер использующий аутентификацию с помощью cookies (Cookieless Forms authentication) ?

Да, Вы можете это сделать, пожалуйста посмотрите примеры 8 и 9 расположенные здесь.

 

 

Как получить изображения со сканера, сохранить их как PDF поток в памяти и загрузить PDF поток на сервер в JavaScript?

Если Вы хотите использовать VintaSoftTwain.NET SDK в JavaScript Вы должны знать следующее:

  • JavaScript не позволяет обращаться к Индексатору класса, т.е. строка кода "device.AcquiredImages[0]" является неверной в JavaScript
  • JavaScript ничего не знает о перечислении ImageFileFormat. Вот список констант перечисления ImageFileFormat: BMP - 0, JPEG - 1, TIFF - 2, PNG - 3, GIF - 4, PDF - 5.
Вот пример демонстрирующий, как сохранить изображения полученные со сканера в PDF поток и загрузить поток на сервер, после того как все изображения получены:

  [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)

  ...

 

 

Могу я сохранять приобретенные изображения в таблице MS SQL сервера?

Да, Вы можете это сделать, пожалуйста смотрите пример 3 здесь.

 

 

Я хочу сохранять изображения полученные со сканера как PDF документы в базе данных. Могу я это делать?

Да, Вы можете сохранить полученные изображения сначала в поток (память) и потом сохранить данные из потока (памяти) в базу данных.

Вот пример который демонстрирует как можно сохранить каждое полученное изображение в базе данных как отдельный PDF документ:

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


А вот пример который демонстрирует как сохранить все полученные изображения в базе данных как один многостраничный PDF документ:

  [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