Categorias
componentes dll scanner windows winform

Scanear um documento com C#

Um dos melhores componentes de scaneamento que j?? utilizei ?? o da VintaSoft. Ele n??o ?? free, mas pode ser utilizado normalmente. O ??nico empecilho ?? que, para cada scan que fizer, ele ir?? solicitar que clique em Evaluate. Quem comprar, vale a pena pois ?? muito bom e seu suporte sempre est?? a disposi????o. Chega de elogios e vamos ao que interessa.

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:

        /// Fecha o dispositivo e a ger??ncia

        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();
        }

        /// Fecha o dispositivo

        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();
        }

        /// Ao fechar o formul??rio, libera o uso

        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 respostas em “Scanear um documento com C#”

Deixe um comentário para Unknown Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *