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


Podobne artykuły

Komentarze

2 odpowiedzi na “Generator kodów kreskowych GS1-128 (EAN/UCC)”

  1. Andrzej Cz napisał(a):

    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;
     
     
     

    • Tomasz Maciejewski Tomasz Maciejewski napisał(a):

      Napisałem w Delphi XE bibliotekę DLL, która na komponencie TBitmap odpowiednio rysuje kod kreskowy. W razie zainteresowania zakupem proszę o kontakt emailowy.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *