Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   Codigos de Barras (https://www.clubdelphi.com/foros/showthread.php?t=14960)

jostrix 06-10-2004 06:32:23

Codigos de Barras
 
Hola q tal a todos, me encuentro ante una situacion un poco dificil, necesito de su ayuda, lo q sucede es q nunca he trabajado con codigos de barras, y no se q tan complicado sea, si alguien puede decirme o recomendarme algun texto q me permite entender su funcionamiento en PHP y delphi, les agradecere eternamente.

Otra es q anteriormente entre estas paginas existia un componente q me permitia desarrollar codigos de barras, pero no lo he encontrado. Necesito desarrollar un pequeño programa q genere el codigo de barras en formato EAN, basado en las claves principales de mi b.d. de clientes. Alguien me puede orientar

vic_ia 06-10-2004 17:19:09

hola...

los unicos componentes que he localizado para la generación de codigo de barras son de pago, algunos de ellos en componentes de codigo de barras EAN128; otra opcion que tienes es utilizar alguna fuente del codigo de barras y hacer tu mismo el calculo de los códigos de control; en EAN128
puedes encontrar como general los codigos de control y al mandarlos a imprimir o visualizar utilizar una fuente de codigos de barras EAN128 (igualmente solo he encontrado fonts de pago,... pero sigo buscando alguna "free")...

saludos..

jostrix 16-10-2004 20:06:10

Gracias por Responder (nueva duda)
 
Muchas gracias por responder mis dudas, cheque las paginas q me indicaste y estuve descargando unas demos, y pues buscando encontre el siguiente codigo q te desarrolla en EAN 8 y 13, tiene un errorcito al tratar con EAN 13, cuando el caluclo para el digito verificador es mayor q 100, pero q se resuelve con un nuevo mod de 10 sobre el resultado obtenido, (bueno eso creo, lo he hecho asi y no he tenido broncas por el momento)I
Código Delphi [-]
   unit EAN; 
   
   interface 
   
   uses 
     Windows, SysUtils, Forms, Dialogs, StdCtrls, ExtCtrls, Classes, Controls; 
   
   const 
   EAN_izqA : array[0..9] of PChar=('0001101','0011001','0010011','0111101','0100011',
  '0110001','0101111','0111011','0110111','0001011'); 
   EAN_izqB : array[0..9] of PChar=('0100111','0110011','0011011','0100001','0011101',
  '0111001','0000101','0010001','0001001','0010111'); 
   EAN_dcha : array[0..9] of PChar=('1110010','1100110','1101100','1000010','1011100',
  '1001110','1010000','1000100','1001000','1110100'); 
     CodificaIzq : array[0..9] of PChar=('AAAAA','ABABB','ABBAB','ABBBA','BAABB',
 'BBAAB','BBBAA','BABAB','BABBA','BBABA'); 
   
   type 
     TFCodigoBarras = class(TForm) 
       Label1: TLabel; 
       Edit1: TEdit; 
       Panel1: TPanel; 
       PaintBox1: TImage; 
       procedure Edit1KeyPress(Sender: TObject; var Key: Char); 
     private 
       { Private declarations } 
     public 
       { Public declarations } 
       // procedimiento que codifica el número en un nº binario 
       procedure Codifica(num : string); 
       // procedimiento para dibujar el cód. de barras a partir del nº binario 
       procedure Dibujar(matrix : string); 
       // procedimiento para validar-corregir los códigos 
       procedure EANCorrecto(var num : string); 
     end; 
   
   var 
     FCodigoBarras: TFCodigoBarras; 
   
   implementation 
   
   {$R *.DFM} 
   
   procedure TFCodigoBarras.EANCorrecto(var num : string); 
   var 
     i,N : byte; 
     sum : integer; 
     flag : byte; 
   begin 
     sum:=0; 
     N:=Length(num)-1; 
     for i:=1 to N do 
     begin 
       if (i mod 2)=0 then 
       begin 
         if N=12 then 
           sum:=sum+StrToInt(num[i])*3 
         else 
           sum:=sum+StrToInt(num[i]); 
       end 
       else 
       begin 
         if N=12 then 
           sum:=sum+StrToInt(num[i]) 
         else 
           sum:=sum+StrToInt(num[i])*3; 
       end; 
     end; 
     if sum>99 then 
       Flag:=10-(sum mod 100) 
     else 
       Flag:=10-(sum mod 10); 
     if Flag=10 then Flag:=0; 
     if not(StrToInt(num[N+1])=flag) then 
       num:=copy(num,1,length(num)-1)+IntToStr(Flag); 
   end; 
   
   procedure TFCodigoBarras.Codifica(num : string); 
   var 
     matrix : string; 
     i : integer; 
   begin 
     num:=Edit1.Text; 
     matrix:=''; 
     case Length(num) of 
     13: begin 
         EANCorrecto(num); 
         Edit1.Text:=num; 
         matrix:=matrix+'x0x'; // barra inicio 
         matrix:=matrix+EAN_izqA[StrToInt(num[2])]; 
         for i:=3 to 7 do 
           if CodificaIzq[StrToInt(num[1])][i-3]='A' then 
             matrix:=matrix+EAN_izqA[StrToInt(num[i])] 
           else 
             matrix:=matrix+EAN_izqB[StrToInt(num[i])]; 
         matrix:=matrix+'0x0x0'; // barra central 
         matrix:=matrix+EAN_dcha[StrToInt(num[8])]; 
         matrix:=matrix+EAN_dcha[StrToInt(num[9])]; 
         matrix:=matrix+EAN_dcha[StrToInt(num[10])]; 
         matrix:=matrix+EAN_dcha[StrToInt(num[11])]; 
         matrix:=matrix+EAN_dcha[StrToInt(num[12])]; 
         matrix:=matrix+EAN_dcha[StrToInt(num[13])]; 
         matrix:=matrix+'x0x'; // barra final 
         Dibujar(Matrix); 
       end; 
     8: begin 
         EANCorrecto(num); 
         Edit1.Text:=num; 
         matrix:=matrix+'x0x'; 
         matrix:=matrix+EAN_izqA[StrToInt(num[1])]; 
         matrix:=matrix+EAN_izqA[StrToInt(num[2])]; 
         matrix:=matrix+EAN_izqA[StrToInt(num[3])]; 
         matrix:=matrix+EAN_izqA[StrToInt(num[4])]; 
         matrix:=matrix+'0x0x0'; 
         matrix:=matrix+EAN_dcha[StrToInt(num[5])]; 
         matrix:=matrix+EAN_dcha[StrToInt(num[6])]; 
         matrix:=matrix+EAN_dcha[StrToInt(num[7])]; 
         matrix:=matrix+EAN_dcha[StrToInt(num[8])]; 
         matrix:=matrix+'x0x'; 
         Dibujar(Matrix); 
       end 
     else 
       ShowMessage('LONGITUD DE CODIGO NO VALIDA'); 
     end; 
   
   end; 
   
   procedure TFCodigoBarras.Dibujar(matrix : string); 
   var 
     i : integer; 
   begin 
     PaintBox1.Canvas.Brush.Color:=clWhite; 
     PaintBox1.Canvas.FillRect(Rect(0,0,PaintBox1.Width,PaintBox1.Height)); 
     PaintBox1.Canvas.Pen.Color:=clBlack; 
   
     for i:=1 to Length(Matrix) do 
       if matrix[i]='1' then 
         PaintBox1.Canvas.PolyLine([Point(10+i,10),Point(10+i,50)]) 
       else 
       if matrix[i]='x' then 
         PaintBox1.Canvas.PolyLine([Point(10+i,10),Point(10+i,55)]); 
   
     if Length(Edit1.Text)=13 then 
     begin 
         PaintBox1.Canvas.TextOut(3,50,Edit1.Text[1]); 
         PaintBox1.Canvas.TextOut(17,50,copy(Edit1.Text,2,6)); 
         PaintBox1.Canvas.TextOut(63,50,copy(Edit1.Text,8,6)); 
     end 
     else 
     if Length(Edit1.Text)=8 then 
     begin 
         PaintBox1.Canvas.TextOut(16,50,copy(Edit1.Text,1,4)); 
         PaintBox1.Canvas.TextOut(48,50,copy(Edit1.Text,5,4)); 
     end; 
   
     PaintBox1.Picture.SaveToFile('c:\windows\escritorio\BarCode\'+Edit1.Text+'.bmp'); 
   end; 
   
   procedure TFCodigoBarras.Edit1KeyPress(Sender: TObject; var Key: Char); 
   begin 
     if Key=#13 then 
     begin 
       Codifica(Edit1.Text); 
       Edit1.SelStart:=0; 
       Edit1.SelLength:=Length(Edit1.Text); 
     end; 
   end; 
   
   end.

:p Ahora mi duda es, tengo una tabla relacionada con mis clientes en donde la clave principal es la q quiero el codigo genere su codigo de barras, el problema es q quiero q el sistema genere automaticamente la clave, pense en utilizar un campo Auto_increment, la bronca es q con este numero no se prevee lo del digito verificador..., entonces pense en un campo auto_increment y a partir de ese calcular el digio verificador y su concatenacion q sea el resultado... Esto es correcto? o existe una forma mas sencilla de hacerlo? y por otra parte q es mejor usar EAN 8 o EAN13, y en dado caso por q numero es recomendable inicializar mi campo auto_increment

Emilio 17-10-2004 10:36:14

Eso con Delphi vale, pero con PHP de poco te va a servir, una solución válida para PHP es la de hacer uso de True Types, pero debes tener en cuenta que todo ordenador que quiera imprimir etiquetas debe tenerlas instaladas.

jostrix 17-10-2004 22:46:22

Y como consigo esas fuentes TrueType
 
Pues si seria de gran utilidad saber de donde puedo descargar las fuentes TrueType q mencionas, dado q se conoce el numero de maquinas q puedan ver mi aplicacion eso no seria problema o un link para descargar mis fuentes, pero tambien si alguien puede decirme como le pasa parametros desde php a una aplicacion Delphi y como indico a mi aplicacion delphi q necesita recibir un parametro para poder ser ejecutada

Emilio 21-10-2004 14:58:26

Una simple búsqueda en google con "ean true type font" el primer enlace ya te vale...
http://www.sofotex.com/download/Grap...re/Font_Tools/


La franja horaria es GMT +2. Ahora son las 16:37:10.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi