| Home | Download | Registrar | Recomendações | Suporte | Quem somos |
|
|||||||||||||||||||
|
VintaSoftTwain.NET Library Para que propósito posso usar o VintaSoftTwain.NET Library? A biblioteca pode ser usada para controlar o trabalho de scanners, webcam ou câmeras digitais e qualquer outro dispositivo TWAIN. De que partes consiste a biblioteca? A biblioteca contém:
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: Com a licença servidor você pode usar o componente em: Que restrições tem a versão não registrada? A versão não registrada tem as seguintes restrições: Todas as restrições são removidas na versão registrada. Estou com problemas. O que devo fazer? As respostas para a maior parte as questões pode se encontrada na documentação ou neste FAQ. Escreva para o nosso suporte para obter mais ajuda. Que arquivos eu preciso incluir na instalação do meu programa? Você precisa incluir apenas um arquivo: VintaSoft.Twain.dll. Este arquivo precisa ser colocado no mesmo diretório que o executável. Verifique se a versão que você vai distribuir seja a mesma versão que você usou para compilar o programa. Posso redistribuir o VintaSoft.Twain.dll com meu programa sem pagar royalties? Sim, este componente e livre de royalts. Você paga apenas para registrar, uma única vez. Apenas este componente pode ser redistribuído com seu programa. A licença desenvolvedor tem limitação na redistribuição. Por favor, veja o acordo de licenciamento. Posso adicionar um componente VintaSoft.Twain no form do meu projeto? Para adicionar o componente VintaSoft.Twain em seu form, você precisa fazer o seguinte: Posso obter imagens em preto-e-branco? Aqui um exemplo de código para adquirir apenas imagens em preto-e-branco:
Private Sub StartScan()
Try
VSTwain1.StartDevice
If VSTwain1.SelectSource Then
VSTwain1.OpenDataSource
VSTwain1.PixelType = PixelType.BW
VSTwain1.Acquire
End If
Catch ex As TwainException
MsgBox(ex.Message)
End Try
End Sub
Posso trabalhar com ADF sem mostrar a interface com usuário? Aqui um exemplo de código para fazer o scanner trabalhar com ADF sem obter dados através da interface do usuário:
Private Sub StartScanButton_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles StartScanButton.Click
Try
VSTwain1.StartDevice()
VSTwain1.SelectSource()
VSTwain1.ShowUI = false
VSTwain1.DisableAfterAcquire = true
VSTwain1.MaxImages = 1
VSTwain1.AutoCleanBuffer = true
VSTwain1.OpenDataSource()
VSTwain1.UnitOfMeasure = UnitOfMeasure.Inches
VSTwain1.PixelType = PixelType.RGB
VSTwain1.Resolution = 200
VSTwain1.TiffMultiPage = true
VSTwain1.TiffCompression = TiffCompression.Auto
If VSTwain1.Duplex <> DuplexMode.None Then
VSTwain1.DuplexEnabled = true
End If
If VSTwain1.FeederPresent Then
VSTwain1.FeederEnabled = true
VSTwain1.AutoFeed = true
VSTwain1.XferCount = -1
If VSTwain1.FeederLoaded Then
VSTwain1.Acquire()
Endif
Endif
Catch ex As TwainException
MsgBox(ex.Message)
End Try
End Sub
Private Sub VSTwain1_ImageAcquired(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles VSTwain1.ImageAcquired
Try
VStwain1.SaveImage(0,"c:\test.tiff")
Catch ex As ImagingException
MsgBox(ex.Message)
End Try
End Sub
Private Sub VSTwain1_ScanCompleted(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles VSTwain1.ScanCompleted
If VSTwain1.ErrorCode <> ErrorCode.None Then
MsgBox(VSTwain1.ErrorString)
Else
MsgBox("Scan process is completed.")
End If
End Sub
Como posso trabalhar com ADF sem mostrar a interface com o usuário e sem usar o evento PostScan? Aqui um exemplo de código para trabalhar com ADF sem obter dados através da interface do usuário:
Private Sub StartScanButton_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles StartScanButton.Click
Try
VSTwain1.StartDevice()
VSTwain1.SelectSource()
VSTwain1.ShowUI = false
VSTwain1.DisableAfterAcquire = true
VSTwain1.MaxImages = 1
VSTwain1.AutoCleanBuffer = true
VSTwain1.OpenDataSource()
VSTwain1.UnitOfMeasure = UnitOfMeasure.Inches
VSTwain1.PixelType = PixelType.RGB
VSTwain1.Resolution = 200
VSTwain1.TiffMultiPage = true
VSTwain1.TiffCompression = TiffCompression.Auto
If VSTwain1.Duplex <> DuplexMode.None Then
VSTwain1.DuplexEnabled = true ' enable duplex
End If
If VSTwain1.FeederPresent Then
VSTwain1.FeederEnabled = true
VSTwain1.AutoFeed = true
VSTwain1.XferCount = -1
If VSTwain1.FeederLoaded Then
While VSTwain1.AcquireModal()
Try
VStwain1.SaveImage(0,"c:\test.tiff")
Catch ex As TwainException
MsgBox(ex.Message)
End Try
End While
VSTwain1.StopDevice()
MsgBox "Scan completed."
Endif
Endif
Catch ex As TwainException
MsgBox(ex.Message)
End Try
End Sub
Eu quero escanear parte da imagem. Como faço isso? Você pode usar o seguinte código para obter apenas parte da imagem limitado por um retângulo (0.5,0.5) - (6,8): VSTwain1.StartDevice() VSTwain1.ShowUI = False VSTwain1.OpenDataSource() ............. VSTwain1.UnitOfMeasure = UnitOfMeasure.Inches VSTwain1.SetImageLayout(0.5,0.5,6,8) VSTwain1.Acquire() Como posso selecionar um dispositivo sem mostrar a tela de seleção de dispositivos? Você pode usar o seguinte código para enumerar os dispositivos:
VSTwain1.StartDevice
For i = 0 To (VSTwain1.SourcesCount - 1)
MsgBox VSTwain1.GetSourceProductName(i)
Next
E esse código para o primeiro dispositivo selecionado:
VSTwain1.StartDevice VSTwain1.SourceIndex = 0 ..... VSTwain1.AcquireMas o seguinte jeito é melhor:
VSTwain1.StartDevice
For i = 0 To (VSTwain1.SourcesCount - 1)
If VSTwain1.GetSourceProductName(i) = "Your device name" Then
VSTwain1.SourceIndex = i
break
End If
Next
.....
Neste caso você precisa saber o nome do dispositivo.Eu tento selecionar o dispositivo com a propriedade SourceIndex no Internet Explorer mas um erro é mostrado. Por quê? Cada objecto da web page no Internet Explorer tem uma propriedade SourceIndex. Esta é uma propriedade de leitura apenas. Você precisa usar o seguinte código para trabalhar com a propriedade SourceIndex do objeto VSTwain no JavaScript ou VBScript: VSTwain1.StartDevice() VSTwain1.object.SourceIndex = 1 ' second device VSTwain1.Acquire() Como posso desabilitar a janela de indicador de progresso quando eu adquiro imagens sem a interface do usuário? O padrão TWAIN permite desabilitar a tela de indicador de progresso quando ShowUI=false. Isto pode ser feito deste modo: VSTwain1.StartDevice VSTwain1.ShowUI = false VSTwain1.DisableAfterAcquire = true VSTwain1.MaxImages = 1 VSTwain1.OpenDataSource VSTwain1.ShowIndicators = 0 ' disable indicator window VSTwain1.Acquire Eu gostaria de criar meu próprio indicador do processo de escaneamento da imagem. Isto é possível? Sim, isto é possível se você usar o modo de transferência por Memória – você precisa usar o evento de progresso. Aqui um exemplo: Private Sub VSTwain1_ImageProcessingProgress(ByVal sender As Object, _
ByVal e As VintaSoft.Twain.ProgressEventArgs) _
Handles VSTwain1.Progress
If e.action = Action.Deskew Then
txtAction.Text = "Deskewing..."
ElseIf e.action = Action.Despecle Then
txtAction.Text = "Despeckling..."
ElseIf e.action = Action.BorderDetection Then
txtAction.Text = "Border detecting..."
ElseIf e.action = Action.Rotation Then
txtAction.Text = "Rotating..."
ElseIf e.action = Action.ImageScan Then
txtAction.Text = "Image scan..."
ElseIf e.action = Action.ImageSaving Then
txtAction.Text = "Saving image to PDF document..."
End If
progressBar1.Value = e.percentComplete
e.interrupt = bFinishFlag
End Sub
Posso configurar uma resolução diferente, com posições X e Y? Sim. Aqui um exemplo de código de como configurar a resolução de X para 48000 dpi e Y com 96000 dpi: VSTwain1.StartDevice VSTwain1.ShowUI = false VSTwain1.DisableAfterAcquire = true VSTwain1.MaxImages = 1 VSTwain1.OpenDataSource VSTwain1.UnitOfMeasure = UnitOfMeasure.Inches VSTwain1.Capability = Capability.IXResolution VSTwain1.CapType = CapType.OneValue VSTwain1.CapValue = 4800 ' 4800 dpi VSTwain1.SetCap VSTwain1.Capability = Capability.IYResolution VSTwain1.CapType = CapType.OneValue VSTwain1.CapValue = 9600 ' 9600 dpi VSTwain1.SetCap VSTwain1.Acquire Eu gostaria de escanear documentos em processo separado. Isto é possível? Sim, isso é possível se o método AcquireModal for usado. Aqui um exemplo em C#:
.....
public class Form1 : System.Windows.Forms.Form
{
private VSTwain twain=null;
.....
private void buttonScanASync_Click(object sender, System.EventArgs e)
{
ThreadStart ts = new ThreadStart(this.doScanning);
Thread t = new Thread(ts);
t.Name = "Scan-Thread";
t.Start();
}
private void doScanning()
{
twain = new VSTwain();
try
{
twain.StartDevice();
twain.ShowUI = false;
if (twain.SelectSource())
{
while (twain.AcquireModal())
{
pictureBox.Image = twain.GetCurrentImage();
}
}
twain.StopDevice();
}
catch (TwainException ex)
{
MessageBox.Show(ex.Message);
}
}
.....
}
.....
Nossa organização tem um scanner com ADF e nós escaneamos muitos documentos todo o dia. Como podemos automatizar nosso trabalho? Nós queremos salvar cada documento em um arquivo separado. Você pode usar uma página em branco para separar os documentos e apagar a página em branco, como delimitador de documentos, pelo método IsBlankPage. Aqui um exemplo:
Dim documentsCounter as Integer
............
documentsCounter = 0
............
Private Sub StartScan()
VSTwain1.StartDevice()
If VSTwain1.SelectSource() = 1 Then
VSTwain1.ShowUI = false
VSTwain1.DisableAfterAcquire = true
VSTwain1.MaxImages = 1
VSTwain1.AutoCleanBuffer = true
VSTwain1.TiffMultiPage = true
VSTwain1.TiffCompression = TiffCompression.Auto
If VSTwain1.OpenDataSource() = 1 Then
VSTwain1.UnitOfMeasure = UnitOfMeasure.Inches
VSTwain1.PixelType = PixelType.GRAY
VSTwain1.Resolution = 200 ' 200 dpi
If VSTwain1.Duplex <> DuplexMode.None Then
VSTwain1.DuplexEnabled = true
End If
If VSTwain1.FeederPresent Then
VSTwain1.XferCount = -1
VSTwain1.FeederEnabled = true
VSTwain1.AutoFeed = true
If VSTwain1.FeederLoaded Then
VSTwain1.Acquire()
End If
End If
End If
End If
End Sub
Private Sub VSTwain1_PostScan(ByVal flag As Long)
If flag <> 0 Then
If VSTwain1.ErrorCode <> 0 Then
MsgBox VSTwain1.ErrorString
End If
Else
' check the first image (page)
If VSTwain1.IsBlankImage(0) Then
documentsCounter = documentsCounter + 1
End If
If Not VStwain1.SaveImage(0,"c:\documents\doc"+
Str(documentsCounter)+".tiff") Then
MsgBox VSTwain1.ErrorString
End If
If VSTwain1.DataSourceState = 0 Then
VSTwain1.StopDevice()
MsgBox "Scan completed."
End if
End If
End Sub
Posso usar códigos patch para separar as tarefas em batch? Se sim, como posso detectar o fim das tafefas em batch? Você pode detectar as tarefas em batch usando a capacidade CAP_JOBCONTROL. Aqui um exemplo para o Visual Basic:
Dim jobsCounter As Integer
Private Sub Form_Load()
jobsCounter = -1
End Sub
Private Sub Scan_Click()
VSTwain1.StartDevice
VSTwain1.MaxImages = 1
VSTwain1.ShowUI = false
VSTwain1.DisableAfterAcquire = true
VSTwain1.TiffMultiPage = true
VSTwain1.OpenDataSource
' 1 - Detect and include job separator and continue scanning.
' 3 - Detect and exclude job separator and continue scanning.
VSTwain1.JobControl = 1
jobsCounter = jobsCounter + 1
VSTwain1.Acquire
End Sub
Private Sub VSTwain1_PostScan(ByVal sender As System.Object,
ByVal e As VintaSoft.Twain.PostScanEventArgs) Handles VSTwain1.PostScan
If Not e.Flag Then
If VSTwain1.ErrorCode <> 0 Then
MsgBox(VSTwain1.ErrorString)
End If
Else
If VSTwain1.EndOfJob Then
jobsCounter = jobsCounter + 1
Else
VSTwain1.SaveImage 0, "c:\job"+jobsCounter.ToString()+".tif"
End If
End If
End Sub
.....
Eu gostaria de guardar as imagens adquiridas em conjunto e processá-los. Como posso fazer isso? Se você quer guardar as imagens em seu próprio buffer (por exemplo, em uma conjunto de objetos em VB.NET), então você precisa criar uma cópia completa do objeto da imagem retornado pelo método GetImage e colocar este objeto em seu buffer. Você não pode colocar no buffer o objeto de imagem retornada pelo método GetImagem porque este objeto será destruído quando você adquirir uma nova imagem ou quando você chamar o método StopDevice. Aqui o código correto: ... Dim colDocumentPages As New Collection ... Dim picNewPage As Image = New Bitmap(vnsScanner.GetCurrentImage) colDocumentPages.Add(picNewPage) ...E aqui o código incorreto: ... Dim colDocumentPages As New Collection ... Dim picNewPage As Image picNewPage = vnsScanner.GetCurrentImage colDocumentPages.Add(picNewPage) ... Quando eu estou usando o scanner HP Scanjet, eu estou perdendo a parte superior ½ inch do que foi escaneado – e existe uma parte extra ½ inch de espaço em branco na parte inferior. Como posso resolver esse problema? Você precisa trocar o valor da propriedade PageSize de A4 para USLETTER e assim poderá resolver o problema. Que passos devo dar para adicionar o componente VintaSoft.Twain em meu projeto web? No lado servidor você precisa fazer o seguinte:
No lado cliente você precisa fazer o seguinte:
Eu gostaria de criar um script para meu website que automaticamente configurasse a segurança do Framework .NET em meu servidor web, permitindo evitar rotinas de configurações complexas para o usuário final. O que eu devo fazer? Você pode criar um script que executará este comando: caspol.exe -q -machine -addgroup All_Code -site www.my-company.com FullTrust -name VSTwain_MyCompany_Site -description "This permission set grants the right to use VSTwain object on www.my-company.com." Eu obtenho a mensagem “As configurações de segurança do Framework .NET precisam ser configuradas para serem executadas pelos componentes no seu navegador” quando eu executo minha aplicação web. O que fiz de errado? Primeiramente você precisa configurar as políticas de segurança do Framework .NET como descrito aqui. Em seguida, você precisa checar que versão do VintaSoft.Twain.dll você está usando (por exemplo, 4.0.0.1). Depois você precisa configurar um OBJECT objeto em sua página web corretamente. O número da versão correta é muito importante! Aqui um exemplo: <OBJECT ID="VSTwain1" WIDTH=1 HEIGHT=1 CLASSID="http://your-server/path-on-server/VintaSoft.Twain.dll#VintaSoft.Twain.VSTwain" CODEBASE="http://your-server/path-on-server/VintaSoft.Twain.dll#version=4,0,0,1"> </OBJECT> Isto é tudo o que você precisa fazer. Posso gravar as imagens adquiridas em uma tabela do MS SQL Server? Sim, você pode fazer isto, veja 3 exemplos aqui. |
||||||||||||||||||||