Generator kodów kreskowych GS1-128 (EAN/UCC)
Podczas realizacji jednego z projektów dla branży logistycznej, potrzebna była funkcjonalność wydruku etykiety z kodami kreskowymi w formacie GS1-128. Napisałem odpowiednią bibliotekę, dzięki której można zakodować żądany ciąg w formacie kodu kreskowego GS1-128. Wynik zostanie on automatycznie zapisany w formacie graficznym lub bezpośrednio do strumienia pamięci.
Opis
Natywna biblioteka do generowania kodów kreskowych w standardzie Code-128 oraz GS1-128 z możliwością konfiguracji parametrów. Biblioteka współpracuje ze wszystkimi popularnymi środowiskami takimi jak: Delphi (7, XE+), C++/CLI, C#, QT. W pakiecie dołączane są aplikacje demonstracyjne z pełnym kodem źródłowym.
Możliwości biblioteki
- Generowanie kodów w standardzie Code-128 oraz GS1-128
- Zapis kodu kreskowego do pliku w formacie BMP lub JPG
- Zapis kodu kreskowego bezpośrednio do pamięci w przypadku Delphi
- Metoda kodowania: automatyczna lub manualna
- Manipulacja tekstem
- Manipulacja wymiarami kodu
Galeria
Strona Internetowa
Potrzebujesz ładnej strony internetowej? Zobacz demo na: tej stronie












Witam !
Zwracam się z gorącą prośbą o pomoc.
Piszę program który ma pokazać na ekranie i wydrukować etykietę z numerem w postaci kodu kreskowego w formacie code 128 . Piszę w Delphi 3 i do wydruku używam QRepord . Dla Panel1 i dla QRLabel1 zadeklarowałem fonty code 128 ( Panel1.Font.Name := ‘Code 128’;) . Obliczam znak kontrolny i dodaję znak startu (#204) i znak stopu (#206) zgodnie z opisem – i nic .Skaner nie odczytuje . Od paru dni moje zmagania kończą się porażką . Jak byś mógł pomóc w napisaniu takiej funkcji lub podesłać komponent rozwiązujący problem byłbym bardzo wdzięczny . Z góry bardzo dziękuję
procedure TForm1.Button1Click(Sender: TObject);
const
MCode128 : string = ”;
var
Chaine128 : string;
Code128 : string;
Cle128 : Integer;
CalculCle : boolean;
MChecksum : extended;
MMini, MDummy, Mcle : integer;
TableB : boolean;
car : char;
ncar : byte;
i : integer;
interdit : byte;
ccar : Array[1..2] of char;
Dr : TCBDirection;
begin
Chaine128 := Edit1.Text;
interdit := 0;
Code128 := ”;
if (Chaine128>”) then
begin
for i:=1 to length(Chaine128) do
begin
car := Chaine128 [i];
if ((car>char(31)) and (car<char(127))) or (car=char(198)) then
continue
else
begin interdit:=ord(car);
break;
end;
end; {for}
if interdit=0 then
begin
Code128 := ”;
tableB := true;
i := 1;
While i<=length(Chaine128) do
begin
if tableB then
begin
if (i=1) or ((i+3)=length(Chaine128)) then
MMini := 4 else MMini := 6;
MMini := MMini – 1;
if ((i + MMini) <= length(Chaine128)) then
begin
While MMini >=0 do
begin
car := Chaine128 [i+MMini];
ncar := ord(car);
if (ncar<48) or (ncar>57) then break;
MMini := MMini – 1;
end;{While MMini>0}
end; {if <= len}
if (MMini<0) then // Choix table C
begin
if i=1 then Code128 := char(210) else Code128 := Code128 + char(204);
tableB := false;
end
else if i=1 then Code128 := char(204);// char(209);
end; {if MMini<0}
if not tableB then
begin
MMini := 2;
MMini := MMini – 1;
if ((i + MMini) <= length(Chaine128)) then
begin
While MMini >=0 do
begin
ccar [MMini + 1] := Chaine128 [i+MMini];
ncar := ord(ccar [MMini+1]);
if (ncar<48) or (ncar>57) then break;
MMini := MMini – 1;
end;{While MMini >=0 }
end; {if ((i + MMini)}
if (MMini<0) then
begin
MDummy := StrToInt(ccar [1]+ccar [2]);
if MDummy<95 then
MDummy := MDummy + 32 else MDummy := MDummy + 100;
Code128 := Code128 + char(MDummy);
i:=i+2;
end
else
begin Code128 := Code128 + char(205);
tableB := true;
end;{if (MMini<0)}
end;{if not tableB}
if tableB then
begin
car := Chaine128 [i];
Code128 := Code128 + car;
i:=i+1;
end; {if tableB}
end; {While i<=}
// Calcul de la clé de contrôle
CalculCle := true;
if CalculCle then
begin
for i:=1 to length(Code128) do
begin
car := Code128 [i];
ncar := ord(car);
if (ncar<127) then ncar := ncar – 32 else ncar := ncar – 100;
if (i=1) then MChecksum := ncar;
MChecksum := MChecksum + ((i – 1) * ncar);
MCle := trunc(MChecksum/103);
MChecksum := trunc(MChecksum – (MCle * 103));
end; {for }
if (MChecksum<95) then MChecksum := MChecksum + 32 else MChecksum := MChecksum + 100;
i := trunc(MChecksum);
Code128 := Code128 + char(i) + char(206);//char(211);
Cle128 := i;
end
else Cle128 := 0;
end;{interdit=0 }
end; {if Chaine128>”}
Panel1.Caption := Code128;
Napisałem w Delphi XE bibliotekę DLL, która na komponencie TBitmap odpowiednio rysuje kod kreskowy. W razie zainteresowania zakupem proszę o kontakt emailowy.