dolibarr  20.0.0-beta
commonstickergenerator.class.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2003 Steve Dillon
3  * Copyright (C) 2003 Laurent Passebecq
4  * Copyright (C) 2001-2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
5  * Copyright (C) 2002-2003 Jean-Louis Bergamo <jlb@j1b.org>
6  * Copyright (C) 2006-2013 Laurent Destailleur <eldy@users.sourceforge.net>
7  * Copyright (C) 2015 Francis Appels <francis.appels@yahoo.com>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program. If not, see <https://www.gnu.org/licenses/>.
21  */
22 
23 /* Inspire de PDF_Label
24  * PDF_Label - PDF label editing
25  * @package PDF_Label
26  * @author Laurent PASSEBECQ <lpasseb@numericable.fr>
27  * @copyright 2003 Laurent PASSEBECQ
28  * disponible ici : http://www.fpdf.org/fr/script/script29.php
29  */
30 
31 //-------------------------------------------------------------------
32 // VERSIONS :
33 // 1.0 : Initial release
34 // 1.1 : + : Added unit in the constructor
35 // + : Now Positions start @ (1,1).. then the first image @top-left of a page is (1,1)
36 // + : Added in the description of a label :
37 // font-size : default char size (can be changed by calling Set_Char_Size(xx);
38 // paper-size : Size of the paper for this sheet (thanx to Al Canton)
39 // metric : type of unit used in this description
40 // You can define your label properties in inches by setting metric to 'in'
41 // and printing in millimeter by setting unit to 'mm' in constructor.
42 // Added some labels :
43 // 5160, 5161, 5162, 5163,5164 : thanx to Al Canton : acanton@adams-blake.com
44 // 8600 : thanx to Kunal Walia : kunal@u.washington.edu
45 // + : Added 3mm to the position of labels to avoid errors
47 
54 require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
55 require_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php';
56 require_once DOL_DOCUMENT_ROOT.'/core/lib/format_cards.lib.php';
57 require_once DOL_DOCUMENT_ROOT.'/core/class/commondocgenerator.class.php';
58 
59 
64 {
68  public $db;
69 
70  public $code; // Code of format
71 
72  // phpcs:disable PEAR.NamingConventions.ValidVariableName.PublicUnderscore
73  // protected
74  // Name of stick
75  protected $_Avery_Name = '';
76  // Code of stick
77  protected $_Avery_Code = '';
78  // Marge de gauche de l'etiquette
79  protected $_Margin_Left = 0;
80  // marge en haut de la page avant la premiere etiquette
81  protected $_Margin_Top = 0;
82  // Espace horizontal entre 2 bandes d'etiquettes
83  protected $_X_Space = 0;
84  // Espace vertical entre 2 bandes d'etiquettes
85  protected $_Y_Space = 0;
86  // NX Nombre d'etiquettes sur la largeur de la page
87  protected $_X_Number = 0;
88  // NY Nombre d'etiquettes sur la hauteur de la page
89  protected $_Y_Number = 0;
90  // Largeur de chaque etiquette
91  protected $_Width = 0;
92  // Hauteur de chaque etiquette
93  protected $_Height = 0;
94  // Hauteur des caracteres
95  protected $_Char_Size = 10;
96  // Hauteur par default d'une ligne
97  protected $_Line_Height = 10;
98  // Type of metric.. Will help to calculate good values
99  protected $_Metric = 'mm';
100  // Type of metric for the doc..
101  protected $_Metric_Doc = 'mm';
102  protected $_COUNTX = 1;
103  protected $_COUNTY = 1;
104  protected $_First = 1;
105  public $Tformat;
106 
110  public $_Avery_Labels;
111  // phpcs:enable
112 
118  public function __construct($db)
119  {
120  $this->db = $db;
121  }
122 
123  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
133  abstract public function write_file($arrayofrecords, $outputlangs, $srctemplatepath, $outputdir = '');
134  // phpcs:enable
135 
144  abstract public function addSticker(&$pdf, $outputlangs, $param);
145 
146  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
155  public function Set_Char_Size(&$pdf, $pt)
156  {
157  // phpcs:enable
158  if ($pt > 3) {
159  $this->_Char_Size = $pt;
160  $this->_Line_Height = $this->_Get_Height_Chars($pt);
161  $pdf->SetFont('', '', $pt);
162  }
163  }
164 
165  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore
166  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
179  protected function _Pointille(&$pdf, $x1 = 0, $y1 = 0, $x2 = 210, $y2 = 297, $epaisseur = 1, $nbPointilles = 15)
180  {
181  // phpcs:enable
182  $pdf->SetLineWidth($epaisseur);
183  $length = abs($x1 - $x2);
184  $hauteur = abs($y1 - $y2);
185  if ($length > $hauteur) {
186  $Pointilles = ($length / $nbPointilles) / 2; // taille des pointilles
187  } else {
188  $Pointilles = ($hauteur / $nbPointilles) / 2;
189  }
190  for ($i = $x1; $i <= $x2; $i += $Pointilles + $Pointilles) {
191  for ($j = $i; $j <= ($i + $Pointilles); $j++) {
192  if ($j <= ($x2 - 1)) {
193  // @phan-suppress-next-line PhanPluginSuspiciousParamPosition
194  $pdf->Line($j, $y1, $j + 1, $y1); // on trace le pointill? du haut, point par point
195  // @phan-suppress-next-line PhanPluginSuspiciousParamPosition
196  $pdf->Line($j, $y2, $j + 1, $y2); // on trace le pointill? du bas, point par point
197  }
198  }
199  }
200  for ($i = $y1; $i <= $y2; $i += $Pointilles + $Pointilles) {
201  for ($j = $i; $j <= ($i + $Pointilles); $j++) {
202  if ($j <= ($y2 - 1)) {
203  // @phan-suppress-next-line PhanPluginSuspiciousParamPosition
204  $pdf->Line($x1, $j, $x1, $j + 1); // on trace le pointill? du haut, point par point
205  // @phan-suppress-next-line PhanPluginSuspiciousParamPosition
206  $pdf->Line($x2, $j, $x2, $j + 1); // on trace le pointill? du bas, point par point
207  }
208  }
209  }
210  }
211 
212  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
213  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore
228  protected function _Croix(&$pdf, $x1 = 0, $y1 = 0, $x2 = 210, $y2 = 297, $epaisseur = 1, $taille = 4)
229  {
230  // phpcs:enable
231  $pdf->SetDrawColor(192, 192, 192);
232 
233  $pdf->SetLineWidth($epaisseur);
234  $lg = $taille / 2;
235  // croix haut gauche
236  $pdf->Line($x1, $y1 - $lg, $x1, $y1 + $lg);
237  $pdf->Line($x1 - $lg, $y1, $x1 + $lg, $y1);
238  // croix bas gauche
239  $pdf->Line($x1, $y2 - $lg, $x1, $y2 + $lg);
240  $pdf->Line($x1 - $lg, $y2, $x1 + $lg, $y2);
241  // croix haut droit
242  $pdf->Line($x2, $y1 - $lg, $x2, $y1 + $lg);
243  $pdf->Line($x2 - $lg, $y1, $x2 + $lg, $y1);
244  // croix bas droit
245  $pdf->Line($x2, $y2 - $lg, $x2, $y2 + $lg);
246  $pdf->Line($x2 - $lg, $y2, $x2 + $lg, $y2);
247 
248  $pdf->SetDrawColor(0, 0, 0);
249  }
250 
260  private function convertMetric($value, $src, $dest)
261  {
262  if ($src != $dest) {
263  $tab = array(
264  'in' => 39.37008,
265  'mm' => 1000
266  );
267  return $value * $tab[$dest] / $tab[$src];
268  }
269 
270  return $value;
271  }
272 
273  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
274  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore
281  protected function _Get_Height_Chars($pt)
282  {
283  // phpcs:enable
284  // Array for link between height of characters and space between lines
285  $_Table_Hauteur_Chars = array(6 => 2, 7 => 2.5, 8 => 3, 9 => 3.5, 10 => 4, 11 => 6, 12 => 7, 13 => 8, 14 => 9, 15 => 10);
286  if (in_array($pt, array_keys($_Table_Hauteur_Chars))) {
287  return $_Table_Hauteur_Chars[$pt];
288  } else {
289  return 100; // There is a prob..
290  }
291  }
292 
293  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
294  // phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore
302  protected function _Set_Format(&$pdf, $format)
303  {
304  // phpcs:enable
305  $this->_Metric = $format['metric'];
306  $this->_Avery_Name = $format['name'];
307  $this->_Avery_Code = empty($format['code']) ? '' : $format['code'];
308  $this->_Margin_Left = $this->convertMetric($format['marginLeft'], $this->_Metric, $this->_Metric_Doc);
309  $this->_Margin_Top = $this->convertMetric($format['marginTop'], $this->_Metric, $this->_Metric_Doc);
310  $this->_X_Space = $this->convertMetric($format['SpaceX'], $this->_Metric, $this->_Metric_Doc);
311  $this->_Y_Space = $this->convertMetric($format['SpaceY'], $this->_Metric, $this->_Metric_Doc);
312  $this->_X_Number = $format['NX'];
313  $this->_Y_Number = $format['NY'];
314  $this->_Width = $this->convertMetric($format['width'], $this->_Metric, $this->_Metric_Doc);
315  $this->_Height = $this->convertMetric($format['height'], $this->_Metric, $this->_Metric_Doc);
316  $this->Set_Char_Size($pdf, $format['font-size']);
317  }
318 }
Parent class for documents (PDF, ODT, ...) generators.
Class to generate stick sheet with format Avery or other personalised.
_Get_Height_Chars($pt)
protected Give the height for a char size given.
_Croix(&$pdf, $x1=0, $y1=0, $x2=210, $y2=297, $epaisseur=1, $taille=4)
protected Function realisant une croix aux 4 coins des cartes
Set_Char_Size(&$pdf, $pt)
Methode qui permet de modifier la taille des caracteres Cela modiera aussi l'espace entre chaque lign...
convertMetric($value, $src, $dest)
Convert units (in to mm, mm to in) $src and $dest must be 'in' or 'mm'.
_Set_Format(&$pdf, $format)
protected Set format
_Pointille(&$pdf, $x1=0, $y1=0, $x2=210, $y2=297, $epaisseur=1, $nbPointilles=15)
protected Print dot line
write_file($arrayofrecords, $outputlangs, $srctemplatepath, $outputdir='')
Function to build PDF on disk, then output on HTTP stream.
addSticker(&$pdf, $outputlangs, $param)
Output a sticker on page at position _COUNTX, _COUNTY (_COUNTX and _COUNTY start from 0)