| 
									
										
										
										
											2023-06-03 00:50:27 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | ////////////////////////////////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | // PDF_Label 
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // Class to print labels in Avery or custom formats
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // Copyright (C) 2003 Laurent PASSEBECQ (LPA)
 | 
					
						
							|  |  |  | // Based on code by Steve Dillon
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //---------------------------------------------------------------------------------------------
 | 
					
						
							|  |  |  | // VERSIONS:
 | 
					
						
							|  |  |  | // 1.0: Initial release
 | 
					
						
							|  |  |  | // 1.1: + Added unit in the constructor
 | 
					
						
							|  |  |  | //      + Now Positions start at (1,1).. then the first label at top-left of a page is (1,1)
 | 
					
						
							|  |  |  | //      + Added in the description of a label:
 | 
					
						
							|  |  |  | //           font-size : defaut char size (can be changed by calling Set_Char_Size(xx);
 | 
					
						
							|  |  |  | //           paper-size: Size of the paper for this sheet (thanx to Al Canton)
 | 
					
						
							|  |  |  | //           metric    : type of unit used in this description
 | 
					
						
							|  |  |  | //                       You can define your label properties in inches by setting metric to
 | 
					
						
							|  |  |  | //                       'in' and print in millimiters by setting unit to 'mm' in constructor
 | 
					
						
							|  |  |  | //        Added some formats:
 | 
					
						
							|  |  |  | //           5160, 5161, 5162, 5163, 5164: thanks to Al Canton
 | 
					
						
							|  |  |  | //           8600                        : thanks to Kunal Walia
 | 
					
						
							|  |  |  | //      + Added 3mm to the position of labels to avoid errors 
 | 
					
						
							|  |  |  | // 1.2: = Bug of positioning
 | 
					
						
							|  |  |  | //      = Set_Font_Size modified -> Now, just modify the size of the font
 | 
					
						
							|  |  |  | // 1.3: + Labels are now printed horizontally
 | 
					
						
							|  |  |  | //      = 'in' as document unit didn't work
 | 
					
						
							|  |  |  | // 1.4: + Page scaling is disabled in printing options
 | 
					
						
							|  |  |  | // 1.5: + Added 3422 format
 | 
					
						
							|  |  |  | // 1.6: + FPDF 1.8 compatibility
 | 
					
						
							|  |  |  | ////////////////////////////////////////////////////////////////////////////////////////////////
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * PDF_Label - PDF label editing | 
					
						
							|  |  |  |  * @package PDF_Label | 
					
						
							|  |  |  |  * @author Laurent PASSEBECQ | 
					
						
							|  |  |  |  * @copyright 2003 Laurent PASSEBECQ | 
					
						
							|  |  |  | **/ | 
					
						
							|  |  |  | namespace Cloudlog\Label; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-12 14:20:24 +08:00
										 |  |  | class PDF_Label extends tfpdf { | 
					
						
							| 
									
										
										
										
											2023-06-03 00:50:27 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     // Private properties
 | 
					
						
							|  |  |  |     protected $_Margin_Left;        // Left margin of labels
 | 
					
						
							|  |  |  |     protected $_Margin_Top;            // Top margin of labels
 | 
					
						
							|  |  |  |     protected $_X_Space;            // Horizontal space between 2 labels
 | 
					
						
							|  |  |  |     protected $_Y_Space;            // Vertical space between 2 labels
 | 
					
						
							|  |  |  |     protected $_X_Number;            // Number of labels horizontally
 | 
					
						
							|  |  |  |     protected $_Y_Number;            // Number of labels vertically
 | 
					
						
							|  |  |  |     protected $_Width;                // Width of label
 | 
					
						
							|  |  |  |     protected $_Height;                // Height of label
 | 
					
						
							|  |  |  |     protected $_Line_Height;        // Line height
 | 
					
						
							|  |  |  |     protected $_Padding;            // Padding
 | 
					
						
							|  |  |  |     protected $_Metric_Doc;            // Type of metric for the document
 | 
					
						
							|  |  |  |     protected $_COUNTX;                // Current x position
 | 
					
						
							|  |  |  |     protected $_COUNTY;                // Current y position
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // List of label formats
 | 
					
						
							|  |  |  |     protected $_Avery_Labels = array( | 
					
						
							|  |  |  |         '5160' => array('paper-size'=>'letter',    'metric'=>'mm',    'marginLeft'=>1.762,    'marginTop'=>10.7,        'NX'=>3,    'NY'=>10,    'SpaceX'=>3.175,    'SpaceY'=>0,    'width'=>66.675,    'height'=>25.4,        'font-size'=>8), | 
					
						
							|  |  |  |         '5161' => array('paper-size'=>'letter',    'metric'=>'mm',    'marginLeft'=>0.967,    'marginTop'=>10.7,        'NX'=>2,    'NY'=>10,    'SpaceX'=>3.967,    'SpaceY'=>0,    'width'=>101.6,        'height'=>25.4,        'font-size'=>8), | 
					
						
							|  |  |  |         '5162' => array('paper-size'=>'letter',    'metric'=>'mm',    'marginLeft'=>0.97,        'marginTop'=>20.224,    'NX'=>2,    'NY'=>7,    'SpaceX'=>4.762,    'SpaceY'=>0,    'width'=>100.807,    'height'=>35.72,    'font-size'=>8), | 
					
						
							|  |  |  |         '5163' => array('paper-size'=>'letter',    'metric'=>'mm',    'marginLeft'=>1.762,    'marginTop'=>10.7,         'NX'=>2,    'NY'=>5,    'SpaceX'=>3.175,    'SpaceY'=>0,    'width'=>101.6,        'height'=>50.8,        'font-size'=>8), | 
					
						
							|  |  |  |         '5164' => array('paper-size'=>'letter',    'metric'=>'in',    'marginLeft'=>0.148,    'marginTop'=>0.5,         'NX'=>2,    'NY'=>3,    'SpaceX'=>0.2031,    'SpaceY'=>0,    'width'=>4.0,        'height'=>3.33,        'font-size'=>12), | 
					
						
							|  |  |  |         '8600' => array('paper-size'=>'letter',    'metric'=>'mm',    'marginLeft'=>7.1,         'marginTop'=>19,         'NX'=>3,     'NY'=>10,     'SpaceX'=>9.5,         'SpaceY'=>3.1,     'width'=>66.6,         'height'=>25.4,        'font-size'=>8), | 
					
						
							|  |  |  |         'L7163'=> array('paper-size'=>'A4',        'metric'=>'mm',    'marginLeft'=>5,        'marginTop'=>15,         'NX'=>2,    'NY'=>7,    'SpaceX'=>25,        'SpaceY'=>0,    'width'=>99.1,        'height'=>38.1,        'font-size'=>9), | 
					
						
							|  |  |  |         '3422' => array('paper-size'=>'A4',        'metric'=>'mm',    'marginLeft'=>0,        'marginTop'=>8.5,         'NX'=>3,    'NY'=>8,    'SpaceX'=>0,        'SpaceY'=>0,    'width'=>70,        'height'=>35,        'font-size'=>9) | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Constructor
 | 
					
						
							| 
									
										
										
										
											2023-08-02 17:34:32 +08:00
										 |  |  |     function __construct($format, $unit='mm', $posX=1, $posY=1, $pgX=0,$pgY=0) { | 
					
						
							|  |  |  | 	    if (is_array($format)) { | 
					
						
							|  |  |  | 		   // Custom format
 | 
					
						
							| 
									
										
										
										
											2023-08-02 17:46:19 +08:00
										 |  |  | 			// var_dump("X".$pgX);
 | 
					
						
							| 
									
										
										
										
											2023-08-02 17:34:32 +08:00
										 |  |  | 		    $Tformat = $format; | 
					
						
							|  |  |  | 	    } else { | 
					
						
							|  |  |  | 		    // Built-in format
 | 
					
						
							|  |  |  | 		    if (!isset($this->_Avery_Labels[$format])) | 
					
						
							|  |  |  | 			    $this->Error('Unknown label format: '.$format); | 
					
						
							|  |  |  | 		    $Tformat = $this->_Avery_Labels[$format]; | 
					
						
							|  |  |  | 	    } | 
					
						
							| 
									
										
										
										
											2023-06-03 00:50:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-02 17:34:32 +08:00
										 |  |  | 	    parent::__construct('P', $unit, $Tformat['paper-size'],$Tformat['pgX'],$Tformat['pgY']); | 
					
						
							|  |  |  | 	    $this->_Metric_Doc = $unit; | 
					
						
							|  |  |  | 	    $this->_Set_Format($Tformat); | 
					
						
							|  |  |  | 	    $this->SetFont('Arial'); | 
					
						
							|  |  |  | 	    $this->SetMargins(0,0);  | 
					
						
							|  |  |  | 	    $this->SetAutoPageBreak(false);  | 
					
						
							|  |  |  | 	    $this->_COUNTX = $posX-2; | 
					
						
							|  |  |  | 	    $this->_COUNTY = $posY-1; | 
					
						
							| 
									
										
										
										
											2023-06-03 00:50:27 +08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function _Set_Format($format) { | 
					
						
							|  |  |  |         $this->_Margin_Left    = $this->_Convert_Metric($format['marginLeft'], $format['metric']); | 
					
						
							|  |  |  |         $this->_Margin_Top    = $this->_Convert_Metric($format['marginTop'], $format['metric']); | 
					
						
							|  |  |  |         $this->_X_Space     = $this->_Convert_Metric($format['SpaceX'], $format['metric']); | 
					
						
							|  |  |  |         $this->_Y_Space     = $this->_Convert_Metric($format['SpaceY'], $format['metric']); | 
					
						
							|  |  |  |         $this->_X_Number     = $format['NX']; | 
					
						
							|  |  |  |         $this->_Y_Number     = $format['NY']; | 
					
						
							|  |  |  |         $this->_Width         = $this->_Convert_Metric($format['width'], $format['metric']); | 
					
						
							|  |  |  |         $this->_Height         = $this->_Convert_Metric($format['height'], $format['metric']); | 
					
						
							|  |  |  |         $this->Set_Font_Size($format['font-size']); | 
					
						
							|  |  |  |         $this->_Padding        = $this->_Convert_Metric(3, 'mm'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // convert units (in to mm, mm to in)
 | 
					
						
							|  |  |  |     // $src must be 'in' or 'mm'
 | 
					
						
							|  |  |  |     function _Convert_Metric($value, $src) { | 
					
						
							|  |  |  |         $dest = $this->_Metric_Doc; | 
					
						
							|  |  |  |         if ($src != $dest) { | 
					
						
							|  |  |  |             $a['in'] = 39.37008; | 
					
						
							|  |  |  |             $a['mm'] = 1000; | 
					
						
							|  |  |  |             return $value * $a[$dest] / $a[$src]; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             return $value; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Give the line height for a given font size
 | 
					
						
							|  |  |  |     function _Get_Height_Chars($pt) { | 
					
						
							|  |  |  |         $a = array(6=>2, 7=>2.5, 8=>3, 9=>4, 10=>5, 11=>6, 12=>7, 13=>8, 14=>9, 15=>10); | 
					
						
							|  |  |  |         if (!isset($a[$pt])) | 
					
						
							|  |  |  |             $this->Error('Invalid font size: '.$pt); | 
					
						
							|  |  |  |         return $this->_Convert_Metric($a[$pt], 'mm'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Set the character size
 | 
					
						
							|  |  |  |     // This changes the line height too
 | 
					
						
							|  |  |  |     function Set_Font_Size($pt) { | 
					
						
							|  |  |  |         $this->_Line_Height = $this->_Get_Height_Chars($pt); | 
					
						
							|  |  |  |         $this->SetFontSize($pt); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Print a label
 | 
					
						
							| 
									
										
										
										
											2023-08-02 16:33:03 +08:00
										 |  |  |     function Add_Label($text,$orientation = 'P') { | 
					
						
							| 
									
										
										
										
											2023-06-03 00:50:27 +08:00
										 |  |  |         $this->_COUNTX++; | 
					
						
							|  |  |  |         if ($this->_COUNTX == $this->_X_Number) { | 
					
						
							|  |  |  |             // Row full, we start a new one
 | 
					
						
							|  |  |  |             $this->_COUNTX=0; | 
					
						
							|  |  |  |             $this->_COUNTY++; | 
					
						
							|  |  |  |             if ($this->_COUNTY == $this->_Y_Number) { | 
					
						
							|  |  |  |                 // End of page reached, we start a new one
 | 
					
						
							|  |  |  |                 $this->_COUNTY=0; | 
					
						
							| 
									
										
										
										
											2023-08-02 16:32:00 +08:00
										 |  |  |                 $this->AddPage($orientation); | 
					
						
							| 
									
										
										
										
											2023-06-03 00:50:27 +08:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $_PosX = $this->_Margin_Left + $this->_COUNTX*($this->_Width+$this->_X_Space) + $this->_Padding; | 
					
						
							|  |  |  |         $_PosY = $this->_Margin_Top + $this->_COUNTY*($this->_Height+$this->_Y_Space) + $this->_Padding; | 
					
						
							|  |  |  |         $this->SetXY($_PosX, $_PosY); | 
					
						
							|  |  |  |         $this->MultiCell($this->_Width - $this->_Padding, $this->_Line_Height, $text, 0, 'L'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function _putcatalog() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         parent::_putcatalog(); | 
					
						
							|  |  |  |         // Disable the page scaling option in the printing dialog
 | 
					
						
							|  |  |  |         $this->_put('/ViewerPreferences <</PrintScaling /None>>'); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2023-06-04 07:35:32 +08:00
										 |  |  | ?>
 |