VintaSoftTwain.NET SDK - FAQ

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

 

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

 

Установка:

 

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

 

Web:

 

Базы данных:

 

 

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

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

 


 

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

The library contains:

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

 

 

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

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

  • 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 компонент вместе с моим приложением без какой либо дополнительной оплаты?

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

 

 

Могу я использовать библиотеку VintaSoftTwain.NET в 64-х битной версии Windows?

Да, Вы можете использовать библиотеку VintaSoftTwain.NET в 64-х битной версии Windows.

Вот список шагов которые необходимо выполнить:

  • Загрузить последнюю версию Менеджера Устройств TWAIN с сайта TWAIN (файл twaindsm-X.Y.Z.win.bin.zip)
  • Поместить twaindsm.dll и twaindsm32.msm (файлы из "twaindsm-X.Y.Z.win.bin.zip\Twain32" directory) в каталог "Windows\SysWow64\"
  • Поместить twaindsm.dll и twaindsm64.msm (файлы из "twaindsm-X.Y.Z.win.bin.zip\Twain64" directory) в каталог "Windows\System32\"
  • Указать путь к Менеджеру Устройств TWAIN в Вашей программе:
      ...
      VSTwain1.TwainDllPath = "c:\Windows\SysWow64\twaindsm.dll"
      VSTwain1.IsTwain2Compatible = True
      VSTwain1.StartDevice()
      ...
    

 

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

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

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

 

 

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

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

  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

 

 

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

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

  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

 

 

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

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

  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

 

 

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

Используйте следующий код чтобы получить часть изображения ограниченную прямоугольником (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()

 

 

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

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

  VSTwain1.StartDevice()
  For i = 0 To VSTwain1.SourcesCount - 1
      sourceInfo = VSTwain1.GetSourceInfo(i)
      If sourceInfo.IsTwain2Compatible Then
          MsgBox "Device " + sourceInfo.ProductName + _
                 " is TWAIN 2.0 compatible."
      Else
          MsgBox "Device " + sourceInfo.ProductName + _
                 " is not TWAIN 2.0 compatible."
      End If
  Next
А этот код для выбора первого устройства:
  VSTwain1.StartDevice()
  VSTwain1.SourceIndex = 0
  .....
  VSTwain1.Acquire
Хотя самый лучший вариант следующий:
  VSTwain1.StartDevice()
  For i = 0 To VSTwain1.SourcesCount - 1
     If VSTwain1.GetSourceProductName(i) = "Your device name" Then
       VSTwain1.SourceIndex = i
       break
    End If
  Next
  .....
В этом случае необходимо знать правильное название устройства.

 


 

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

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

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

 

 

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

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

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

 

 

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

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

 

 

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

Да, это возможно, если использовать метод AcquireModal, вот пример для 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);
      }
    }
    .....
  }
  .....

 

 

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

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

  Dim documentsCounter as Integer

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

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

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

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

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

 

 

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

Вы можете разделять пакетные задания, если будете использовать возможность CAP_JOBCONTROL. Вот пример для Visual Basic .NET:

  Dim jobsCounter As Integer
  
  Private Sub Form_Load()
    jobsCounter = -1
  End Sub
  
  Private Sub Scan_Click()
    VSTwain1.StartDevice
    VSTwain1.MaxImages = 1
    VSTwain1.ShowUI = false
    VSTwain1.DisableAfterAcquire = true
    VSTwain1.TiffMultiPage = true
    VSTwain1.OpenDataSource
    ' 1 - Detect and include job separator and continue scanning.
    ' 3 - Detect and exclude job separator and continue scanning.
    VSTwain1.JobControl = 1
    jobsCounter = jobsCounter + 1
    VSTwain1.Acquire
  End Sub
  
  Private Sub VSTwain1_ImageAcquired(ByVal sender As Object, _
                       ByVal e As System.EventArgs) _
                       Handles VSTwain1.ImageAcquired
      If VSTwain1.EndOfJob Then
          jobsCounter = jobsCounter + 1
      Else
          VSTwain1.SaveImage 0, "c:\job"+jobsCounter.ToString()+".tif"
      End If
  End Sub
  
  Private Sub VSTwain1_ScanCompleted(ByVal sender As Object, _
                       ByVal e As System.EventArgs) _
                       Handles VSTwain1.ScanCompleted
      If VSTwain1.ErrorCode <> ErrorCode.None Then
          MsgBox(VSTwain1.ErrorString)
      Else
          MsgBox("Scan process is completed.")
      End If
  End Sub
  .....

 

 

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

Методы GetImage/GetCurrentImage возвращают новый объект Bitmap и Вы можете использовать его в своей коллекции:

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

 

 

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

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

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

 

 

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

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

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

 

 

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

Да. Библиотека VintaSoftTwain.NET позволяет получить 48-битные цветные изображения или 16-битные серые изображения. Изображения могут быть сохранены без потери глубины цвета только в TIFF файлы.

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

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

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

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

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

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

 

 

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

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

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

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

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

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

 

 

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

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

  • Поместить файл Vintasoft.Twain.dll на сервер.
  • Использовать следующий код на Вашей веб странице:
  • < OBJECT ID="VSTwain1" WIDTH=1 HEIGHT=1
    CLASSID="http://your-server/path-on-server/Vintasoft.Twain.dll#Vintasoft.Twain.VSTwain"
    CODEBASE="http://your-server/path-on-server/Vintasoft.Twain.dll#version=5,0,5,3">
    < /OBJECT >

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

  • Все (Everyone) должны иметь права на запись в директорию на сервере в которой будут храниться загруженные изображения.


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

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

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

    • Открыть конфигуратор 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.

  • Ваш сайт должен быть добавлен в список Надежных Узлов в 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 VSTwain object 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 которую Вы используете (например, 5.0.5.3).

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

Вот пример:

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

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

 

 

Я пытаюсь выбрать устройство с помощью свойства SourceIndex в Internet Explorer, но получаю ошибку. Почему?

Каждый объект на веб странице в Internet Explorer имеет предопределенное свойство SourceIndex - это свойство доступно только для чтения. Вы должны использовать следующий код чтобы работать с свойством SourceIndex объекта VSTwain в JavaScript или VBScript:

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

 

 

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

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

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

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

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

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

 

 

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

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

 

 

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

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

 

 

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

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

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

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

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

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