fpdf
PHP powered
home was ist fpdf? downloads & add-ons dokumentation faq forum impressum links kontakt
 

Downloads > Add-On

 
         
 

Barcodes

Informations

Author: Olivier
License: Freeware

Description

This script implements EAN13 and UPC-A barcodes (the second being a particular case of the first one). Bars are drawn directly in the PDF (no image is generated).

EAN13(float x, float y, string barcode [, float h [, float w]])

x: abscissa of barcode.
y: ordinate of barcode.
barcode: value of barcode.
h: height of barcode. Default value: 16.
w: width of a bar. Default value: 0.35.

UPC_A(float x, float y, string barcode [, float h [, float w]])

Same parameters.

An EAN13 barcode is made up of 13 digits, UPC-A of 12 (leading zeroes are added if necessary). The last digit is a check digit; if it's not supplied, it will be automatically computed.

If you want to print other kinds of barcodes, you can use the class available here (LGPL) and here (GPL). They make use of the GD library and support many types of barcodes. You'll have to generate a PNG and include it in the PDF.
For POSTNET barcodes, see this script.

Another possibility consists in using a barcode font. There is for instance a free font to generate code 39 available here.

Source

<?php
define
('FPDF_FONTPATH', 'font/');
require(
'fpdf.php');

class
PDF extends FPDF
{
function
EAN13($x, $y, $barcode, $h=16, $w=.35)
{
    $this->Barcode($x, $y, $barcode, $h, $w, 13);
}

function
UPC_A($x, $y, $barcode, $h=16, $w=.35)
{
    $this->Barcode($x, $y, $barcode, $h, $w, 12);
}

function
GetCheckDigit($barcode)
{
    //Compute the check digit
    $sum=0;
    for($i=1;$i<=11;$i+=2)
        $sum+=3*$barcode{$i};
    for($i=0;$i<=10;$i+=2)
        $sum+=$barcode{$i};
    $r=$sum%10;
    if($r>0)
        $r=10-$r;
    return $r;
}

function
TestCheckDigit($barcode)
{
    //Test validity of check digit
    $sum=0;
    for($i=1;$i<=11;$i+=2)
        $sum+=3*$barcode{$i};
    for($i=0;$i<=10;$i+=2)
        $sum+=$barcode{$i};
    return ($sum+$barcode{12})%10==0;
}

function
Barcode($x, $y, $barcode, $h, $w, $len)
{
    //Padding
    $barcode=str_pad($barcode, $len-1, '0', STR_PAD_LEFT);
    if($len==12)
        $barcode='0'.$barcode;
    //Add or control the check digit
    if(strlen($barcode)==12)
        $barcode.=$this->GetCheckDigit($barcode);
    elseif(!$this->TestCheckDigit($barcode))
        $this->Error('Incorrect check digit');
    //Convert digits to bars
    $codes=array(
        'A'=>array(
            '0'=>'0001101', '1'=>'0011001', '2'=>'0010011', '3'=>'0111101', '4'=>'0100011',
            '5'=>'0110001', '6'=>'0101111', '7'=>'0111011', '8'=>'0110111', '9'=>'0001011'),
        'B'=>array(
            '0'=>'0100111', '1'=>'0110011', '2'=>'0011011', '3'=>'0100001', '4'=>'0011101',
            '5'=>'0111001', '6'=>'0000101', '7'=>'0010001', '8'=>'0001001', '9'=>'0010111'),
        'C'=>array(
            '0'=>'1110010', '1'=>'1100110', '2'=>'1101100', '3'=>'1000010', '4'=>'1011100',
            '5'=>'1001110', '6'=>'1010000', '7'=>'1000100', '8'=>'1001000', '9'=>'1110100')
        );
    $parities=array(
        '0'=>array('A', 'A', 'A', 'A', 'A', 'A'),
        '1'=>array('A', 'A', 'B', 'A', 'B', 'B'),
        '2'=>array('A', 'A', 'B', 'B', 'A', 'B'),
        '3'=>array('A', 'A', 'B', 'B', 'B', 'A'),
        '4'=>array('A', 'B', 'A', 'A', 'B', 'B'),
        '5'=>array('A', 'B', 'B', 'A', 'A', 'B'),
        '6'=>array('A', 'B', 'B', 'B', 'A', 'A'),
        '7'=>array('A', 'B', 'A', 'B', 'A', 'B'),
        '8'=>array('A', 'B', 'A', 'B', 'B', 'A'),
        '9'=>array('A', 'B', 'B', 'A', 'B', 'A')
        );
    $code='101';
    $p=$parities[$barcode{0}];
    for($i=1;$i<=6;$i++)
        $code.=$codes[$p[$i-1]][$barcode{$i}];
    $code.='01010';
    for($i=7;$i<=12;$i++)
        $code.=$codes['C'][$barcode{$i}];
    $code.='101';
    //Draw bars
    for($i=0;$i<strlen($code);$i++)
    {
        if($code{$i}=='1')
            $this->Rect($x+$i*$w, $y, $w, $h, 'F');
    }
    //Print text uder barcode
    $this->SetFont('Arial', '', 12);
    $this->Text($x, $y+$h+11/$this->k, substr($barcode, -$len));
}
}

$pdf=new PDF();
$pdf->Open();
$pdf->AddPage();
$pdf->EAN13(80, 40, '123456789012');
$pdf->Output();
?>

View the result here.

Download

ZIP | TGZ
 






 
         
         
 
 
fpdf.de © Copyright 2004-2006 carrib internet solutions - Beachten Sie bitte die Nutzungsbedingungen
Eine Verwendung der auf fpdf.de befindlichen Inhalte (Texte, Grafiken) ist nur mit Zustimmung des Betreibers zulässig.