O componente permite tanto utilizar em Windows Form quando Web Form e no site há todos os exemplos necessários. Baixe o componente e instale. Para nosso exemplo, trabalharemos com um Windows Form. Fiz uma pequena aplicação de scanear nota fiscal.
Vá na pasta de instalação do componente, copie o arquivo Vintasoft.Twain.dll para sua aplicação e adicione como referência. No Code-Behind do formulário a ser trabalhado, adicione o seguinte código para inicializar o componente:
using Vintasoft.Twain;
// Carrega o gerenciador de dispositivo
DeviceManager _deviceManager = new DeviceManager();
Device _device;
// Avalia se é um dispositivo útil
if (!_deviceManager.IsTwainAvailable)
{
MessageBox.Show("Não é um dispositivo TWAIN!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
try
{
// Abre o gerenciador de dispositivo
_deviceManager.Open();
// Seta o dispositivo corrente
_device = _deviceManager.Devices.Current;
lblDipositivo.Text = _deviceManager.Devices.Current.Info.ProductName;
}
catch (TwainDeviceManagerException ex)
{
MessageBox.Show(ex.Message, "Gerenciador de Dispositivos");
return;
}
Agora, ao clicar no botão Scannear, adicionamos o seguinte método:
private void btnScanear_Click(object sender, EventArgs e)
{
try
{
// Seta as configurações
_device.TransferMode = TransferMode.File;
try
{
_device.ShowUI = false;
_device.ShowIndicators = false;
_device.DisableAfterAcquire = true;
}
catch { }
// Abre o dispositivo
_device.Open();
// Propriedades do scaneamento
try
{
_device.UnitOfMeasure = UnitOfMeasure.Inches;
_device.Resolution = new Resolution(float.Parse(resolucaoX.SelectedItem.ToString()), float.Parse(resolucaoY.SelectedItem.ToString()));
}
catch { }
// Informação sobre o arquivo
_arquivo = "LJ_" + _loja + "_Scan_" + DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss") + ".jpg";
_device.FileName = _directoryForImages + _arquivo;
//_device.FileFormat = TwainImageFileFormat.Jpeg;
// Captura a imagem
AcquireModalState acquireModalState = AcquireModalState.None;
do
{
acquireModalState = _device.AcquireModal();
switch (acquireModalState)
{
case AcquireModalState.ImageAcquired:
_device.FileName = _directoryForImages + _arquivo;
//_device.FileFormat = TwainImageFileFormat.Jpeg;
break;
case AcquireModalState.ScanCompleted:
CloseDevice();
break;
case AcquireModalState.ScanCanceled:
CloseDevice();
break;
case AcquireModalState.ScanFailed:
CloseDevice();
break;
case AcquireModalState.UserInterfaceClosed:
CloseDevice();
break;
}
}
while (acquireModalState != AcquireModalState.None);
}
catch (TwainException ex)
{
MessageBox.Show(ex.Message + " - " + ex.StackTrace, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
E outros métodos são necessários adicionar ao form, como:
private void CloseDeviceAndDeviceManager()
{
// Verifica de há dispositivo
if (_device != null)
{
if (_device.State != DeviceState.Closed)
_device.Close();
}
// Fecha a gerência
if (_deviceManager.State != DeviceManagerState.Closed)
_deviceManager.Close();
}
private void CloseDevice()
{
// Desabilita o serviço
if (_device.State == DeviceState.Enabled)
{
if (!_device.ShowUI)
_device.Disable();
}
// Fecha
if (_device.State == DeviceState.Opened)
_device.Close();
}
private void Scan_FormClosing(object sender, FormClosingEventArgs e)
{
if (_device != null)
{
// Verifica se está em uso
if (_device.State == DeviceState.Transferring ||
_device.State == DeviceState.TransferReady)
{
// Envia a solicitação de cancelamento
_device.CancelTransfer();
// Aguarda finalizar
e.Cancel = true;
MessageBox.Show("O dispositivo está em uso! Aguarde alguns instantes enquanto é solicitado a liberação do scanner.", "Informação");
return;
}
}
// Fecha o dispositivo e a gerência
CloseDeviceAndDeviceManager();
}
Pronto! O scaneamento é realizado e é gerado um arquivo JPG. Reparem que está comentado o atributo _device.FileFormat porque nem todo scanner dá a possibilidade de configuração. Alguns aceitam e outros não. Se utilizar alguma configuração que o scanner não suporta, deve aparecer a mensagem: "Failed to get/get to capability". Então você precisa deixar apenas as configurações que o scanner suporte.
Bons scans!
4 comentários:
Poderia disponibilizar esta app para download !
Tem artigo, explicando como extrair os dados da NF scaneada, para ser interpretada pelo aplicativo ou convertida em planilha;
Bom dia. Parabéns pelos projetos! A dll onde baixar?
Olá Thiago, onde fica esse tal de Code-Behind do formulário ?
Postar um comentário