Skripty : Čárový kód Code 128

Popis

Tento skript zpracovává čárový kód 128 (A, B a C). K dispozici jsou všechny 128 ASCII znaky. Znakové sady A, B a C jsou automaticky vybrány podle hodnoty pro tisk.

Code128(float x, float y, string code, float w, float h)

x: abscissa
y: ordinate
code: barcode value
w: total width
h: height


Zdrojový kód


<?php
/*******************************************************************************
* Script :  PDF_Code128
* Version : 1.0

* Date :    20/05/2008
* Auteur :  Roland Gautier
*
* C128($x,$y,$code,$w,$h)
*     $x,$y :     angle supérieur gauche du code à barre

*     $code :     le code à créer
*     $w :        largeur hors tout du code dans l'unité courante

*                 (prévoir 5 à 15 mm de blanc à droite et à gauche)
*     $h :        hauteur hors tout du code dans l'unité courante

*
* Commutation des jeux ABC automatique et optimisée.
*******************************************************************************/

require('fpdf.php');


class PDF_Code128 extends FPDF {

var $T128;                                             // tableau des codes 128

var $ABCset="";                                        // jeu des caractères éligibles au C128
var $Aset="";                                          // Set A du jeu des caractères éligibles

var $Bset="";                                          // Set B du jeu des caractères éligibles
var $Cset="";                                          // Set C du jeu des caractères éligibles

var $SetFrom;                                          // Convertisseur source des jeux vers le tableau
var $SetTo;                                            // Convertisseur destination des jeux vers le tableau

var $JStart = array("A"=>103, "B"=>104, "C"=>105);     // Caractères de sélection de jeu au début du C128

var $JSwap = array("A"=>101, "B"=>100, "C"=>99);       // Caractères de changement de jeu


//____________________________ Extension du constructeur _______________________
function PDF_Code128($orientation='P',$unit='mm',$format='A4') {


    parent::FPDF($orientation,$unit,$format);

    $this->T128[] = array(2, 1, 2, 2, 2, 2);           //0 : [ ]               // composition des caractères

    $this->T128[] = array(2, 2, 2, 1, 2, 2);           //1 : [!]

    $this->T128[] = array(2, 2, 2, 2, 2, 1);           //2 : ["]

    $this->T128[] = array(1, 2, 1, 2, 2, 3);           //3 : [#]

    $this->T128[] = array(1, 2, 1, 3, 2, 2);           //4 : [$]

    $this->T128[] = array(1, 3, 1, 2, 2, 2);           //5 : [%]

    $this->T128[] = array(1, 2, 2, 2, 1, 3);           //6 : [&]

    $this->T128[] = array(1, 2, 2, 3, 1, 2);           //7 : [']

    $this->T128[] = array(1, 3, 2, 2, 1, 2);           //8 : [(]

    $this->T128[] = array(2, 2, 1, 2, 1, 3);           //9 : [)]

    $this->T128[] = array(2, 2, 1, 3, 1, 2);           //10 : [*]

    $this->T128[] = array(2, 3, 1, 2, 1, 2);           //11 : [+]

    $this->T128[] = array(1, 1, 2, 2, 3, 2);           //12 : [,]

    $this->T128[] = array(1, 2, 2, 1, 3, 2);           //13 : [-]

    $this->T128[] = array(1, 2, 2, 2, 3, 1);           //14 : [.]

    $this->T128[] = array(1, 1, 3, 2, 2, 2);           //15 : [/]

    $this->T128[] = array(1, 2, 3, 1, 2, 2);           //16 : [0]

    $this->T128[] = array(1, 2, 3, 2, 2, 1);           //17 : [1]

    $this->T128[] = array(2, 2, 3, 2, 1, 1);           //18 : [2]

    $this->T128[] = array(2, 2, 1, 1, 3, 2);           //19 : [3]

    $this->T128[] = array(2, 2, 1, 2, 3, 1);           //20 : [4]

    $this->T128[] = array(2, 1, 3, 2, 1, 2);           //21 : [5]

    $this->T128[] = array(2, 2, 3, 1, 1, 2);           //22 : [6]

    $this->T128[] = array(3, 1, 2, 1, 3, 1);           //23 : [7]

    $this->T128[] = array(3, 1, 1, 2, 2, 2);           //24 : [8]

    $this->T128[] = array(3, 2, 1, 1, 2, 2);           //25 : [9]

    $this->T128[] = array(3, 2, 1, 2, 2, 1);           //26 : [:]

    $this->T128[] = array(3, 1, 2, 2, 1, 2);           //27 : [;]

    $this->T128[] = array(3, 2, 2, 1, 1, 2);           //28 : [<]

    $this->T128[] = array(3, 2, 2, 2, 1, 1);           //29 : [=]

    $this->T128[] = array(2, 1, 2, 1, 2, 3);           //30 : [>]

    $this->T128[] = array(2, 1, 2, 3, 2, 1);           //31 : [?]

    $this->T128[] = array(2, 3, 2, 1, 2, 1);           //32 : [@]

    $this->T128[] = array(1, 1, 1, 3, 2, 3);           //33 : [A]<

    $this->T128[] = array(1, 3, 1, 1, 2, 3);           //34 : [B]

    $this->T128[] = array(1, 3, 1, 3, 2, 1);           //35 : [C]

    $this->T128[] = array(1, 1, 2, 3, 1, 3);           //36 : [D]

    $this->T128[] = array(1, 3, 2, 1, 1, 3);           //37 : [E]

    $this->T128[] = array(1, 3, 2, 3, 1, 1);           //38 : [F]

    $this->T128[] = array(2, 1, 1, 3, 1, 3);           //39 : [G]

    $this->T128[] = array(2, 3, 1, 1, 1, 3);           //40 : [H]

    $this->T128[] = array(2, 3, 1, 3, 1, 1);           //41 : [I]

    $this->T128[] = array(1, 1, 2, 1, 3, 3);           //42 : [J]

    $this->T128[] = array(1, 1, 2, 3, 3, 1);           //43 : [K]

    $this->T128[] = array(1, 3, 2, 1, 3, 1);           //44 : [L]

    $this->T128[] = array(1, 1, 3, 1, 2, 3);           //45 : [M]

    $this->T128[] = array(1, 1, 3, 3, 2, 1);           //46 : [N]

    $this->T128[] = array(1, 3, 3, 1, 2, 1);           //47 : [O]

    $this->T128[] = array(3, 1, 3, 1, 2, 1);           //48 : [P]

    $this->T128[] = array(2, 1, 1, 3, 3, 1);           //49 : [Q]

    $this->T128[] = array(2, 3, 1, 1, 3, 1);           //50 : [R]

    $this->T128[] = array(2, 1, 3, 1, 1, 3);           //51 : [S]

    $this->T128[] = array(2, 1, 3, 3, 1, 1);           //52 : [T]

    $this->T128[] = array(2, 1, 3, 1, 3, 1);           //53 : [U]

    $this->T128[] = array(3, 1, 1, 1, 2, 3);           //54 : [V]

    $this->T128[] = array(3, 1, 1, 3, 2, 1);           //55 : [W]

    $this->T128[] = array(3, 3, 1, 1, 2, 1);           //56 : [X]

    $this->T128[] = array(3, 1, 2, 1, 1, 3);           //57 : [Y]

    $this->T128[] = array(3, 1, 2, 3, 1, 1);           //58 : [Z]

    $this->T128[] = array(3, 3, 2, 1, 1, 1);           //59 : [[]

    $this->T128[] = array(3, 1, 4, 1, 1, 1);           //60 : [\]

    $this->T128[] = array(2, 2, 1, 4, 1, 1);           //61 : []]

    $this->T128[] = array(4, 3, 1, 1, 1, 1);           //62 : [^]

    $this->T128[] = array(1, 1, 1, 2, 2, 4);           //63 : [_]

    $this->T128[] = array(1, 1, 1, 4, 2, 2);           //64 : [`]

    $this->T128[] = array(1, 2, 1, 1, 2, 4);           //65 : [a]

    $this->T128[] = array(1, 2, 1, 4, 2, 1);           //66 : [b]

    $this->T128[] = array(1, 4, 1, 1, 2, 2);           //67 : [c]

    $this->T128[] = array(1, 4, 1, 2, 2, 1);           //68 : [d]<

    $this->T128[] = array(1, 1, 2, 2, 1, 4);           //69 : [e]

    $this->T128[] = array(1, 1, 2, 4, 1, 2);           //70 : [f]

    $this->T128[] = array(1, 2, 2, 1, 1, 4);           //71 : [g]

    $this->T128[] = array(1, 2, 2, 4, 1, 1);           //72 : [h]

    $this->T128[] = array(1, 4, 2, 1, 1, 2);           //73 : [i]

    $this->T128[] = array(1, 4, 2, 2, 1, 1);           //74 : [j]

    $this->T128[] = array(2, 4, 1, 2, 1, 1);           //75 : [k]

    $this->T128[] = array(2, 2, 1, 1, 1, 4);           //76 : [l]

    $this->T128[] = array(4, 1, 3, 1, 1, 1);           //77 : [m]

    $this->T128[] = array(2, 4, 1, 1, 1, 2);           //78 : [n]

    $this->T128[] = array(1, 3, 4, 1, 1, 1);           //79 : [o]

    $this->T128[] = array(1, 1, 1, 2, 4, 2);           //80 : [p]

    $this->T128[] = array(1, 2, 1, 1, 4, 2);           //81 : [q]

    $this->T128[] = array(1, 2, 1, 2, 4, 1);           //82 : [r]

    $this->T128[] = array(1, 1, 4, 2, 1, 2);           //83 : [s]

    $this->T128[] = array(1, 2, 4, 1, 1, 2);           //84 : [t]

    $this->T128[] = array(1, 2, 4, 2, 1, 1);           //85 : [u]

    $this->T128[] = array(4, 1, 1, 2, 1, 2);           //86 : [v]

    $this->T128[] = array(4, 2, 1, 1, 1, 2);           //87 : [w]

    $this->T128[] = array(4, 2, 1, 2, 1, 1);           //88 : [x]

    $this->T128[] = array(2, 1, 2, 1, 4, 1);           //89 : [y]

    $this->T128[] = array(2, 1, 4, 1, 2, 1);           //90 : [z]

    $this->T128[] = array(4, 1, 2, 1, 2, 1);           //91 : [{]

    $this->T128[] = array(1, 1, 1, 1, 4, 3);           //92 : [|]

    $this->T128[] = array(1, 1, 1, 3, 4, 1);           //93 : [}]

    $this->T128[] = array(1, 3, 1, 1, 4, 1);           //94 : [~]

    $this->T128[] = array(1, 1, 4, 1, 1, 3);           //95 : [DEL]

    $this->T128[] = array(1, 1, 4, 3, 1, 1);           //96 : [FNC3]

    $this->T128[] = array(4, 1, 1, 1, 1, 3);           //97 : [FNC2]

    $this->T128[] = array(4, 1, 1, 3, 1, 1);           //98 : [SHIFT]

    $this->T128[] = array(1, 1, 3, 1, 4, 1);           //99 : [Cswap]

    $this->T128[] = array(1, 1, 4, 1, 3, 1);           //100 : [Bswap]                

    $this->T128[] = array(3, 1, 1, 1, 4, 1);           //101 : [Aswap]

    $this->T128[] = array(4, 1, 1, 1, 3, 1);           //102 : [FNC1]

    $this->T128[] = array(2, 1, 1, 4, 1, 2);           //103 : [Astart]

    $this->T128[] = array(2, 1, 1, 2, 1, 4);           //104 : [Bstart]

    $this->T128[] = array(2, 1, 1, 2, 3, 2);           //105 : [Cstart]

    $this->T128[] = array(2, 3, 3, 1, 1, 1);           //106 : [STOP]

    $this->T128[] = array(2, 1);                       //107 : [END BAR]

    for ($i = 32; $i <= 95; $i++) {                                            // jeux de caractères

        $this->ABCset .= chr($i);
    }
    $this->Aset = $this->ABCset;

    $this->Bset = $this->ABCset;
    for ($i = 0; $i <= 31; $i++) {

        $this->ABCset .= chr($i);
        $this->Aset .= chr($i);

    }
    for ($i = 96; $i <= 126; $i++) {
        $this->ABCset .= chr($i);

        $this->Bset .= chr($i);
    }
    $this->Cset="0123456789";


    for ($i=0; $i<96; $i++) {                                                  // convertisseurs des jeux A & B  

        @$this->SetFrom["A"] .= chr($i);
        @$this->SetFrom["B"] .= chr($i + 32);

        @$this->SetTo["A"] .= chr(($i < 32) ? $i+64 : $i-32);

        @$this->SetTo["B"] .= chr($i);
    }
}


//________________ Fonction encodage et dessin du code 128 _____________________
function Code128($x,$y,$code,$w,$h) {

    $Aguid="";                                                                      // Création des guides de choix ABC
    $Bguid="";

    $Cguid="";
    for ($i=0; $i < strlen($code); $i++) {

        $needle=substr($code,$i,1);
        $Aguid .= ((strpos($this->Aset,$needle)===FALSE) ? "N" : "O"); 

        $Bguid .= ((strpos($this->Bset,$needle)===FALSE) ? "N" : "O"); 

        $Cguid .= ((strpos($this->Cset,$needle)===FALSE) ? "N" : "O");

    }

    $SminiC = "OOOO";
    $IminiC = 4;

    $crypt = "";

    while ($code > "") {
                                                                                    // BOUCLE PRINCIPALE DE CODAGE
        $i = strpos($Cguid,$SminiC);                                                // forçage du jeu C, si possible

        if ($i!==FALSE) {
            $Aguid [$i] = "N";
            $Bguid [$i] = "N";

        }

        if (substr($Cguid,0,$IminiC) == $SminiC) {                                  // jeu C

            $crypt .= chr(($crypt > "") ? $this->JSwap["C"] : $this->JStart["C"]);  // début Cstart, sinon Cswap

            $made = strpos($Cguid,"N");                                             // étendu du set C
            if ($made === FALSE) $made = strlen($Cguid);

            if (fmod($made,2)==1) $made--;                                          // seulement un nombre pair

            for ($i=0; $i < $made; $i += 2) $crypt .= chr(strval(substr($code,$i,2))); // conversion 2 par 2

            $jeu = "C";
        } else {
            $madeA = strpos($Aguid,"N");                                            // étendu du set A

            if ($madeA === FALSE) $madeA = strlen($Aguid);
            $madeB = strpos($Bguid,"N");                                            // étendu du set B

            if ($madeB === FALSE) $madeB = strlen($Bguid);
            $made = (($madeA < $madeB) ? $madeB : $madeA );                         // étendu traitée

            $jeu = (($madeA < $madeB) ? "B" : "A" );                                // Jeu en cours
            $jeuguid = $jeu . "guid";


            $crypt .= chr(($crypt > "") ? $this->JSwap["$jeu"] : $this->JStart["$jeu"]); // début start, sinon swap


            $crypt .= strtr(substr($code, 0,$made), $this->SetFrom[$jeu], $this->SetTo[$jeu]); // conversion selon jeu


        }
        $code = substr($code,$made);                                           // raccourcir légende et guides de la zone traitée

        $Aguid = substr($Aguid,$made);
        $Bguid = substr($Bguid,$made);

        $Cguid = substr($Cguid,$made);
    }                                                                          // FIN BOUCLE PRINCIPALE

    $check=ord($crypt[0]);                                                     // calcul de la somme de contrôle

    for ($i=0; $i<strlen($crypt); $i++) {
        $check += (ord($crypt[$i]) * $i);

    }
    $check %= 103;

    $crypt .= chr($check) . chr(106) . chr(107);                               // Chaine Cryptée complète


    $i = (strlen($crypt) * 11) - 8;                                            // calcul de la largeur du module

    $modul = $w/$i;

    for ($i=0; $i<strlen($crypt); $i++) {                                      // BOUCLE D'IMPRESSION

        $c = $this->T128[ord($crypt[$i])];
        for ($j=0; $j<count($c); $j++) {

            $this->Rect($x,$y,$c[$j]*$modul,$h,"F");

            $x += ($c[$j++]+$c[$j])*$modul;
        }
    }

}
}                                                                              // FIN DE CLASSE
?>



Příklad


<?php

require('code128.php');

$pdf=new PDF_Code128();
$pdf->AddPage();
$pdf->SetFont('Arial','',10);


//A set
$code='CODE 128';
$pdf->Code128(50,20,$code,80,20);

$pdf->SetXY(50,45);
$pdf->Write(5,'A set: "'.$code.'"');


//B set
$code='Code 128';
$pdf->Code128(50,70,$code,80,20);

$pdf->SetXY(50,95);
$pdf->Write(5,'B set: "'.$code.'"');


//C set<
$code='12345678901234567890';
$pdf->Code128(50,120,$code,110,20);

$pdf->SetXY(50,145);
$pdf->Write(5,'C set: "'.$code.'"');


//A,C,B sets
$code='ABCDEFG1234567890AbCdEf';
$pdf->Code128(50,170,$code,125,20);

$pdf->SetXY(50,195);
$pdf->Write(5,'ABC sets combined: "'.$code.'"');


$pdf->Output();
?>



Ukázka

fpdf-carovy-kod-code-128.pdf

Download

fpdf-carovy-kod-code-128.zip

Informace

Author: Roland Gautier
License: FPDF