Info del producto
Testimonios |
VintaSoftTwain.NET SDK - FAQCuestiones generales:
Redistribución:
Despliegue:
Programación:
Web:
Bases de datos:
¿Para qué fines puedo utilizar la biblioteca VintaSoftTwain.NET Library?Puede utilizar esta biblioteca para dirigir el trabajo del escáner, de cámaras digitales y web y otros dispositivos que sostienen el standard TWAIN.
¿Qué inclue esta biblioteca?La biblioteca incluye:
¿En qué lenguaje programación puedo utilizar esta biblioteca?La licenia elaboradora y la licencia de la companía permiten utilizar este componente en:
La licencia del server permite utilizar este componente en:
¿Qué límites tiene la versión no registrada de la biblioteca?Los límites de la versión no registrada de la biblioteca:
Todos estos límites están borrados de la versión registrada del componente.
No ha encontrado la respuesta a mi pregunta. ¿Qué debo hacer?Puede encontrar la información sobre la mayoria de las preguntas en la docamentación o en este FAQ. Si no ha encontrado la respuesta a su pregunta, escriba al Servicio de apoyo técnico.
¿Qué ficheros debo incluir en mi programa de distribuidor?Tiene que incluir solo un fichero: Vintasoft.Twain.dll. A la instalación de su programa hay que insertar este fichero en el catálogo que tiene la referencia aparecida durante la compilación del programa.
¿Puedo distribuir componente VintaSoftTwain.NET junto con mi aplicación sin algun pago complementario?Si, puede distribuir componente VintaSoftTwain.NET junto con su aplicacion. Paga solamente por el registro inicial. La licencia de la companía no tiene límites en la distribucion. La licencia del elaborador tiene ciertes límites en la distribución. La redistribución del licencia para servidor no es libre de derechos. Por favor, vea el contrato de licencia.
¿Puede utilizar la biblioteca de VintaSoftTwain.NET en versión de Windows de 64 bit?Sí, puede utilizar la librería VintaSoftTwain.NET en versión de 64 bit de Windows. Aquí está la lista de pasos que deben ser ejercitados:
¿Cómo puedo añadir el componente VintaSoft.Twain al formulario de la aplicación?Para añadir el componente VintaSoft.Twain a la forma hay que hacer lo siguiente:
¿Como puedo recibir las imagenes en negro y blanco (documentación)?Esto es el ejemplo del código para recibir las imagenes en negro y blanco:
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
¿Puedo dirigir la entrega automática de los papeles (ADF) sin interface del usuario?Esto es el ejemplo que muestra como se puede dirigir el trabajo del escaneo con la entrega automática de los papeles (ADF) sin interface del usuario:
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
¿Puedo dirigir la entrega automática de los papeles (ADF) sin interface del usuario y sin evento PostScan?Esto es el ejemplo que muestra como se puede dirigir el trabajo del escaneo con la entrega automática de los papeles (ADF) sin interface del usuario y sin evento PostScan:
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
Tengo que escanear solamente una parte de la imagen. ¿Que debo hacer?Utilice el código siguiente para adquiridas una parte de la imagen delineada por el rectángulo (0.5,0.5) - (6,8): VSTwain1.StartDevice() VSTwain1.ShowUI = False VSTwain1.OpenDataSource() ............. VSTwain1.UnitOfMeasure = UnitOfMeasure.Inches VSTwain1.SetImageLayout(0.5,0.5,6,8) VSTwain1.Acquire()
¿Puedo elegir el dispositivo necesario sin dialogo estandartizado de la elección del dispositivo?Si. Para la numeración de dispositivos se puede utilizar el codico siguiente:
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
Esto es el c código para la elección del primer dispositivo:
VSTwain1.StartDevice() VSTwain1.SourceIndex = 0 ..... VSTwain1.AcquirePero la mejor variante es la siguiente:
VSTwain1.StartDevice()
For i = 0 To VSTwain1.SourcesCount - 1
If VSTwain1.GetSourceProductName(i) = "Your device name" Then
VSTwain1.SourceIndex = i
break
End If
Next
.....
En este caso es necesario saber el nombre correcto del dispositivo.
¿Como puedo desconectar la ventana del indicador del proceso del escaneo al recibo de los imagenes sin interface del usuario?El estandard TWAIN permite desconectar la ventana del indicador del proceso del escaneo, si el interface del usuario no se utilice (ShowUI=False). Se puede hacer de la manera siguente: VSTwain1.StartDevice() VSTwain1.ShowUI = false VSTwain1.DisableAfterAcquire = true VSTwain1.MaxImages = 1 VSTwain1.OpenDataSource() VSTwain1.ShowIndicators = 0 VSTwain1.Acquire()
Quiero crear mi propio indicador del proceso del escaneo. ¿Es possible?Si, es possible, si la imagen se transmite del escaner al anexo por medio de la memoria (Memory transfer). Para crear su indicador del proceso del escaneo es necesario utilizar el evento Progress, por ejemplo: 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
¿Como puedo instalar la resolución diferente para los ejes X y Y durante el escaneo de imagenes?Esto es el ejemplo donde la resolución para el eje X es 4800 dpi, y para el eje 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()
Quiero inicializar el proceso del escaneo en el hilo conductor separado. ¿Es possible?Si, es posible, si se utilice el método AcquireModal, por ejemplo para 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);
}
}
.....
}
.....
Nuestra organización utilice el escaneo de la red con la entrega automática de folios (ADF) y procesamos mucha documentación cada dia. ¿Como podemos automatizar nuestro trabajo? Quisieramos guardar cada papel en el fichero saparado.Puede utilizar la página blanca para dividir los papeles y definir las páginas blancas con ayuda del método IsBlankPage. Por ejemplo: 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
¿Puedo utilizar el código patch para dividir los trabajos de serie? Y ¿como puedo determinar el final del trabajo de serie?Puede dividir los trabajos de serie, utilice la opción CAP_JOBCONTROL.
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
.....
Quiero guardar imagenes adquiridas en la coleccion y luego procesarlas. ¿Como puedo hacerlo?Los metodos de GetImage/GetCurrentImage devuelven un nuevo objeto de Bitmap, entonces Ud. puede usarlo en su coleccion: ... Dim colDocumentPages As New Collection ... Dim picNewPage As Image = vnsScanner.GetCurrentImage() colDocumentPages.Add(picNewPage) ...
¿Puedo salvar imagenes adquiridas en un documento de PDF?Si, Ud. puede hacerlo. Las imagenes adquiridas pueden ser salvadas en nuevo documento de PDF o anadidas en documento de PDF que ya existe.
VSTwain1.PdfDocumentInfo.Author = "VintaSoft Ltd."
VSTwain1.PdfDocumentInfo.Title = "Documents acquired from " + _
VSTwain1.GetSourceProductName(VSTwain1.SourceIndex)
VSTwain1.PdfDocumentInfo.Creator = "VintaSoftTwain.NET SDK"
VSTwain1.PdfDocumentInfo.ModificationDate = DateTime.Now
VSTwain1.PdfMultiPage = true
VSTwain1.SaveImage(0, "c:\test.pdf")
¿Como puedo recibir una informacion extendida sobre la imagen del escaner?Este ejemplo demuestra como recibir la informacion sobre codigos de barras encontrados en la imagen adquirida:
Public Sub ScanWithoutUI()
VSTwain1.AppProductName = "MyTwainApplication"
Try
VSTwain1.StartDevice()
VSTwain1.SelectSource()
VSTwain1.ShowUI = false
VSTwain1.ExtendedImageInfoCollection.Add(New _
ExtendedImageInfo(ExtendedImageInfoId.BarcodeCount))
VSTwain1.ExtendedImageInfoCollection.Add(New _
ExtendedImageInfo(ExtendedImageInfoId.BarcodeType))
VSTwain1.ExtendedImageInfoCollection.Add(New _
ExtendedImageInfo(ExtendedImageInfoId.BarcodeTextLength))
VSTwain1.ExtendedImageInfoCollection.Add(New _
ExtendedImageInfo(ExtendedImageInfoId.BarcodeText))
While VSTwain1.AcquireModal()
If Not (PictureBox1.Image Is Nothing) Then
PictureBox1.Image.Dispose()
PictureBox1.Image = Nothing
End If
PictureBox1.Image = VSTwain1.GetCurrentImage
VSTwain1.SaveImage 0, "c:\test.tiff"
' retrieve extended image info
Dim barcodeCount As ExtendedImageInfo = _
VSTwain1.ExtendedImageInfoCollection(0)
If barcodeCount.Items IsNot Nothing And barcodeCount.Items.Length > 0 Then
If barcodeCount.Items(0) > 0 Then
Dim barcodeType As ExtendedImageInfo = _
VSTwain1.ExtendedImageInfoCollection(1)
Dim barcodeTextLength As ExtendedImageInfo = _
VSTwain1.ExtendedImageInfoCollection(2)
Dim barcodeText As ExtendedImageInfo = _
VSTwain1.ExtendedImageInfoCollection(3)
Dim i As Integer, infoString As String
For i = 0 To barcodeCount.Items(0) - 1
infoString = ""
If barcodeType.IsValid Then
infoString = "BarcodeType=" + barcodeType.Items(i) + " "
Else
infoString = "BarcodeType=Undefined "
End If
If barcodeText.IsValid Then
infoString = "BarcodeText='" + barcodeText.Items(i) + "'"
Else
infoString = "BarcodeText=Undefined "
End If
MsgBox(infoString)
Next i
End If
End If
End While
Catch ex As TwainException
MsgBox ex.Message
Catch ex As ImagingException
MsgBox ex.Message
End Try
End Sub
¿Puedo recibir la imagen de 48-bit?Si. La biblioteca VintaSoftTwain. NET permite recibir las imagenes coloradas de 48-bit o las imagenes grises de 16-bits. Las imagenes pueden ser salvadas sin perdida de la profundidad del color solamente en los ficheros de TIFF. VSTwain1.OpenDataSource() VSTwain1.PixelType = PixelType.RGB VSTwain1.Capability = DeviceCapability.IBitDepth VSTwain1.CapType = CapType.OneValue VSTwain1.CapValue = 16 ' 16 bits per color component VSTwain1.SetCap() VSTwain1.Acquire() Aqui esta un ejemplo que demuestra como recibir la imagen colorado de 24-bpp del escaner sin la interface de usuario: VSTwain1.OpenDataSource() VSTwain1.PixelType = PixelType.RGB VSTwain1.Capability = DeviceCapability.IBitDepth VSTwain1.CapType = CapType.OneValue VSTwain1.CapValue = 8 ' 8 bits per color component VSTwain1.SetCap() VSTwain1.Acquire() Aqui esta un ejemplo que demuestra como recibir la imagen gris de 16-bpp del escaner sin la interface de usuario: 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()
¿Puedo crear el sistema de sesion predefinido para mi escaner de volumen alto?Si, la biblioteca permite cargar/salvar sistemas de sesion predefinidos para los escaners de medio y alta velocidad.
VSTwain1.OpenDataSource()
Dim fs As FileStream = New FileStream("scanner-setup.xml", FileMode.Append, FileAccess.Write)
VSTwain1.SaveDeviceSettings(fs)
fs.Close()
Aqui esta un ejemplo que demuestra como cargar ajustes de dispositivo antes salvados en el dispositivo:
VSTwain1.OpenDataSource()
Dim fs As FileStream = New FileStream("scanner-setup.xml", FileMode.Open, FileAccess.Read)
VSTwain1.LoadDeviceSettings(fs)
fs.Close()
VSTwain1.Acquire()
¿Que pasos debe dar para anadir la biblioteca a mi WEB proyecto?Debe hacer lo siguiente al lado de server:
< OBJECT ID="VSTwain1" WIDTH=1 HEIGHT=1 El numero correcto de la versión es muy importante! Debe hacer lo siguiente al lado del cliente:
Quiero crear el script en mi web server, que será utilizado por los usuarios para la instalación automática de los parámetros necesarios de la seguridad.NET Framework al ordenador del usuario. ¿Puedo hacerlo?Debe crear el script, que iniciará el orden siguiente: caspol.exe -q -machine -addgroup All_Code -site www.my-company.com FullTrust
He recibido el aviso "Your .NET Framework Security settings must be configured to run the components in your browser" durante la instalación de mi web anexo. ¿Que hago no correctamente?Primeramente hay que ajustar la seguridad .NET Framework como describido aqui. Pues necesita verificar la versión 2 que utiliza (por ejemplo, 5.0.5.3). Después debe describir correctamente el objeto OBJECT en su página web. Es muy importante utilizar el numero correcto de la versión! Esto es el ejemplo: < OBJECT ID="VSTwain1" WIDTH=1 HEIGHT=1 Es todo que debe hacer.
Trato de elegir el dispositivo por medio de la opción sourceIndex en Internet Explorer, pero ocurre el error. ¿Por que?Cada objeto a la página web en Internet Explorer tiene la opción sourceIndex – esta opción es accesible solamente para la lectura. Debe utilizar el código siguente para trabajar con la opción sourceIndex del objeto VSTwain en JavaScript o VBScript: VSTwain1.StartDevice() VSTwain1.object.SourceIndex = 1 ' second device VSTwain1.Acquire()
¿Puedo escanear imagenes y cargarlos al servidor en la aplicacion de intranet con la autenticacion integrada de Windows?Si, la biblioteca permite usar cualquier metodo de autenticacion apoyado por .NET Framework. El ejemplo siguiente ilustra como usar la informacion de autenticacion del usuario que esta conectado actualmente: ... httpUpload1.Url = "http://localhost/vstwaindemo/imageupload.aspx" httpUpload1.UseDefaultCredentials = true ... El ejemplo siguiente ilustra como usar informacion de autenticacion multiple:
...
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
...
¿Puedo escanear imagenes y cargarlos al servidor en la aplicacion de web con la autenticacion de Formas de Cookieless?Si, Ud. puede hacerlo, por favor mire el ejemplo 8 y 9
¿Puedo guardar las imagenes adquiridas en la tabla MS SQL del server?Si, puede hacerlo. Por favor, vea el ejemplo 3 de este articulo.
Quiero salvar imagenes adquiridas como documentos de PDF en la base de datos. ¿Puedo hacerlo?Si, Ud. puede salvar la imagen(es) adquirida a una corriente y adelante salvar datos de corriente a la base de datos. Aqui esta un ejemplo que muestra como salvar cada imagen adquirida como un documento separado de PDF en una corriente: Dim mem As MemoryStream = VSTwain1.GetImageAsStream(0, ImageFileFormat.PDF) Y aqui esta un ejemplo que muestra como salvar todas las imagenes adquiridas como un solo documento de PDF en una corriente:
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
|