Back-End

24 ago, 2015

Gerando códigos QR (ZXing e MessagingToolKit.QRCode)

Publicidade

Hoje vamos aprender como gerar QR Code, ou códigos QR, usando a linguagem C# em uma aplicação Windows Forms.

Apenas para lembrar, o QR Code é um código de barras bidimensional que pode ser escaneado usando a maioria dos celulares modernos equipados com câmera. Esse código é convertido numa URL, mas também pode conter um texto, um número de telefone, uma localização, um e-mail, um contato, um SMS etc.

Gerar códigos QR na plataforma .NET, quer seja usando a linguagem VB .NET ou C#, não é problema, pois existem dezenas de APIs que oferecem esse serviço. Talvez o problema seja saber qual delas usar.

Neste artigo eu vou mostrar como gerar códigos QR usando duas APIs diferentes:

Recursos Usados: Visual Studio 2013 Express for windows desktop.

1. Gerando QR Codes com a API ZXing.Net

A primeira coisa que vamos fazer é criar um novo projeto no Visual Studio Express 2013 for windows desktop com o nome de Gerando_QRCode, usando o template Windows Forms Application e a linguagem C#:

c_qrcd12

Será criado um projeto com um formulário form1.cs. Vamos incluir a partir da ToolBox os seguintes controles no formulário:

  • 1 PictureBox – (para exibir a imagem): name = picQRCode e SizeMode=StretchImage
  • 1 Label
  • 1 TextBox – name = txtTexto
  • 2 Label
  • 2 TextBox : name = txtAltura e txtLargura
  • 1 Button – name = btnGerarQRCode

Disponha os controles conforme o leiaute da figura abaixo:

c_qrcd13

Agora temos que incluir uma referência à biblioteca ZXing.NET, e vamos fazer isso via Nuget.

Clique no menu TOOLS -> Nuget Package Manager -> Package Manager Console.

c_qrcd14

A seguir, digite no Console a linha de comando: Install-Package ZXing.Net.

c_qrcd11

Pronto! Já temos a biblioteca instalada e podemos agora criar o QR Code.

Defina o seguintes namespaces no formulário:

using System;
using System.Drawing;
using System.Windows.Forms;

No evento Click do botão de comando – Gerar QRCode – inclua o código a seguir:

private void btnGerarQRCode_Click(object sender, EventArgs e)
  {
            if (txtTexto.Text == string.Empty || txtLargura.Text == string.Empty && txtLargura.Text == string.Empty)
            {
                MessageBox.Show("Informações inválidas. Complete as informações para gerar o QRCode...");
                txtTexto.Focus();
                return;
            }
            try
            {
                int largura = Convert.ToInt32(txtLargura.Text);
                int altura = Convert.ToInt32(txtAltura.Text);
                picQRCode.Image = GerarQRCode(largura, altura, txtTexto.Text);
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message,"Erro",MessageBoxButtons.OK,MessageBoxIcon.Error);
            }
 }

Este código valida as informações postadas pelo usuário e chama o método GerarQRCode() passando a largura, altura e o texto.

O código do método GerarQRCode() é dado a seguir:

public Bitmap GerarQRCode(int width, int height, string text)
  {
            try
            {
                var bw = new ZXing.BarcodeWriter();
                var encOptions = new ZXing.Common.EncodingOptions() { Width = width, Height = height, Margin = 0 };
                bw.Options = encOptions;
                bw.Format = ZXing.BarcodeFormat.QR_CODE;
                var resultado = new Bitmap(bw.Write(text));
                return resultado;
            }
            catch
            {
                throw;
            }
 }

Este código usa a biblioteca ZXing para gerar o QR Code e retorna uma imagem que exibimos no controle PictureBox.

Executando o projeto obtemos o seguinte resultado:

c_qrcd15

2. Gerando QR Codes com a API MessagingToolKit.QRCode

Vamos agora incluir um novo projeto na nossa solução clicando no menu FILE -> Add -> New Project.

Selecione o template Windows Forms Application e a linguagem C# e informe o nome Gerando_QRCode2:

c_qrcd16

Agora temos que incluir uma referência à biblioteca MessagingToolkit.QRCode em nosso projeto, e vamos fazer isso via Nuget.

Clique no menu TOOLS -> Nuget Package Manager -> Package Manager Console.

c_qrcd14 (1)

A seguir, digite no Console a linha de comando: Install-Package MessagingToolkit.QRCode -ProjectName Gerando_QRCode_2.

c_qrcd17

Observe que usamos o parâmetro -ProjectName, informando o nome do projeto no qual desejamos instalar o pacote.

Agora vamos incluir no formulário form1.cs os seguintes controles:

  • 1 Label
  • 1 TextBox – name = txtDados
  • 1 Button –  name = btnGerarQRCode
  • 1 PictureBox – name = picQrCode SizeMode= StretchImage

Disponha os controles conforme o leiaute da figura abaixo:

c_qrcd18

Defina o seguintes namespaces no formulário:

using MessagingToolkit.QRCode.Codec;
using System;
using System.Drawing;
using System.Windows.Forms;

No evento Click do botão de comando – Gerar QRCode – inclua o código a seguir:

 

private void btnGerarQRCode_Click(object sender, EventArgs e)
    {
            try
            {
                QRCodeEncoder qrCodecEncoder = new QRCodeEncoder();
                qrCodecEncoder.QRCodeBackgroundColor = System.Drawing.Color.White;
                qrCodecEncoder.QRCodeForegroundColor = System.Drawing.Color.Black;
                qrCodecEncoder.CharacterSet = "UTF-8";
                qrCodecEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
                qrCodecEncoder.QRCodeScale = 6;
                qrCodecEncoder.QRCodeVersion = 0;
                qrCodecEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.Q;
                Image imageQRCode;
                //string a ser gerada
                String dados = txtDados.Text;
                imageQRCode = qrCodecEncoder.Encode(dados);
                picQrCode.Image = imageQRCode;
            }
            catch(Exception ex)
            {
                MessageBox.Show("Erro : " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
 }

Para executar este projeto, clique com o botão direito sobre o nome do projeto e selecione Set as Startup Project.

Executando o projeto, iremos obter o resultado abaixo:

c_qrcd19

Pegue os dois projetos completos aqui: Gerando_QRCode.zip (sem as referências).