Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login

Código de Barras com .NET

Veja neste artigo de Jefferson Luis, como "pintar" código de barras em aplicações .NET.

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login

(opcional) Onde podemos melhorar?

Confirmar voto
0
 (3)  (0)

Código de Barras EAN 13 e EAN 8

 

Nesse artigo mostrarei como desenhar dois tipos de código de barras EAN 13 e EAN 8, em um PictureBox, não enfocarei nesse artigo a explicação de como construir o algaritimo de desenho do Código de Barra, é necessário um estudo especifico no Padrão EAN para entender como é construído um Código de Barra, estaria disponibilizando as funções necessárias e explicando o processo para a confecção de um aplicativo simples.

Em outro artigo estarei demonstrando como imprimir esse Código de barra usando o componente PrintDocument.

Vamos iniciar uma novo Projeto Windows Forms, coloque um Label altere o Text para Código de Barra, um TextBox, um PictureBox altere a BackColor para Window, um Button altere o Text para Desenhar, seu formulário deve ficar parecido com a Figura 1.

BarCode1.gif 

Figura 1. Como deve ficar os componentes no Formulário

Declare a Função EANCodeBin, ela transforma o Código EAN em Binário essa função é usada pela função PrintEanBarcode, acompanhe a Listagem 1.

 

Listagem 1. Função EANCodeBIN

function EANCodeBIN(strEANCode: string): string;

var

  I : Integer;

  str, strAux, StrBinCode, StrCodigo : String;

begin

  strEANCode := Trim(strEANCode);

  strAux := strEANCode;

  If (strAux.Length <> 13) And (strAux.Length <> 8) Then

    Exception.Create('Código EAN Inválido');

 

  for  I := 0 to strEANCode.Length - 1 do

    if (strAux.Chars[I].ToString < '0') or (strAux.Chars[I].ToString > '9') then

      Exception.Create('Caracter Inválidos no EAN');

 

  If (strAux.Length = 13) Then

  begin

    strAux := Copy(strAux,2,Length(StrAux));

 

    Case Convert.ToInt32(Copy(strEANCode,1,1)) of

      0: StrCodigo := '000000';

      1: StrCodigo := '001011';

      2: StrCodigo := '001101';

      3: StrCodigo := '001110';

      4: StrCodigo := '010011';

      5: StrCodigo := '011001';

      6: StrCodigo := '011100';

      7: StrCodigo := '010101';

      8: StrCodigo := '010110';

      9: StrCodigo := '011010';

    end;

  end

  else

      StrCodigo := '0000';

 

  StrBinCode := '000101';

  For I := 1 To (Length(strAux) div 2) do

    Case Convert.ToInt32(Copy(strAux, I, 1)) of

      0:

        begin

          if Copy(StrCodigo, I, 1) = '0' then

            StrBinCode := StrBinCode + '0001101'

          else

            StrBinCode := StrBinCode + '0100111';

        end;

      1:

        begin

          if Copy(StrCodigo, I, 1) = '0' then

            StrBinCode := StrBinCode + '0011001'

          else

            StrBinCode := StrBinCode + '0110011';

        end;

      2:

        begin

          if Copy(StrCodigo, I, 1) = '0' then

            StrBinCode := StrBinCode + '0010011'

          else

            StrBinCode := StrBinCode + '0011011';

        end;

      3:

        begin

          if Copy(StrCodigo, I, 1) = '0' then

            StrBinCode := StrBinCode + '0111101'

          else

            StrBinCode := StrBinCode + '0100001';

        end;

      4:

        begin

          if Copy(StrCodigo, I, 1) = '0' then

            StrBinCode := StrBinCode + '0100011'

          else

            StrBinCode := StrBinCode + '0011101';

        end;

      5:

        begin

          if Copy(StrCodigo, I, 1) = '0' then

            StrBinCode := StrBinCode + '0110001'

          else

            StrBinCode := StrBinCode + '0111001';

        end;

      6:

        begin

          if Copy(StrCodigo, I, 1) = '0' then

            StrBinCode := StrBinCode + '0101111'

          else

            StrBinCode := StrBinCode + '0000101';

        end;

      7:

        begin

          if Copy(StrCodigo, I, 1) = '0' then

            StrBinCode := StrBinCode + '0111011'

          else

            StrBinCode := StrBinCode + '0010001';

        end;

      8:

        begin

          if Copy(StrCodigo, I, 1) = '0' then

            StrBinCode := StrBinCode + '0110111'

          else

            StrBinCode := StrBinCode + '0001001';

        end;

      9:

        begin

          if Copy(StrCodigo, I, 1) = '0' then

            StrBinCode := StrBinCode + '0001011'

          else

            StrBinCode := StrBinCode + '0010111';

        end;

    end;

    StrBinCode := StrBinCode + '01010';

 

    for I := (Length(strAux) div 2 + 1) To Length(strAux) do

      case Convert.ToInt32(Copy(strAux, I, 1)) of

        0 : StrBinCode := StrBinCode + '1110010';

        1 : StrBinCode := StrBinCode + '1100110';

        2 : StrBinCode := StrBinCode + '1101100';

        3 : StrBinCode := StrBinCode + '1000010';

        4 : StrBinCode := StrBinCode + '1011100';

        5 : StrBinCode := StrBinCode + '1001110';

        6 : StrBinCode := StrBinCode + '1010000';

        7 : StrBinCode := StrBinCode + '1000100';

        8 : StrBinCode := StrBinCode + '1001000';

        9 : StrBinCode := StrBinCode + '1110100';

      end;

 

      StrBinCode := StrBinCode + '101000';

 

      EANCodeBIN := StrBinCode;

    end;

 

Agora vamos a declarar a função PrintEANBarCode, é necessário passar os seguintes parâmetros, o Código de Barra e o Objeto PictureBox aonde será desenhado as Brras do Código de Barra, os outros parâmetros são opcionais, os quatro parâmetros seguintes são as posições e tamanho do desenho e o ultimo é a fonte da linha que imprimirá o código de barra,  acompanhe a Listagem 2.

 

Listagem 2. Função PrintEANCode

procedure PrintEANBarCode(strEANCode : String; objPicBox : PictureBox;

  const sngX1 : Single = -1; const sngY1 : Single = -1;

  const sngX2 : Single = -1; const sngY2 : Single = -1;

  const FontForText: Font = nil);

var

  I : Integer;

  sngPosX : Single;

  sngPosY : Single;

  sngScaleX : Single;

  strEANBin : String;

  strFormat : StringFormat;

  FontText : Font;

  sngXX1, sngYY1, sngXX2, sngYY2 : Single;

  BrushX : Brush;

begin

  StrFormat := StringFormat.Create;

  strEANBin := EANCodeBIN(strEANCode);

 

  If (FontForText = nil) Then

    FontText := Font.Create('Courier New', 10)

  else

    FontText := FontForText;

 

  If sngX1 = (-1) Then

    sngXX1 := 0

  else

    sngXX1 := sngX1;

 

  If sngY1 = (-1) Then

    sngYY1 := 0

  else

    sngYY1 := sngY1;

 

  If sngX2 = (-1) Then

    sngXX2 := objPicBox.Width

  else

    sngXX2 := sngX2;

 

  If sngY2 = (-1) Then

    sngYY2 := objPicBox.Height

  else

    sngYY2 := sngY2;

 

  sngPosX := sngXX1;

  sngPosY := sngYY2 - (1.5 * FontText.Height);

 

  BrushX := SolidBrush.Create(objPicBox.BackColor);

  objPicBox.CreateGraphics.FillRectangle(BrushX, sngXX1, sngYY1, sngXX2 - sngXX1, sngYY2 - sngYY1);

 

  sngScaleX := (sngXX2 - sngXX1) / strEANBin.Length;

 

  for I := 1 To Length(strEANBin) do

  begin

    If Copy(strEANBin, I, 1) = '1' Then

    begin

      BrushX := SolidBrush.Create(objPicBox.ForeColor);

      objPicBox.CreateGraphics.FillRectangle(BrushX, sngPosX, sngYY1, sngScaleX, sngPosY);

    end;

    sngPosX := sngXX1 + (I * sngScaleX);

 end;

 strFormat.Alignment := StringAlignment.Center;

 strFormat.FormatFlags := StringFormatFlags.NoWrap;

 BrushX := SolidBrush.Create(objPicBox.ForeColor);

 objPicBox.CreateGraphics.DrawString(strEANCode, FontText, BrushX, Convert.ToSingle((sngXX2 - sngXX1) / 2), Convert.ToSingle(sngYY2 - FontText.Height), strFormat);

 

end;

 

No evento Click do Button1 coloque o seguinte código para executar a Função de desenhar as barras do código de barra, Listagem 3.

 

Listagem 3. Executando a Função para Desenhar Barra

  PrintEANBarCode(TextBox1.Text, PictureBox1, 10, 10, PictureBox1.Width - 20, PictureBox1.Height - 20);

 

Não esqueça de colocar no uses SysUtils, agora basta você digitar um Código de Barra e clicar em desenhar que ele desenhará as barras no PictureBox veja a Figura 2 e Figura 3.

BarCode2.gif 

Figura 2. Código de Barra EAN 13

BarCode3.gif 

Figura 3. Código de Barra EAN 8

 

Abraços a Todos.

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Ajude-nos a evoluir: você gostou do post?  (3)  (0)

(opcional) Onde podemos melhorar?

Confirmar voto
Compartilhe:
Ficou com alguma dúvida?