mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-11-16 04:57:15 +01:00
983 lines
32 KiB
PHP
983 lines
32 KiB
PHP
|
<?php
|
|||
|
/*
|
|||
|
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
|
|||
|
*
|
|||
|
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
|
|||
|
*
|
|||
|
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
|
|||
|
*
|
|||
|
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
|
|||
|
* to obtain the text of the corresponding license version.
|
|||
|
*
|
|||
|
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
|
|||
|
*/
|
|||
|
?>
|
|||
|
<?php
|
|||
|
//function hex2dec
|
|||
|
//returns an associative array (keys: R, G, B) from
|
|||
|
//a hex html code (e.g. #3FE5AA)
|
|||
|
function hex2dec($couleur = "#000000"){
|
|||
|
$R = substr($couleur, 1, 2);
|
|||
|
$rouge = hexdec($R);
|
|||
|
$V = substr($couleur, 3, 2);
|
|||
|
$vert = hexdec($V);
|
|||
|
$B = substr($couleur, 5, 2);
|
|||
|
$bleu = hexdec($B);
|
|||
|
$tbl_couleur = array();
|
|||
|
$tbl_couleur['R']=$rouge;
|
|||
|
$tbl_couleur['G']=$vert;
|
|||
|
$tbl_couleur['B']=$bleu;
|
|||
|
return $tbl_couleur;
|
|||
|
}
|
|||
|
|
|||
|
//conversion pixel -> millimeter in 72 dpi
|
|||
|
function px2mm($px){
|
|||
|
return $px*25.4/72;
|
|||
|
}
|
|||
|
|
|||
|
function txtentities($html){
|
|||
|
$trans = get_html_translation_table(HTML_ENTITIES);
|
|||
|
$trans = array_flip($trans);
|
|||
|
return strtr($html, $trans);
|
|||
|
}
|
|||
|
|
|||
|
class SuperFPDF extends PDF_EPS {
|
|||
|
|
|||
|
/***********************************
|
|||
|
* user space functions
|
|||
|
***********************************/
|
|||
|
public $addpdf = null;
|
|||
|
|
|||
|
function __construct($orientation='P',$unit='mm',$format='A4',$app=null){
|
|||
|
|
|||
|
if($app!=null)
|
|||
|
$this->app=$app;
|
|||
|
|
|||
|
$this->B=0;
|
|||
|
$this->I=0;
|
|||
|
$this->U=0;
|
|||
|
$this->HREF='';
|
|||
|
$this->BeforeStack=array();
|
|||
|
|
|||
|
$this->number_ol=0;
|
|||
|
parent::__construct($orientation,$unit,$format);
|
|||
|
}
|
|||
|
|
|||
|
public function AddPDF($file)
|
|||
|
{
|
|||
|
$filename = '/tmp/'.md5($file.microtime(true)).'.pdf';
|
|||
|
if($fp = fopen($filename, 'wb'))
|
|||
|
{
|
|||
|
fwrite($fp, $file);
|
|||
|
fclose($fp);
|
|||
|
if(file_exists($filename) && is_file($filename)){
|
|||
|
$this->addpdf[] = $filename;
|
|||
|
return true;
|
|||
|
}
|
|||
|
}
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
function displayAnhaenge($output='D')
|
|||
|
{
|
|||
|
//SuperFPDF::__construct('P','mm','A4');
|
|||
|
$this->seite_von_sichtbar = 1;
|
|||
|
|
|||
|
// if($this->app->erp->Firmendaten("schriftart")!="")
|
|||
|
// $this->SetFont($this->app->erp->Firmendaten("schriftart"));
|
|||
|
|
|||
|
if($this->addpdf && is_array($this->addpdf) && count($this->addpdf) > 0)
|
|||
|
{
|
|||
|
|
|||
|
foreach($this->addpdf as $addpdf)
|
|||
|
{
|
|||
|
|
|||
|
$filename = $addpdf;
|
|||
|
|
|||
|
$pn = $this->setSourceFile($filename);
|
|||
|
//$this->AddPage();
|
|||
|
//$this->SetXY(0,0);
|
|||
|
for($i = 1; $i <= $pn ; $i++)
|
|||
|
{
|
|||
|
$fn =& $this->current_filename;
|
|||
|
$mediabox = $this->parsers[$fn]->getPageMediaBox($i);
|
|||
|
//$this->app->erp->LogFile(addslashes(json_encode($mediabox)));
|
|||
|
if($i >= 1)
|
|||
|
{
|
|||
|
//if(isset($mediabox['w']) && (float)$mediabox['w'] > 210.1 )
|
|||
|
if(isset($mediabox['w']) && (float)$mediabox['w'] > 216.0 )
|
|||
|
{
|
|||
|
$this->AddPage('L');
|
|||
|
} else {
|
|||
|
$this->AddPage();
|
|||
|
}
|
|||
|
$this->SetXY(0,0);
|
|||
|
}
|
|||
|
$tplidx = $this->ImportPage($i);
|
|||
|
$this->useTemplate($tplidx);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
$result = $this->Output($this->filename,$output);
|
|||
|
|
|||
|
if($output=="S")
|
|||
|
return $result;
|
|||
|
else
|
|||
|
exit;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/***********************************
|
|||
|
* data aggregation functions
|
|||
|
***********************************/
|
|||
|
|
|||
|
/*
|
|||
|
* general setter function
|
|||
|
*
|
|||
|
* proper usage:
|
|||
|
* $field may be either a string or an array of strings
|
|||
|
* if field is an array, $rdata must be an array(A) of associative arrays(B) with each of B representing a field
|
|||
|
* if field is a string, $rdata must be an associative array
|
|||
|
*
|
|||
|
*/
|
|||
|
public function setDocumentDetails($field, $rdata){
|
|||
|
if(is_array($field)) {
|
|||
|
for($i=0;$i<count($field);$i++) {
|
|||
|
$this->$field[$i] = $rdata[$i];
|
|||
|
}
|
|||
|
} else $this->$field=$rdata;
|
|||
|
}
|
|||
|
|
|||
|
//////////////////////////////////////
|
|||
|
//html parser
|
|||
|
|
|||
|
function WriteHtmlCell($cellWidth, $html){
|
|||
|
$rm = $this->rMargin;
|
|||
|
$this->SetRightMargin($this->w - $this->GetX() - $cellWidth);
|
|||
|
$this->WriteHtml($html);
|
|||
|
$this->SetRightMargin($rm);
|
|||
|
/*
|
|||
|
// Alter Quelltext
|
|||
|
$this->SetLeftMargin($cellWidth);
|
|||
|
$this->WriteHtml($html);
|
|||
|
$this->SetLeftMargin($cellWidth);
|
|||
|
*/
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
function WriteHTML($html)
|
|||
|
{
|
|||
|
$x = $this->GetX();
|
|||
|
$this->SetLeftMargin($x);
|
|||
|
|
|||
|
$allowed = array("ul","ol","li","b","u","i","a","img","p","br","strong","em","font","tr","blockquote","span"); //remove all unsupported tags
|
|||
|
|
|||
|
//file_put_contents("/tmp/bene22",$html,FILE_APPEND); // wenn es wieder nicht passt prüfen warum
|
|||
|
|
|||
|
/*$html = htmlspecialchars($html);
|
|||
|
file_put_contents("/tmp/bene222",$html,FILE_APPEND);
|
|||
|
|
|||
|
foreach( $allowed as $a ){
|
|||
|
$html = str_replace("<".$a.">", "<".$a.">", $html);
|
|||
|
$html = str_replace("</".$a.">", "</".$a.">", $html);
|
|||
|
$html = str_replace("<br />","<br />",$html);
|
|||
|
}
|
|||
|
*/
|
|||
|
|
|||
|
//file_put_contents("/tmp/bene222",$html,FILE_APPEND);
|
|||
|
while(strpos($html ,'<<')!==false)$html = str_replace("<<", "<<", $html);
|
|||
|
while(strpos($html ,'>>')!==false)$html = str_replace(">>", ">>", $html);
|
|||
|
|
|||
|
$html = str_replace("<+", "<+", $html); // Fix: "<+/-2mm" wird ansonten von strip_tags() entfernt
|
|||
|
$html = str_replace("<=", "<=", $html); // Fix: Kleinergleich wird ansonten von strip_tags() entfernt
|
|||
|
$html = str_replace(" >=", " >=", $html); // Fix: Größergleich wird ansonten durch "> =" ersetzt
|
|||
|
$html = str_replace("< ", "< ", $html);
|
|||
|
$html = str_replace(" >", "> ", $html);//Leerzeichen umgedreht
|
|||
|
$html=strip_tags($html, "<ul><ol><li><b><u><i><a><img><p><br><strong><em><font><tr><blockquote><span>"); //remove all unsupported tags
|
|||
|
|
|||
|
$html = str_replace('&','&',$html);
|
|||
|
$html = str_replace('ü','ü',$html);
|
|||
|
$html = str_replace('ä','ä',$html);
|
|||
|
$html = str_replace('ö','ö',$html);
|
|||
|
$html = str_replace('ß','ß',$html);
|
|||
|
$html = str_replace('Ü','Ü',$html);
|
|||
|
$html = str_replace('Ä','Ä',$html);
|
|||
|
$html = str_replace('Ö','Ö',$html);
|
|||
|
|
|||
|
$this->BeforeStack[] = array('FontFamily'=>$this->FontFamily,'FontStyle'=>$this->FontStyle,'FontSizePt'=>$this->FontSizePt,'FontSize'=>$this->FontSize,'TextColor'=>$this->TextColor);
|
|||
|
//$html=str_replace("\n", ' ', $html); //replace carriage returns by spaces
|
|||
|
$a=preg_split('/<(.*)>/U', $html, -1, PREG_SPLIT_DELIM_CAPTURE); //explodes the string
|
|||
|
foreach($a as $i=>$e)
|
|||
|
{
|
|||
|
if($i%2==0)
|
|||
|
{
|
|||
|
//Text
|
|||
|
if($this->HREF)
|
|||
|
$this->PutLink($this->HREF, $e);
|
|||
|
else {
|
|||
|
$e = str_replace( chr( 194 ) . chr( 160 ), ' ', $e );
|
|||
|
$this->Write($this->FontSize*1.3,stripslashes(txtentities($e)));
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
//Tag
|
|||
|
if ($e[0] == '/') {
|
|||
|
$this->CloseTag(strtoupper(substr($e, 1)));
|
|||
|
} else {
|
|||
|
//Extract attributes
|
|||
|
//TODO BRUNO nicht leerstelle da style="color:rgb(255, 12 ,... probleme macht"
|
|||
|
$a2=explode(' ', $e,2);
|
|||
|
$tag=strtoupper(array_shift($a2));
|
|||
|
$attr=array();
|
|||
|
foreach($a2 as $v)
|
|||
|
if(preg_match('/^([^=]*)=["\']?([^"\']*)["\']?$/', $v, $a3))
|
|||
|
$attr[strtoupper($a3[1])]=$a3[2];
|
|||
|
$this->OpenTag($tag, $attr);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
$LastStack = array_pop($this->BeforeStack);
|
|||
|
foreach($LastStack as $key=>$value)
|
|||
|
$this->$key = $value;
|
|||
|
$this->SetLeftMargin($this->app->erp->Firmendaten("abstand_seitenrandlinks"));
|
|||
|
}
|
|||
|
|
|||
|
function OpenTag($tag, $attr)
|
|||
|
{
|
|||
|
// simulate stack
|
|||
|
$this->BeforeStack[] = array('FontFamily'=>$this->FontFamily,'FontStyle'=>$this->FontStyle,'FontSizePt'=>$this->FontSizePt,'FontSize'=>$this->FontSize,'TextColor'=>$this->TextColor);
|
|||
|
$stack = "";
|
|||
|
|
|||
|
//Opening tag
|
|||
|
switch($tag){
|
|||
|
case 'STRONG':
|
|||
|
$this->SetStyle('B', true);
|
|||
|
break;
|
|||
|
case 'UL':
|
|||
|
$this->firstlist=true;
|
|||
|
$this->Ln();
|
|||
|
break;
|
|||
|
case 'OL':
|
|||
|
$this->firstlist=true;
|
|||
|
$this->number_ol=1;
|
|||
|
$this->Ln();
|
|||
|
break;
|
|||
|
case 'LI':
|
|||
|
//$this->SetStyle('B', true);
|
|||
|
if(!$this->firstlist)
|
|||
|
$this->Ln();
|
|||
|
|
|||
|
if($this->number_ol > 0)
|
|||
|
{
|
|||
|
$blt = $this->number_ol.")";
|
|||
|
$this->number_ol++;
|
|||
|
}
|
|||
|
else {
|
|||
|
if(isset($this->ttffontuni) && $this->ttffontuni)
|
|||
|
$blt = "•";
|
|||
|
else
|
|||
|
$blt = chr(127);
|
|||
|
}
|
|||
|
$blt_width = $this->GetStringWidth($blt)+$this->cMargin*2;
|
|||
|
$this->Cell($blt_width, $this->FontSize*1.5, $blt, 0, 0, false);
|
|||
|
|
|||
|
$this->firstlist=false;
|
|||
|
break;
|
|||
|
case 'EM':
|
|||
|
$this->SetStyle('I', true);
|
|||
|
break;
|
|||
|
case 'B':
|
|||
|
case 'I':
|
|||
|
case 'U':
|
|||
|
$this->SetStyle($tag, true);
|
|||
|
break;
|
|||
|
case 'A':
|
|||
|
$this->HREF=$attr['HREF'];
|
|||
|
break;
|
|||
|
case 'IMG':
|
|||
|
if(isset($attr['SRC']) and (isset($attr['WIDTH']) or isset($attr['HEIGHT']))) {
|
|||
|
if(!isset($attr['WIDTH']))
|
|||
|
$attr['WIDTH'] = 0;
|
|||
|
if(!isset($attr['HEIGHT']))
|
|||
|
$attr['HEIGHT'] = 0;
|
|||
|
$this->Image($attr['SRC'], $this->GetX(), $this->GetY(), px2mm($attr['WIDTH']), px2mm($attr['HEIGHT']));
|
|||
|
}
|
|||
|
break;
|
|||
|
case 'TR':
|
|||
|
case 'BLOCKQUOTE':
|
|||
|
case 'BR':
|
|||
|
//$this->Ln($this->FontSize);
|
|||
|
$this->Ln();//$this->FontSize);
|
|||
|
break;
|
|||
|
case 'P':
|
|||
|
//$this->Ln(4);
|
|||
|
$this->Ln();
|
|||
|
break;
|
|||
|
case 'FONT':
|
|||
|
if (isset($attr['COLOR']) and $attr['COLOR']!='') {
|
|||
|
if (strpos($cssval[1], 'rgb') !== false) {
|
|||
|
$color_tmp = str_replace(array("rgb","(",")"),"",$attr['COLOR']);
|
|||
|
$coul = explode(",",$color_tmp);
|
|||
|
$this->SetTextColor($coul[0], $coul[1], $coul[2]);
|
|||
|
} else {
|
|||
|
$coul=hex2dec($attr['COLOR']);
|
|||
|
$this->SetTextColor($coul['R'], $coul['G'], $coul['B']);
|
|||
|
}
|
|||
|
$stack = "issetcolor";
|
|||
|
}
|
|||
|
if (isset($attr['FACE']) and in_array(strtolower($attr['FACE']), $this->fontlist)) {
|
|||
|
$this->SetFont(strtolower($attr['FACE']));
|
|||
|
$stack = "issetfont";
|
|||
|
}
|
|||
|
break;
|
|||
|
case 'SPAN':
|
|||
|
if (isset($attr['STYLE']) and $attr['STYLE']!='') {
|
|||
|
$cssval = explode(":",$attr['STYLE']);
|
|||
|
switch($cssval[0])
|
|||
|
{
|
|||
|
case "color":
|
|||
|
if (strpos($cssval[1], 'rgb') !== false) {
|
|||
|
$color_tmp = str_replace(array("rgb","(",")"," "),"",$cssval[1]);
|
|||
|
$coul = explode(",",$color_tmp);
|
|||
|
$this->SetTextColor($coul[0], $coul[1], $coul[2]);
|
|||
|
} else {
|
|||
|
$coul=hex2dec($cssval[1]);
|
|||
|
$this->SetTextColor($coul['R'], $coul['G'], $coul['B']);
|
|||
|
}
|
|||
|
$stack = "issetcolor";
|
|||
|
break;
|
|||
|
|
|||
|
case "font-family":
|
|||
|
//if (in_array(strtolower($cssval[1], $this->fontlist))) {
|
|||
|
$this->SetFont(strtolower(rtrim($cssval[1],";")));
|
|||
|
$stack="issetfont";
|
|||
|
//}
|
|||
|
break;
|
|||
|
case "font-size":
|
|||
|
//if (in_array(strtolower($cssval[1], $this->fontlist))) {
|
|||
|
$fontsize = str_replace(array('px','pt'),'',$cssval[1]);
|
|||
|
if($fontsize!="")
|
|||
|
{
|
|||
|
$this->SetFontSize($fontsize);
|
|||
|
$stack = "issetsize";
|
|||
|
}
|
|||
|
//}
|
|||
|
break;
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
$this->IssetStack[] = $stack;
|
|||
|
}
|
|||
|
|
|||
|
function CloseTag($tag)
|
|||
|
{
|
|||
|
$LastStack = array_pop($this->BeforeStack);
|
|||
|
$stack = array_pop($this->IssetStack);
|
|||
|
|
|||
|
//Closing tag
|
|||
|
if($tag=='STRONG')
|
|||
|
$tag='B';
|
|||
|
if($tag=='EM')
|
|||
|
$tag='I';
|
|||
|
|
|||
|
if($tag=='OL')
|
|||
|
{
|
|||
|
$this->number_ol=0;
|
|||
|
$this->Ln();
|
|||
|
}
|
|||
|
if($tag=='UL')
|
|||
|
{
|
|||
|
$this->number_ol=0;
|
|||
|
$this->Ln();
|
|||
|
}
|
|||
|
//if($tag=='LI')
|
|||
|
// $this->Ln(px2mm($this->FontSizePt));
|
|||
|
|
|||
|
if($tag=='B' or $tag=='I' or $tag=='U')
|
|||
|
$this->SetStyle($tag, false);
|
|||
|
|
|||
|
if($tag=='A')
|
|||
|
$this->HREF='';
|
|||
|
if($tag=='FONT'){
|
|||
|
if ($stack=="issetcolor") {
|
|||
|
$this->SetTextColor($LastStack['TextColor']);
|
|||
|
}
|
|||
|
if ($stack=="issetfont") {
|
|||
|
$this->SetFont($LastStack['FontFamily']);
|
|||
|
}
|
|||
|
}
|
|||
|
// muss wie ein stack werden bei geschachtelten
|
|||
|
if($tag=='SPAN'){
|
|||
|
if ($stack=="issetcolor") {
|
|||
|
$this->SetTextColor($LastStack['TextColor']);
|
|||
|
}
|
|||
|
if ($stack=="issetfont") {
|
|||
|
$this->SetFont($LastStack['FontFamily']);
|
|||
|
}
|
|||
|
if ($stack=="issetsize") {
|
|||
|
$this->SetFontSize($LastStack['FontSizePt']);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function SetStyle($tag, $enable)
|
|||
|
{
|
|||
|
//Modify style and select corresponding font
|
|||
|
$this->$tag+=($enable ? 1 : -1);
|
|||
|
$style='';
|
|||
|
foreach(array('B', 'I', 'U') as $s)
|
|||
|
if($this->$s>0)
|
|||
|
$style.=$s;
|
|||
|
$this->SetFont('', $style);
|
|||
|
}
|
|||
|
|
|||
|
function PutLink($URL, $txt)
|
|||
|
{
|
|||
|
//Put a hyperlink
|
|||
|
$this->SetTextColor(0, 0, 255);
|
|||
|
$this->SetStyle('U', true);
|
|||
|
$this->Write(5, $txt, $URL);
|
|||
|
$this->SetStyle('U', false);
|
|||
|
$this->SetTextColor(0);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
//Tabellen funktionen
|
|||
|
|
|||
|
function SetTableWidths($w)
|
|||
|
{
|
|||
|
//Set the array of column widths
|
|||
|
$this->table_widths=$w;
|
|||
|
}
|
|||
|
|
|||
|
function SetTableFonts($f)
|
|||
|
{
|
|||
|
$this->table_fonts=$f;
|
|||
|
}
|
|||
|
|
|||
|
function SetTableAligns($a)
|
|||
|
{
|
|||
|
//Set the array of column alignments
|
|||
|
$this->table_aligns=$a;
|
|||
|
}
|
|||
|
|
|||
|
function TableRow($data)
|
|||
|
{
|
|||
|
//Calculate the height of the row
|
|||
|
$nb=0;
|
|||
|
for($i=0;$i<count($data);$i++)
|
|||
|
$nb=max($nb,$this->NbLines($this->table_widths[$i],$data[$i]));
|
|||
|
$h=5*$nb;
|
|||
|
|
|||
|
//Issue a page break first if needed
|
|||
|
$this->CheckTablePageBreak($h);
|
|||
|
//Draw the cells of the row
|
|||
|
for($i=0;$i<count($data);$i++)
|
|||
|
{
|
|||
|
$w=$this->table_widths[$i];
|
|||
|
$a=isset($this->table_aligns[$i]) ? $this->table_aligns[$i] : 'L';
|
|||
|
//Save the current position
|
|||
|
$x=$this->GetX();
|
|||
|
$y=$this->GetY();
|
|||
|
//Draw the border
|
|||
|
$this->Rect($x,$y,$w,$h);
|
|||
|
//Print the text
|
|||
|
$this->MultiCell($w,5,$data[$i],0,$a);
|
|||
|
//Put the position to the right of the cell
|
|||
|
$this->SetXY($x+$w,$y);
|
|||
|
}
|
|||
|
//Go to the next line
|
|||
|
$this->Ln($h);
|
|||
|
}
|
|||
|
|
|||
|
function CheckTablePageBreak($h)
|
|||
|
{
|
|||
|
//If the height h would cause an overflow, add a new page immediately
|
|||
|
if($this->GetY()+$h>$this->PageBreakTrigger)
|
|||
|
$this->AddPage($this->CurOrientation);
|
|||
|
}
|
|||
|
|
|||
|
function NbLines($w,$txt)
|
|||
|
{
|
|||
|
//Computes the number of lines a MultiCell of width w will take
|
|||
|
$cw=&$this->CurrentFont['cw'];
|
|||
|
if($w==0)
|
|||
|
$w=$this->w-$this->rMargin-$this->x;
|
|||
|
$wmax=($w-2*$this->cMargin)*1000/$this->FontSize;
|
|||
|
$s=str_replace("\r",'',$txt);
|
|||
|
$nb=strlen($s);
|
|||
|
if($nb>0 and $s[$nb-1]=="\n")
|
|||
|
$nb--;
|
|||
|
$sep=-1;
|
|||
|
$i=0;
|
|||
|
$j=0;
|
|||
|
$l=0;
|
|||
|
$nl=1;
|
|||
|
while($i<$nb)
|
|||
|
{
|
|||
|
$c=$s[$i];
|
|||
|
if($c=="\n")
|
|||
|
{
|
|||
|
$i++;
|
|||
|
$sep=-1;
|
|||
|
$j=$i;
|
|||
|
$l=0;
|
|||
|
$nl++;
|
|||
|
continue;
|
|||
|
}
|
|||
|
if($c==' ')
|
|||
|
$sep=$i;
|
|||
|
$l+=$cw[$c];
|
|||
|
if($l>$wmax)
|
|||
|
{
|
|||
|
if($sep==-1)
|
|||
|
{
|
|||
|
if($i==$j)
|
|||
|
$i++;
|
|||
|
}
|
|||
|
else
|
|||
|
$i=$sep+1;
|
|||
|
$sep=-1;
|
|||
|
$j=$i;
|
|||
|
$l=0;
|
|||
|
$nl++;
|
|||
|
}
|
|||
|
else
|
|||
|
$i++;
|
|||
|
}
|
|||
|
return $nl;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
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 EAN13($x, $y, $barcode, $h=16, $w=.3)
|
|||
|
{
|
|||
|
$this->BarcodeEANUPC($x,$y,$barcode,$h,$w,13);
|
|||
|
}
|
|||
|
|
|||
|
function UPC_A($x, $y, $barcode, $h=16, $w=.35)
|
|||
|
{
|
|||
|
$this->BarcodeEANUPC($x,$y,$barcode,$h,$w,12);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
function BarcodeEANUPC($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','',10);
|
|||
|
// $this->Text($x,$y+$h+11/$this->k,substr($barcode,-$len));
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
public function Code128($x, $y, $code, $w, $h)
|
|||
|
{
|
|||
|
if($h=="")$h=5;
|
|||
|
if($w=="")$w=30;
|
|||
|
|
|||
|
$T128 = null; // Tableau des codes 128
|
|||
|
$ABCset = ""; // jeu des caractères éligibles au C128
|
|||
|
$Aset = ""; // Set A du jeu des caractères éligibles
|
|||
|
$Bset = ""; // Set B du jeu des caractères éligibles
|
|||
|
$Cset = ""; // Set C du jeu des caractères éligibles
|
|||
|
$SetFrom = null; // Convertisseur source des jeux vers le tableau
|
|||
|
$SetTo = null; // Convertisseur destination des jeux vers le tableau
|
|||
|
$JStart = array("A" => 103, "B" => 104, "C" => 105); // Caractères de sélection de jeu au début du C128
|
|||
|
$JSwap = array("A" => 101, "B" => 100, "C" => 99); // Caractères de changement de jeu
|
|||
|
|
|||
|
$T128[] = array(2, 1, 2, 2, 2, 2); //0 : [ ] // composition des caract<63>res
|
|||
|
$T128[] = array(2, 2, 2, 1, 2, 2); //1 : [!]
|
|||
|
$T128[] = array(2, 2, 2, 2, 2, 1); //2 : ["]
|
|||
|
$T128[] = array(1, 2, 1, 2, 2, 3); //3 : [#]
|
|||
|
$T128[] = array(1, 2, 1, 3, 2, 2); //4 : [$]
|
|||
|
$T128[] = array(1, 3, 1, 2, 2, 2); //5 : [%]
|
|||
|
$T128[] = array(1, 2, 2, 2, 1, 3); //6 : [&]
|
|||
|
$T128[] = array(1, 2, 2, 3, 1, 2); //7 : [']
|
|||
|
$T128[] = array(1, 3, 2, 2, 1, 2); //8 : [(]
|
|||
|
$T128[] = array(2, 2, 1, 2, 1, 3); //9 : [)]
|
|||
|
$T128[] = array(2, 2, 1, 3, 1, 2); //10 : [*]
|
|||
|
$T128[] = array(2, 3, 1, 2, 1, 2); //11 : [+]
|
|||
|
$T128[] = array(1, 1, 2, 2, 3, 2); //12 : [,]
|
|||
|
$T128[] = array(1, 2, 2, 1, 3, 2); //13 : [-]
|
|||
|
$T128[] = array(1, 2, 2, 2, 3, 1); //14 : [.]
|
|||
|
$T128[] = array(1, 1, 3, 2, 2, 2); //15 : [/]
|
|||
|
$T128[] = array(1, 2, 3, 1, 2, 2); //16 : [0]
|
|||
|
$T128[] = array(1, 2, 3, 2, 2, 1); //17 : [1]
|
|||
|
$T128[] = array(2, 2, 3, 2, 1, 1); //18 : [2]
|
|||
|
$T128[] = array(2, 2, 1, 1, 3, 2); //19 : [3]
|
|||
|
$T128[] = array(2, 2, 1, 2, 3, 1); //20 : [4]
|
|||
|
$T128[] = array(2, 1, 3, 2, 1, 2); //21 : [5]
|
|||
|
$T128[] = array(2, 2, 3, 1, 1, 2); //22 : [6]
|
|||
|
$T128[] = array(3, 1, 2, 1, 3, 1); //23 : [7]
|
|||
|
$T128[] = array(3, 1, 1, 2, 2, 2); //24 : [8]
|
|||
|
$T128[] = array(3, 2, 1, 1, 2, 2); //25 : [9]
|
|||
|
$T128[] = array(3, 2, 1, 2, 2, 1); //26 : [:]
|
|||
|
$T128[] = array(3, 1, 2, 2, 1, 2); //27 : [;]
|
|||
|
$T128[] = array(3, 2, 2, 1, 1, 2); //28 : [<]
|
|||
|
$T128[] = array(3, 2, 2, 2, 1, 1); //29 : [=]
|
|||
|
$T128[] = array(2, 1, 2, 1, 2, 3); //30 : [>]
|
|||
|
$T128[] = array(2, 1, 2, 3, 2, 1); //31 : [?]
|
|||
|
$T128[] = array(2, 3, 2, 1, 2, 1); //32 : [@]
|
|||
|
$T128[] = array(1, 1, 1, 3, 2, 3); //33 : [A]
|
|||
|
$T128[] = array(1, 3, 1, 1, 2, 3); //34 : [B]
|
|||
|
$T128[] = array(1, 3, 1, 3, 2, 1); //35 : [C]
|
|||
|
$T128[] = array(1, 1, 2, 3, 1, 3); //36 : [D]
|
|||
|
$T128[] = array(1, 3, 2, 1, 1, 3); //37 : [E]
|
|||
|
$T128[] = array(1, 3, 2, 3, 1, 1); //38 : [F]
|
|||
|
$T128[] = array(2, 1, 1, 3, 1, 3); //39 : [G]
|
|||
|
$T128[] = array(2, 3, 1, 1, 1, 3); //40 : [H]
|
|||
|
$T128[] = array(2, 3, 1, 3, 1, 1); //41 : [I]
|
|||
|
$T128[] = array(1, 1, 2, 1, 3, 3); //42 : [J]
|
|||
|
$T128[] = array(1, 1, 2, 3, 3, 1); //43 : [K]
|
|||
|
$T128[] = array(1, 3, 2, 1, 3, 1); //44 : [L]
|
|||
|
$T128[] = array(1, 1, 3, 1, 2, 3); //45 : [M]
|
|||
|
$T128[] = array(1, 1, 3, 3, 2, 1); //46 : [N]
|
|||
|
$T128[] = array(1, 3, 3, 1, 2, 1); //47 : [O]
|
|||
|
$T128[] = array(3, 1, 3, 1, 2, 1); //48 : [P]
|
|||
|
$T128[] = array(2, 1, 1, 3, 3, 1); //49 : [Q]
|
|||
|
$T128[] = array(2, 3, 1, 1, 3, 1); //50 : [R]
|
|||
|
$T128[] = array(2, 1, 3, 1, 1, 3); //51 : [S]
|
|||
|
$T128[] = array(2, 1, 3, 3, 1, 1); //52 : [T]
|
|||
|
$T128[] = array(2, 1, 3, 1, 3, 1); //53 : [U]
|
|||
|
$T128[] = array(3, 1, 1, 1, 2, 3); //54 : [V]
|
|||
|
$T128[] = array(3, 1, 1, 3, 2, 1); //55 : [W]
|
|||
|
$T128[] = array(3, 3, 1, 1, 2, 1); //56 : [X]
|
|||
|
$T128[] = array(3, 1, 2, 1, 1, 3); //57 : [Y]
|
|||
|
$T128[] = array(3, 1, 2, 3, 1, 1); //58 : [Z]
|
|||
|
$T128[] = array(3, 3, 2, 1, 1, 1); //59 : [[]
|
|||
|
$T128[] = array(3, 1, 4, 1, 1, 1); //60 : [\]
|
|||
|
$T128[] = array(2, 2, 1, 4, 1, 1); //61 : []]
|
|||
|
$T128[] = array(4, 3, 1, 1, 1, 1); //62 : [^]
|
|||
|
$T128[] = array(1, 1, 1, 2, 2, 4); //63 : [_]
|
|||
|
$T128[] = array(1, 1, 1, 4, 2, 2); //64 : [`]
|
|||
|
$T128[] = array(1, 2, 1, 1, 2, 4); //65 : [a]
|
|||
|
$T128[] = array(1, 2, 1, 4, 2, 1); //66 : [b]
|
|||
|
$T128[] = array(1, 4, 1, 1, 2, 2); //67 : [c]
|
|||
|
$T128[] = array(1, 4, 1, 2, 2, 1); //68 : [d]
|
|||
|
$T128[] = array(1, 1, 2, 2, 1, 4); //69 : [e]
|
|||
|
$T128[] = array(1, 1, 2, 4, 1, 2); //70 : [f]
|
|||
|
$T128[] = array(1, 2, 2, 1, 1, 4); //71 : [g]
|
|||
|
$T128[] = array(1, 2, 2, 4, 1, 1); //72 : [h]
|
|||
|
$T128[] = array(1, 4, 2, 1, 1, 2); //73 : [i]
|
|||
|
$T128[] = array(1, 4, 2, 2, 1, 1); //74 : [j]
|
|||
|
$T128[] = array(2, 4, 1, 2, 1, 1); //75 : [k]
|
|||
|
$T128[] = array(2, 2, 1, 1, 1, 4); //76 : [l]
|
|||
|
$T128[] = array(4, 1, 3, 1, 1, 1); //77 : [m]
|
|||
|
$T128[] = array(2, 4, 1, 1, 1, 2); //78 : [n]
|
|||
|
$T128[] = array(1, 3, 4, 1, 1, 1); //79 : [o]
|
|||
|
$T128[] = array(1, 1, 1, 2, 4, 2); //80 : [p]
|
|||
|
$T128[] = array(1, 2, 1, 1, 4, 2); //81 : [q]
|
|||
|
$T128[] = array(1, 2, 1, 2, 4, 1); //82 : [r]
|
|||
|
$T128[] = array(1, 1, 4, 2, 1, 2); //83 : [s]
|
|||
|
$T128[] = array(1, 2, 4, 1, 1, 2); //84 : [t]
|
|||
|
$T128[] = array(1, 2, 4, 2, 1, 1); //85 : [u]
|
|||
|
$T128[] = array(4, 1, 1, 2, 1, 2); //86 : [v]
|
|||
|
$T128[] = array(4, 2, 1, 1, 1, 2); //87 : [w]
|
|||
|
$T128[] = array(4, 2, 1, 2, 1, 1); //88 : [x]
|
|||
|
$T128[] = array(2, 1, 2, 1, 4, 1); //89 : [y]
|
|||
|
$T128[] = array(2, 1, 4, 1, 2, 1); //90 : [z]
|
|||
|
$T128[] = array(4, 1, 2, 1, 2, 1); //91 : [{]
|
|||
|
$T128[] = array(1, 1, 1, 1, 4, 3); //92 : [|]
|
|||
|
$T128[] = array(1, 1, 1, 3, 4, 1); //93 : [}]
|
|||
|
$T128[] = array(1, 3, 1, 1, 4, 1); //94 : [~]
|
|||
|
$T128[] = array(1, 1, 4, 1, 1, 3); //95 : [DEL]
|
|||
|
$T128[] = array(1, 1, 4, 3, 1, 1); //96 : [FNC3]
|
|||
|
$T128[] = array(4, 1, 1, 1, 1, 3); //97 : [FNC2]
|
|||
|
$T128[] = array(4, 1, 1, 3, 1, 1); //98 : [SHIFT]
|
|||
|
$T128[] = array(1, 1, 3, 1, 4, 1); //99 : [Cswap]
|
|||
|
$T128[] = array(1, 1, 4, 1, 3, 1); //100 : [Bswap]
|
|||
|
$T128[] = array(3, 1, 1, 1, 4, 1); //101 : [Aswap]
|
|||
|
$T128[] = array(4, 1, 1, 1, 3, 1); //102 : [FNC1]
|
|||
|
$T128[] = array(2, 1, 1, 4, 1, 2); //103 : [Astart]
|
|||
|
$T128[] = array(2, 1, 1, 2, 1, 4); //104 : [Bstart]
|
|||
|
$T128[] = array(2, 1, 1, 2, 3, 2); //105 : [Cstart]
|
|||
|
$T128[] = array(2, 3, 3, 1, 1, 1); //106 : [STOP]
|
|||
|
$T128[] = array(2, 1); //107 : [END BAR]
|
|||
|
|
|||
|
|
|||
|
for ($i = 32; $i <= 95; $i++) { // jeux de caract<63>res
|
|||
|
$ABCset .= chr($i);
|
|||
|
}
|
|||
|
$Aset = $ABCset;
|
|||
|
$Bset = $ABCset;
|
|||
|
|
|||
|
for ($i = 0; $i <= 31; $i++) {
|
|||
|
$ABCset .= chr($i);
|
|||
|
$Aset .= chr($i);
|
|||
|
}
|
|||
|
for ($i = 96; $i <= 127; $i++) {
|
|||
|
$ABCset .= chr($i);
|
|||
|
$Bset .= chr($i);
|
|||
|
}
|
|||
|
for ($i = 200; $i <= 210; $i++) { // controle 128
|
|||
|
$ABCset .= chr($i);
|
|||
|
$Aset .= chr($i);
|
|||
|
$Bset .= chr($i);
|
|||
|
}
|
|||
|
$Cset = "0123456789" . chr(206);
|
|||
|
|
|||
|
for ($i = 0; $i < 96; $i++) { // convertisseurs des jeux A & B
|
|||
|
@$SetFrom["A"] .= chr($i);
|
|||
|
@$SetFrom["B"] .= chr($i + 32);
|
|||
|
@$SetTo["A"] .= chr(($i < 32) ? $i + 64 : $i - 32);
|
|||
|
@$SetTo["B"] .= chr($i);
|
|||
|
}
|
|||
|
for ($i = 96; $i < 107; $i++) { // contr<74>le des jeux A & B
|
|||
|
@$SetFrom["A"] .= chr($i + 104);
|
|||
|
@$SetFrom["B"] .= chr($i + 104);
|
|||
|
@$SetTo["A"] .= chr($i);
|
|||
|
@$SetTo["B"] .= chr($i);
|
|||
|
}
|
|||
|
|
|||
|
/////////////
|
|||
|
|
|||
|
$Aguid = ""; // Cr<43>ation des guides de choix ABC
|
|||
|
$Bguid = "";
|
|||
|
$Cguid = "";
|
|||
|
for ($i = 0; $i < strlen($code); $i++) {
|
|||
|
$needle = substr($code, $i, 1);
|
|||
|
$Aguid .= ((strpos($Aset, $needle) === false) ? "N" : "O");
|
|||
|
$Bguid .= ((strpos($Bset, $needle) === false) ? "N" : "O");
|
|||
|
$Cguid .= ((strpos($Cset, $needle) === false) ? "N" : "O");
|
|||
|
}
|
|||
|
|
|||
|
$SminiC = "OOOO";
|
|||
|
$IminiC = 4;
|
|||
|
|
|||
|
$crypt = "";
|
|||
|
while ($code > "") {
|
|||
|
// BOUCLE PRINCIPALE DE CODAGE
|
|||
|
$i = strpos($Cguid, $SminiC); // for<6F>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 > "") ? $JSwap["C"] : $JStart["C"]); // d<>but Cstart, sinon Cswap
|
|||
|
$made = strpos($Cguid, "N"); // <20>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"); // <20>tendu du set A
|
|||
|
if ($madeA === false) {
|
|||
|
$madeA = strlen($Aguid);
|
|||
|
}
|
|||
|
$madeB = strpos($Bguid, "N"); // <20>tendu du set B
|
|||
|
if ($madeB === false) {
|
|||
|
$madeB = strlen($Bguid);
|
|||
|
}
|
|||
|
$made = (($madeA < $madeB) ? $madeB : $madeA); // <20>tendu trait<69>e
|
|||
|
$jeu = (($madeA < $madeB) ? "B" : "A"); // Jeu en cours
|
|||
|
|
|||
|
$crypt .= chr(($crypt > "") ? $JSwap[$jeu] : $JStart[$jeu]); // d<>but start, sinon swap
|
|||
|
|
|||
|
$crypt .= strtr(substr($code, 0, $made), $SetFrom[$jeu], $SetTo[$jeu]); // conversion selon jeu
|
|||
|
|
|||
|
}
|
|||
|
$code = substr($code, $made); // raccourcir l<>gende et guides de la zone trait<69>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<74>le
|
|||
|
for ($i = 0; $i < strlen($crypt); $i++) {
|
|||
|
$check += (ord($crypt[$i]) * $i);
|
|||
|
}
|
|||
|
$check %= 103;
|
|||
|
|
|||
|
$crypt .= chr($check) . chr(106) . chr(107); // Chaine crypt<70>e compl<70>te
|
|||
|
|
|||
|
$i = (strlen($crypt) * 11) - 8; // calcul de la largeur du module
|
|||
|
$modul = $w / $i;
|
|||
|
$Rect = "";
|
|||
|
for ($i = 0; $i < strlen($crypt); $i++) { // BOUCLE D'IMPRESSION
|
|||
|
$c = $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;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
Informations
|
|||
|
Author: The-eh
|
|||
|
License: Freeware
|
|||
|
Description
|
|||
|
This script implements Code 39 barcodes. A Code 39 barcode can encode a string with the following characters: digits (0 to 9), uppercase letters (A to Z) and 8 additional characters (- . space $ / + % *).
|
|||
|
|
|||
|
Code39(float xpos, float ypos, string code [, float baseline [, float height]])
|
|||
|
xpos: abscissa of barcode
|
|||
|
ypos: ordinate of barcode
|
|||
|
code: value of barcode
|
|||
|
baseline: corresponds to the width of a wide bar (defaults to 0.5)
|
|||
|
height: bar height (defaults to 5)
|
|||
|
*/
|
|||
|
public function Code39($xpos, $ypos, $code, $baseline=0.5, $height=5, $printText=false){
|
|||
|
|
|||
|
if(preg_replace("/[^0-9a-zA-Z_\s%*+-\/$]/", "", $code)!=$code) return;
|
|||
|
|
|||
|
|
|||
|
$wide = $baseline;
|
|||
|
$narrow = $baseline / 3 ;
|
|||
|
$gap = $narrow;
|
|||
|
|
|||
|
$barChar['0'] = 'nnnwwnwnn';
|
|||
|
$barChar['1'] = 'wnnwnnnnw';
|
|||
|
$barChar['2'] = 'nnwwnnnnw';
|
|||
|
$barChar['3'] = 'wnwwnnnnn';
|
|||
|
$barChar['4'] = 'nnnwwnnnw';
|
|||
|
$barChar['5'] = 'wnnwwnnnn';
|
|||
|
$barChar['6'] = 'nnwwwnnnn';
|
|||
|
$barChar['7'] = 'nnnwnnwnw';
|
|||
|
$barChar['8'] = 'wnnwnnwnn';
|
|||
|
$barChar['9'] = 'nnwwnnwnn';
|
|||
|
$barChar['A'] = 'wnnnnwnnw';
|
|||
|
$barChar['B'] = 'nnwnnwnnw';
|
|||
|
$barChar['C'] = 'wnwnnwnnn';
|
|||
|
$barChar['D'] = 'nnnnwwnnw';
|
|||
|
$barChar['E'] = 'wnnnwwnnn';
|
|||
|
$barChar['F'] = 'nnwnwwnnn';
|
|||
|
$barChar['G'] = 'nnnnnwwnw';
|
|||
|
$barChar['H'] = 'wnnnnwwnn';
|
|||
|
$barChar['I'] = 'nnwnnwwnn';
|
|||
|
$barChar['J'] = 'nnnnwwwnn';
|
|||
|
$barChar['K'] = 'wnnnnnnww';
|
|||
|
$barChar['L'] = 'nnwnnnnww';
|
|||
|
$barChar['M'] = 'wnwnnnnwn';
|
|||
|
$barChar['N'] = 'nnnnwnnww';
|
|||
|
$barChar['O'] = 'wnnnwnnwn';
|
|||
|
$barChar['P'] = 'nnwnwnnwn';
|
|||
|
$barChar['Q'] = 'nnnnnnwww';
|
|||
|
$barChar['R'] = 'wnnnnnwwn';
|
|||
|
$barChar['S'] = 'nnwnnnwwn';
|
|||
|
$barChar['T'] = 'nnnnwnwwn';
|
|||
|
$barChar['U'] = 'wwnnnnnnw';
|
|||
|
$barChar['V'] = 'nwwnnnnnw';
|
|||
|
$barChar['W'] = 'wwwnnnnnn';
|
|||
|
$barChar['X'] = 'nwnnwnnnw';
|
|||
|
$barChar['Y'] = 'wwnnwnnnn';
|
|||
|
$barChar['Z'] = 'nwwnwnnnn';
|
|||
|
$barChar['-'] = 'nwnnnnwnw';
|
|||
|
$barChar['.'] = 'wwnnnnwnn';
|
|||
|
$barChar[' '] = 'nwwnnnwnn';
|
|||
|
$barChar['*'] = 'nwnnwnwnn';
|
|||
|
$barChar['$'] = 'nwnwnwnnn';
|
|||
|
$barChar['/'] = 'nwnwnnnwn';
|
|||
|
$barChar['+'] = 'nwnnnwnwn';
|
|||
|
$barChar['%'] = 'nnnwnwnwn';
|
|||
|
//$this->SetFont('Arial', '', 10);
|
|||
|
if($printText) $this->Text($xpos, $ypos + $height + 4, $code);
|
|||
|
$this->SetFillColor(0);
|
|||
|
|
|||
|
$code = '*'.strtoupper($code).'*';
|
|||
|
for($i=0; $i<strlen($code); $i++){
|
|||
|
$char = $code[$i];
|
|||
|
if(!isset($barChar[$char])){
|
|||
|
$this->Error('Invalid character in barcode: '.$char);
|
|||
|
}
|
|||
|
$seq = $barChar[$char];
|
|||
|
for($bar=0; $bar<9; $bar++){
|
|||
|
if ($seq[$bar] == 'n') {
|
|||
|
$lineWidth = $narrow;
|
|||
|
}else{
|
|||
|
$lineWidth = $wide;
|
|||
|
}
|
|||
|
if($bar % 2 == 0){
|
|||
|
$this->Rect($xpos, $ypos, $lineWidth, $height, 'F');
|
|||
|
}
|
|||
|
$xpos += $lineWidth;
|
|||
|
}
|
|||
|
$xpos += $gap;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|