For the host name set, if there is no data in the HTTP_HOST var, then set it to NA instead. Also default set to port 80 if no port info could be found.
200 lines
7.1 KiB
PHP
200 lines
7.1 KiB
PHP
<?php
|
|
/*
|
|
pBarcode39 - class to create barcodes (39B)
|
|
|
|
Version : 2.1.4
|
|
Made by : Jean-Damien POGOLOTTI
|
|
Last Update : 19/01/2014
|
|
|
|
This file can be distributed under the license you can find at :
|
|
|
|
http://www.pchart.net/license
|
|
|
|
You can find the whole class documentation on the pChart web site.
|
|
*/
|
|
|
|
/* pData class definition */
|
|
class pBarcode39
|
|
{
|
|
var $Codes;
|
|
var $Reverse;
|
|
var $Result;
|
|
var $pChartObject;
|
|
var $CRC;
|
|
var $MOD43;
|
|
|
|
/* Class creator */
|
|
function pBarcode39($BasePath="",$EnableMOD43=FALSE)
|
|
{
|
|
$this->MOD43 = $EnableMOD43;
|
|
$this->Codes = "";
|
|
$this->Reverse = "";
|
|
|
|
$FileHandle = @fopen($BasePath."data/39.db", "r");
|
|
|
|
if (!$FileHandle) { die("Cannot find barcode database (".$BasePath."data/39.db)."); }
|
|
|
|
while (!feof($FileHandle))
|
|
{
|
|
$Buffer = fgets($FileHandle,4096);
|
|
$Buffer = str_replace(chr(10),"",$Buffer);
|
|
$Buffer = str_replace(chr(13),"",$Buffer);
|
|
$Values = preg_split("/;/",$Buffer);
|
|
|
|
$this->Codes[$Values[0]] = $Values[1];
|
|
}
|
|
fclose($FileHandle);
|
|
}
|
|
|
|
/* Return the projected size of a barcode */
|
|
function getSize($TextString,$Format="")
|
|
{
|
|
$Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0;
|
|
$ShowLegend = isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : FALSE;
|
|
$LegendOffset = isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5;
|
|
$DrawArea = isset($Format["DrawArea"]) ? $Format["DrawArea"] : FALSE;
|
|
$FontSize = isset($Format["FontSize"]) ? $Format["FontSize"] : 12;
|
|
$Height = isset($Format["Height"]) ? $Format["Height"] : 30;
|
|
|
|
$TextString = $this->encode39($TextString);
|
|
$BarcodeLength = strlen($this->Result);
|
|
|
|
if ( $DrawArea ) { $WOffset = 20; } else { $WOffset = 0; }
|
|
if ( $ShowLegend ) { $HOffset = $FontSize+$LegendOffset+$WOffset; } else { $HOffset = 0; }
|
|
|
|
$X1 = cos($Angle * PI / 180) * ($WOffset+$BarcodeLength);
|
|
$Y1 = sin($Angle * PI / 180) * ($WOffset+$BarcodeLength);
|
|
|
|
$X2 = $X1 + cos(($Angle+90) * PI / 180) * ($HOffset+$Height);
|
|
$Y2 = $Y1 + sin(($Angle+90) * PI / 180) * ($HOffset+$Height);
|
|
|
|
|
|
$AreaWidth = max(abs($X1),abs($X2));
|
|
$AreaHeight = max(abs($Y1),abs($Y2));
|
|
|
|
return(array("Width"=>$AreaWidth,"Height"=>$AreaHeight));
|
|
}
|
|
|
|
/* Create the encoded string */
|
|
function encode39($Value)
|
|
{
|
|
$this->Result = "100101101101"."0";
|
|
$TextString = "";
|
|
for($i=1;$i<=strlen($Value);$i++)
|
|
{
|
|
$CharCode = ord($this->mid($Value,$i,1));
|
|
if ( $CharCode >= 97 && $CharCode <= 122 ) { $CharCode = $CharCode - 32; }
|
|
|
|
if ( isset($this->Codes[chr($CharCode)]) )
|
|
{
|
|
$this->Result = $this->Result.$this->Codes[chr($CharCode)]."0";
|
|
$TextString = $TextString.chr($CharCode);
|
|
}
|
|
}
|
|
|
|
if ( $this->MOD43 )
|
|
{
|
|
$Checksum = $this->checksum($TextString);
|
|
$this->Result = $this->Result.$this->Codes[$Checksum]."0";
|
|
}
|
|
|
|
$this->Result = $this->Result."100101101101";
|
|
$TextString = "*".$TextString."*";
|
|
|
|
return($TextString);
|
|
}
|
|
|
|
/* Create the encoded string */
|
|
function draw($Object,$Value,$X,$Y,$Format="")
|
|
{
|
|
$this->pChartObject = $Object;
|
|
|
|
$R = isset($Format["R"]) ? $Format["R"] : 0;
|
|
$G = isset($Format["G"]) ? $Format["G"] : 0;
|
|
$B = isset($Format["B"]) ? $Format["B"] : 0;
|
|
$Alpha = isset($Format["Alpha"]) ? $Format["Alpha"] : 100;
|
|
$Height = isset($Format["Height"]) ? $Format["Height"] : 30;
|
|
$Angle = isset($Format["Angle"]) ? $Format["Angle"] : 0;
|
|
$ShowLegend = isset($Format["ShowLegend"]) ? $Format["ShowLegend"] : FALSE;
|
|
$LegendOffset = isset($Format["LegendOffset"]) ? $Format["LegendOffset"] : 5;
|
|
$DrawArea = isset($Format["DrawArea"]) ? $Format["DrawArea"] : FALSE;
|
|
$AreaR = isset($Format["AreaR"]) ? $Format["AreaR"] : 255;
|
|
$AreaG = isset($Format["AreaG"]) ? $Format["AreaG"] : 255;
|
|
$AreaB = isset($Format["AreaB"]) ? $Format["AreaB"] : 255;
|
|
$AreaBorderR = isset($Format["AreaBorderR"]) ? $Format["AreaBorderR"] : $AreaR;
|
|
$AreaBorderG = isset($Format["AreaBorderG"]) ? $Format["AreaBorderG"] : $AreaG;
|
|
$AreaBorderB = isset($Format["AreaBorderB"]) ? $Format["AreaBorderB"] : $AreaB;
|
|
|
|
$TextString = $this->encode39($Value);
|
|
|
|
if ( $DrawArea )
|
|
{
|
|
$X1 = $X + cos(($Angle-135) * PI / 180) * 10;
|
|
$Y1 = $Y + sin(($Angle-135) * PI / 180) * 10;
|
|
|
|
$X2 = $X1 + cos($Angle * PI / 180) * (strlen($this->Result)+20);
|
|
$Y2 = $Y1 + sin($Angle * PI / 180) * (strlen($this->Result)+20);
|
|
|
|
if ( $ShowLegend )
|
|
{
|
|
$X3 = $X2 + cos(($Angle+90) * PI / 180) * ($Height+$LegendOffset+$this->pChartObject->FontSize+10);
|
|
$Y3 = $Y2 + sin(($Angle+90) * PI / 180) * ($Height+$LegendOffset+$this->pChartObject->FontSize+10);
|
|
}
|
|
else
|
|
{
|
|
$X3 = $X2 + cos(($Angle+90) * PI / 180) * ($Height+20);
|
|
$Y3 = $Y2 + sin(($Angle+90) * PI / 180) * ($Height+20);
|
|
}
|
|
|
|
$X4 = $X3 + cos(($Angle+180) * PI / 180) * (strlen($this->Result)+20);
|
|
$Y4 = $Y3 + sin(($Angle+180) * PI / 180) * (strlen($this->Result)+20);
|
|
|
|
$Polygon = array($X1,$Y1,$X2,$Y2,$X3,$Y3,$X4,$Y4);
|
|
$Settings = array("R"=>$AreaR,"G"=>$AreaG,"B"=>$AreaB,"BorderR"=>$AreaBorderR,"BorderG"=>$AreaBorderG,"BorderB"=>$AreaBorderB);
|
|
$this->pChartObject->drawPolygon($Polygon,$Settings);
|
|
}
|
|
|
|
for($i=1;$i<=strlen($this->Result);$i++)
|
|
{
|
|
if ( $this->mid($this->Result,$i,1) == 1 )
|
|
{
|
|
$X1 = $X + cos($Angle * PI / 180) * $i;
|
|
$Y1 = $Y + sin($Angle * PI / 180) * $i;
|
|
$X2 = $X1 + cos(($Angle+90) * PI / 180) * $Height;
|
|
$Y2 = $Y1 + sin(($Angle+90) * PI / 180) * $Height;
|
|
|
|
$Settings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha);
|
|
$this->pChartObject->drawLine($X1,$Y1,$X2,$Y2,$Settings);
|
|
}
|
|
}
|
|
|
|
if ( $ShowLegend )
|
|
{
|
|
$X1 = $X + cos($Angle * PI / 180) * (strlen($this->Result)/2);
|
|
$Y1 = $Y + sin($Angle * PI / 180) * (strlen($this->Result)/2);
|
|
|
|
$LegendX = $X1 + cos(($Angle+90) * PI / 180) * ($Height+$LegendOffset);
|
|
$LegendY = $Y1 + sin(($Angle+90) * PI / 180) * ($Height+$LegendOffset);
|
|
|
|
$Settings = array("R"=>$R,"G"=>$G,"B"=>$B,"Alpha"=>$Alpha,"Angle"=>-$Angle,"Align"=>TEXT_ALIGN_TOPMIDDLE);
|
|
$this->pChartObject->drawText($LegendX,$LegendY,$TextString,$Settings);
|
|
}
|
|
}
|
|
|
|
function checksum( $string )
|
|
{
|
|
$checksum = 0;
|
|
$length = strlen( $string );
|
|
$charset = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%';
|
|
|
|
for( $i=0; $i < $length; ++$i )
|
|
$checksum += strpos( $charset, $string[$i] );
|
|
|
|
return substr( $charset, ($checksum % 43), 1 );
|
|
}
|
|
|
|
function left($value,$NbChar) { return substr($value,0,$NbChar); }
|
|
function right($value,$NbChar) { return substr($value,strlen($value)-$NbChar,$NbChar); }
|
|
function mid($value,$Depart,$NbChar) { return substr($value,$Depart-1,$NbChar); }
|
|
}
|
|
?>
|