From f762d6d7cbc8f022d77a7ad1d631ac50a485a5ee Mon Sep 17 00:00:00 2001 From: Francis Appels Date: Thu, 30 Apr 2015 16:41:52 +0200 Subject: [PATCH 01/10] Add tcpdfbarcode Add modTcpdfbarcode class Add pdf_label class pdf_standardlabel extends pdf_label --- htdocs/core/class/pdf_label.class.php | 546 ++++++++++++++++++ .../barcode/doc/tcpdfbarcode.modules.php | 252 ++++++++ .../doc/pdf_standardlabel.class.php | 195 +------ 3 files changed, 802 insertions(+), 191 deletions(-) create mode 100644 htdocs/core/class/pdf_label.class.php create mode 100644 htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php diff --git a/htdocs/core/class/pdf_label.class.php b/htdocs/core/class/pdf_label.class.php new file mode 100644 index 00000000000..f6b156bb37a --- /dev/null +++ b/htdocs/core/class/pdf_label.class.php @@ -0,0 +1,546 @@ + + * Copyright (C) 2002-2003 Jean-Louis Bergamo + * Copyright (C) 2006-2013 Laurent Destailleur + * Copyright (C) 2015 Francis Appels + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* Inspire de PDF_Label + * PDF_Label - PDF label editing + * @package PDF_Label + * @author Laurent PASSEBECQ + * @copyright 2003 Laurent PASSEBECQ + * disponible ici : http://www.fpdf.org/fr/script/script29.php + */ + +//------------------------------------------------------------------- +// VERSIONS : +// 1.0 : Initial release +// 1.1 : + : Added unit in the constructor +// + : Now Positions start @ (1,1).. then the first image @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 printing in millimiter by setting unit to 'mm' in constructor. +// Added some labels : +// 5160, 5161, 5162, 5163,5164 : thanx to Al Canton : acanton@adams-blake.com +// 8600 : thanx to Kunal Walia : kunal@u.washington.edu +// + : Added 3mm to the position of labels to avoid errors +//////////////////////////////////////////////////// + +/** + * \file htdocs/core/class/pdf_label.class.php + * \ingroup core + * \brief generate pdf document with labels or cards in Avery or custom format + */ + +require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/format_cards.lib.php'; + + +/** + * Class to generate stick sheet with format Avery or other personalised + */ +class pdf_label +{ + + var $code; // Code of format + var $format; // Array with informations + + // Proprietes privees + var $_Avery_Name = ''; // Nom du format de l'etiquette + var $_Margin_Left = 0; // Marge de gauche de l'etiquette + var $_Margin_Top = 0; // marge en haut de la page avant la premiere etiquette + var $_X_Space = 0; // Espace horizontal entre 2 bandes d'etiquettes + var $_Y_Space = 0; // Espace vertical entre 2 bandes d'etiquettes + var $_X_Number = 0; // NX Nombre d'etiquettes sur la largeur de la page + var $_Y_Number = 0; // NY Nombre d'etiquettes sur la hauteur de la page + var $_Width = 0; // Largeur de chaque etiquette + var $_Height = 0; // Hauteur de chaque etiquette + var $_Char_Size = 10; // Hauteur des caracteres + var $_Line_Height = 10; // Hauteur par defaut d'une ligne + var $_Metric = 'mm'; // Type of metric.. Will help to calculate good values + var $_Metric_Doc = 'mm'; // Type of metric for the doc.. + + var $_COUNTX = 1; + var $_COUNTY = 1; + var $_First = 1; + + + + /** + * Constructor + * + * @param DoliDB $db Database handler + */ + function __construct($db) + { + $this->db = $db; + } + + /** + * Methode qui permet de modifier la taille des caracteres + * Cela modiera aussi l'espace entre chaque ligne + * + * @param PDF &$pdf PDF reference + * @param int $pt point + * @return void + */ + function Set_Char_Size(&$pdf,$pt) + { + if ($pt > 3) { + $this->_Char_Size = $pt; + $this->_Line_Height = $this->_Get_Height_Chars($pt); + $pdf->SetFont('','',$pt); + } + } + + /** + * Output a sticker on page at position _COUNTX, _COUNTY (_COUNTX and _COUNTY start from 0) + * - %LOGO% is replace with company logo + * - %PHOTO% is replace with photo provided as parameter + * + * @param PDF &$pdf PDF reference + * @param string $textleft Text left + * @param string $header Header + * @param string $footer Footer + * @param Translate $outputlangs Output langs + * @param string $textright Text right + * @param string $photo Photo (full path to image file used as replacement for key %PHOTOS% into left, right, header or footer text) + * @return void + */ + function Add_PDF_card(&$pdf,$textleft,$header,$footer,$outputlangs,$textright='',$photo='') + { + global $mysoc,$conf,$langs; + global $forceimgscalewidth,$forceimgscaleheight; + + $imgscalewidth=(empty($forceimgscalewidth)?0.3:$forceimgscalewidth); // Scale of image for width (1=Full width of sticker) + $imgscaleheight=(empty($forceimgscalewidth)?0.5:$forceimgscalewidth); // Scale of image for height (1=Full height of sticker) + + // We are in a new page, then we must add a page + if (($this->_COUNTX ==0) && ($this->_COUNTY==0) and (!$this->_First==1)) { + $pdf->AddPage(); + } + $this->_First=0; + $_PosX = $this->_Margin_Left+($this->_COUNTX*($this->_Width+$this->_X_Space)); + $_PosY = $this->_Margin_Top+($this->_COUNTY*($this->_Height+$this->_Y_Space)); + + // Define logo + $logo=$conf->mycompany->dir_output.'/logos/'.$mysoc->logo; + if (! is_readable($logo)) + { + $logo=''; + if (! empty($mysoc->logo_small) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_small)) + { + $logo=$conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_small; + } + elseif (! empty($mysoc->logo) && is_readable($conf->mycompany->dir_output.'/logos/'.$mysoc->logo)) + { + $logo=$conf->mycompany->dir_output.'/logos/'.$mysoc->logo; + } + } + + // Define photo + if (! empty($photo)) + { + if (! is_readable($photo)) $photo=''; + } + + // Define background image + $backgroundimage=''; + + // Print lines + if ($this->code == "CARD") + { + $this->Tformat=$this->_Avery_Labels["CARD"]; + //$this->_Pointille($pdf,$_PosX,$_PosY,$_PosX+$this->_Width,$_PosY+$this->_Height,0.3,25); + $this->_Croix($pdf,$_PosX,$_PosY,$_PosX+$this->_Width,$_PosY+$this->_Height,0.1,10); + } + + // Background + if ($backgroundimage) + { + $pdf->image($backgroundimage,$_PosX,$_PosY,$this->_Width,$this->_Height); + } + + $xleft=2; $ytop=2; + + // Top + if ($header!='') + { + if ($this->code == "CARD") + { + $pdf->SetDrawColor(128,128,128); + $pdf->Line($_PosX, $_PosY+$this->_Line_Height+1, $_PosX+$this->_Width, $_PosY+$this->_Line_Height+1); // Only 1 mm and not ytop for top text + $pdf->SetDrawColor(0,0,0); + } + $pdf->SetXY($_PosX+$xleft, $_PosY+1); // Only 1 mm and not ytop for top text + $pdf->Cell($this->_Width-2*$xleft, $this->_Line_Height, $outputlangs->convToOutputCharset($header),0,1,'C'); + } + + + $ytop+=(empty($header)?0:(1+$this->_Line_Height)); + + // Define widthtouse and heighttouse + $maxwidthtouse=round(($this->_Width - 2*$xleft)*$imgscalewidth); $maxheighttouse=round(($this->_Height - 2*$ytop)*$imgscaleheight); + $defaultratio=($maxwidthtouse/$maxheighttouse); + $widthtouse=$maxwidthtouse; $heighttouse=0; // old value for image + $tmp=dol_getImageSize($photo, false); + if ($tmp['height']) + { + $imgratio=$tmp['width']/$tmp['height']; + if ($imgratio >= $defaultratio) { $widthtouse = $maxwidthtouse; $heighttouse = round($widthtouse / $imgratio); } + else { $heightouse = $maxheighttouse; $widthtouse = round($heightouse * $imgratio); } + } + //var_dump($this->_Width.'x'.$this->_Height.' with border and scale '.$imgscale.' => max '.$maxwidthtouse.'x'.$maxheighttouse.' => We use '.$widthtouse.'x'.$heighttouse);exit; + + // Center + if ($textright=='') // Only a left part + { + // Output left area + if ($textleft == '%LOGO%' && $logo) $pdf->Image($logo,$_PosX+$xleft,$_PosY+$ytop,$widthtouse,$heighttouse); + else if ($textleft == '%PHOTO%' && $photo) $pdf->Image($photo,$_PosX+$xleft,$_PosY+$ytop,$widthtouse,$heighttouse); + else + { + $pdf->SetXY($_PosX+$xleft, $_PosY+$ytop); + $pdf->MultiCell($this->_Width, $this->_Line_Height, $outputlangs->convToOutputCharset($textleft),0,'L'); + } + } + else if ($textleft!='' && $textright!='') // + { + if ($textleft == '%LOGO%' || $textleft == '%PHOTO%') + { + if ($textleft == '%LOGO%' && $logo) $pdf->Image($logo,$_PosX+$xleft,$_PosY+$ytop,$widthtouse,$heighttouse); + else if ($textleft == '%PHOTO%' && $photo) $pdf->Image($photo,$_PosX+$xleft,$_PosY+$ytop,$widthtouse,$heighttouse); + $pdf->SetXY($_PosX+$xleft+$widthtouse+1, $_PosY+$ytop); + $pdf->MultiCell($this->_Width-$xleft-$xleft-$widthtouse-1, $this->_Line_Height, $outputlangs->convToOutputCharset($textright),0,'R'); + } + else if ($textright == '%LOGO%' || $textright == '%PHOTO%') + { + if ($textright == '%LOGO%' && $logo) $pdf->Image($logo,$_PosX+$this->_Width-$widthtouse-$xleft,$_PosY+$ytop,$widthtouse,$heighttouse); + else if ($textright == '%PHOTO%' && $photo) $pdf->Image($photo,$_PosX+$this->_Width-$widthtouse-$xleft,$_PosY+$ytop,$widthtouse,$heighttouse); + $pdf->SetXY($_PosX+$xleft, $_PosY+$ytop); + $pdf->MultiCell($this->_Width-$widthtouse-$xleft-$xleft-1, $this->_Line_Height, $outputlangs->convToOutputCharset($textleft),0,'L'); + } + else // text on halft left and text on half right + { + $pdf->SetXY($_PosX+$xleft, $_PosY+$ytop); + $pdf->MultiCell(round($this->_Width/2), $this->_Line_Height, $outputlangs->convToOutputCharset($textleft),0,'L'); + $pdf->SetXY($_PosX+round($this->_Width/2), $_PosY+$ytop); + $pdf->MultiCell(round($this->_Width/2)-2, $this->_Line_Height, $outputlangs->convToOutputCharset($textright),0,'R'); + } + } + else // Only a right part + { + // Output right area + if ($textright == '%LOGO%' && $logo) $pdf->Image($logo,$_PosX+$this->_Width-$widthtouse-$xleft,$_PosY+$ytop,$widthtouse,$heighttouse); + else if ($textright == '%PHOTO%' && $photo) $pdf->Image($photo,$_PosX+$this->_Width-$widthtouse-$xleft,$_PosY+$ytop,$widthtouse,$heighttouse); + else + { + $pdf->SetXY($_PosX+$xleft, $_PosY+$ytop); + $pdf->MultiCell($this->_Width-$xleft, $this->_Line_Height, $outputlangs->convToOutputCharset($textright),0,'R'); + } + } + + // Bottom + if ($footer!='') + { + if ($this->code == "CARD") + { + $pdf->SetDrawColor(128,128,128); + $pdf->Line($_PosX, $_PosY+$this->_Height-$this->_Line_Height-2, $_PosX+$this->_Width, $_PosY+$this->_Height-$this->_Line_Height-2); + $pdf->SetDrawColor(0,0,0); + } + $pdf->SetXY($_PosX, $_PosY+$this->_Height-$this->_Line_Height-1); + $pdf->Cell($this->_Width, $this->_Line_Height, $outputlangs->convToOutputCharset($footer),0,1,'C'); + } + //print "$_PosY+$this->_Height-$this->_Line_Height-1
\n"; + + $this->_COUNTY++; + + if ($this->_COUNTY == $this->_Y_Number) { + // Si on est en bas de page, on remonte le 'curseur' de position + $this->_COUNTX++; + $this->_COUNTY=0; + } + + if ($this->_COUNTX == $this->_X_Number) { + // Si on est en bout de page, alors on repart sur une nouvelle page + $this->_COUNTX=0; + $this->_COUNTY=0; + } + } + + + /** + * Print dot line + * + * @param PDF &$pdf PDF reference + * @param int $x1 X1 + * @param int $y1 Y1 + * @param int $x2 X2 + * @param int $y2 Y2 + * @param int $epaisseur Epaisseur + * @param int $nbPointilles Nb pointilles + * @return void + */ + function _Pointille(&$pdf,$x1=0,$y1=0,$x2=210,$y2=297,$epaisseur=1,$nbPointilles=15) + { + $pdf->SetLineWidth($epaisseur); + $length=abs($x1-$x2); + $hauteur=abs($y1-$y2); + if($length>$hauteur) { + $Pointilles=($length/$nbPointilles)/2; // taille des pointilles + } + else { + $Pointilles=($hauteur/$nbPointilles)/2; + } + for($i=$x1;$i<=$x2;$i+=$Pointilles+$Pointilles) { + for($j=$i;$j<=($i+$Pointilles);$j++) { + if($j<=($x2-1)) { + $pdf->Line($j,$y1,$j+1,$y1); // on trace le pointill? du haut, point par point + $pdf->Line($j,$y2,$j+1,$y2); // on trace le pointill? du bas, point par point + } + } + } + for($i=$y1;$i<=$y2;$i+=$Pointilles+$Pointilles) { + for($j=$i;$j<=($i+$Pointilles);$j++) { + if($j<=($y2-1)) { + $pdf->Line($x1,$j,$x1,$j+1); // on trace le pointill? du haut, point par point + $pdf->Line($x2,$j,$x2,$j+1); // on trace le pointill? du bas, point par point + } + } + } + } + + /** + * Fonction realisant une croix aux 4 coins des cartes + * + * @param PDF &$pdf PDF reference + * @param int $x1 X1 + * @param int $y1 Y1 + * @param int $x2 X2 + * @param int $y2 Y2 + * @param int $epaisseur Epaisseur + * @param int $taille Size + * @return void + */ + function _Croix(&$pdf,$x1=0,$y1=0,$x2=210,$y2=297,$epaisseur=1,$taille=4) + { + $pdf->SetDrawColor(192,192,192); + + $pdf->SetLineWidth($epaisseur); + $lg=$taille/2; + // croix haut gauche + $pdf->Line($x1,$y1-$lg,$x1,$y1+$lg); + $pdf->Line($x1-$lg,$y1,$x1+$lg,$y1); + // croix bas gauche + $pdf->Line($x1,$y2-$lg,$x1,$y2+$lg); + $pdf->Line($x1-$lg,$y2,$x1+$lg,$y2); + // croix haut droit + $pdf->Line($x2,$y1-$lg,$x2,$y1+$lg); + $pdf->Line($x2-$lg,$y1,$x2+$lg,$y1); + // croix bas droit + $pdf->Line($x2,$y2-$lg,$x2,$y2+$lg); + $pdf->Line($x2-$lg,$y2,$x2+$lg,$y2); + + $pdf->SetDrawColor(0,0,0); + } + + /** + * Convert units (in to mm, mm to in) + * $src and $dest must be 'in' or 'mm' + * + * @param int $value value + * @param string $src from + * @param string $dest to + * @return float value value after conversion + */ + function _Convert_Metric ($value, $src, $dest) + { + if ($src != $dest) { + $tab['in'] = 39.37008; + $tab['mm'] = 1000; + return $value * $tab[$dest] / $tab[$src]; + } else { + return $value; + } + } + + /** + * Give the height for a char size given. + * + * @param int $pt Point + * @return int Height chars + */ + function _Get_Height_Chars($pt) + { + // Tableau de concordance entre la hauteur des caracteres et de l'espacement entre les lignes + $_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); + if (in_array($pt, array_keys($_Table_Hauteur_Chars))) { + return $_Table_Hauteur_Chars[$pt]; + } else { + return 100; // There is a prob.. + } + } + + /** + * Set format + * + * @param PDF &$pdf PDF reference + * @param string $format Format + * @return void + */ + function _Set_Format(&$pdf, $format) + { + $this->_Metric = $format['metric']; + $this->_Avery_Name = $format['name']; + $this->_Avery_Code = $format['code']; + $this->_Margin_Left = $this->_Convert_Metric($format['marginLeft'], $this->_Metric, $this->_Metric_Doc); + $this->_Margin_Top = $this->_Convert_Metric($format['marginTop'], $this->_Metric, $this->_Metric_Doc); + $this->_X_Space = $this->_Convert_Metric($format['SpaceX'], $this->_Metric, $this->_Metric_Doc); + $this->_Y_Space = $this->_Convert_Metric($format['SpaceY'], $this->_Metric, $this->_Metric_Doc); + $this->_X_Number = $format['NX']; + $this->_Y_Number = $format['NY']; + $this->_Width = $this->_Convert_Metric($format['width'], $this->_Metric, $this->_Metric_Doc); + $this->_Height = $this->_Convert_Metric($format['height'], $this->_Metric, $this->_Metric_Doc); + $this->Set_Char_Size($pdf, $format['font-size']); + } + + + /** + * Function to build PDF on disk, then output on HTTP strem. + * + * @param array $arrayofrecords Array of record informations (array('textleft'=>,'textheader'=>, ..., 'id'=>,'photo'=>) + * @param Translate $outputlangs Lang object for output language + * @param string $srctemplatepath Full path of source filename for generator using a template file + * @param string $outputdir Output directory for pdf file + * @return int 1=OK, 0=KO + */ + function write_file($arrayofrecords,$outputlangs,$srctemplatepath,$outputdir='') + { + global $user,$conf,$langs,$mysoc,$_Avery_Labels; + + $this->code=$srctemplatepath; + $this->Tformat = $_Avery_Labels[$this->code]; + if (empty($this->Tformat)) { dol_print_error('','ErrorBadTypeForCard'.$this->code); exit; } + $this->type = 'pdf'; + $this->format = $this->Tformat['paper-size']; + + if (! is_object($outputlangs)) $outputlangs=$langs; + // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO + if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1'; + + $outputlangs->load("main"); + $outputlangs->load("dict"); + $outputlangs->load("companies"); + $outputlangs->load("admin"); + + $title=$outputlangs->transnoentities('Labels'); + $keywords=$title." ".$outputlangs->convToOutputCharset($mysoc->name); + + $dir = (empty($outputdir)?$conf->adherent->dir_temp:$outputdir); + $filename='tmp_address_sheet.pdf'; + $file = $dir."/".$filename; + + if (! file_exists($dir)) + { + if (dol_mkdir($dir) < 0) + { + $this->error=$langs->trans("ErrorCanNotCreateDir",$dir); + return 0; + } + } + + $pdf=pdf_getInstance($this->format,$this->Tformat['metric']); + + if (class_exists('TCPDF')) + { + $pdf->setPrintHeader(false); + $pdf->setPrintFooter(false); + } + $pdf->SetFont(pdf_getPDFFont($outputlangs)); + + $pdf->SetTitle($title); + $pdf->SetSubject($title); + $pdf->SetCreator("Dolibarr ".DOL_VERSION); + $pdf->SetAuthor($outputlangs->convToOutputCharset($user->getFullName($outputlangs))); + $pdf->SetKeyWords($keywords); + if (! empty($conf->global->MAIN_DISABLE_PDF_COMPRESSION)) $pdf->SetCompression(false); + + $pdf->SetMargins(0,0); + $pdf->SetAutoPageBreak(false); + + $this->_Metric_Doc = $this->Tformat['metric']; + // Permet de commencer l'impression de l'etiquette desiree dans le cas ou la page a deja servie + $posX=1; + $posY=1; + if ($posX > 0) $posX--; else $posX=0; + if ($posY > 0) $posY--; else $posY=0; + $this->_COUNTX = $posX; + $this->_COUNTY = $posY; + $this->_Set_Format($pdf, $this->Tformat); + + + $pdf->Open(); + $pdf->AddPage(); + + + // Add each record + foreach($arrayofrecords as $val) + { + // imprime le texte specifique sur la carte + $this->Add_PDF_card($pdf,$val['textleft'],$val['textheader'],$val['textfooter'],$langs,$val['textright'],$val['photo']); + } + + //$pdf->SetXY(10, 295); + //$pdf->Cell($this->_Width, $this->_Line_Height, 'XXX',0,1,'C'); + + + // Output to file + $pdf->Output($file,'F'); + + if (! empty($conf->global->MAIN_UMASK)) + @chmod($file, octdec($conf->global->MAIN_UMASK)); + + + + // Output to http stream + clearstatcache(); + + $attachment=true; + if (! empty($conf->global->MAIN_DISABLE_FORCE_SAVEAS)) $attachment=false; + $type=dol_mimetype($filename); + + //if ($encoding) header('Content-Encoding: '.$encoding); + if ($type) header('Content-Type: '.$type); + if ($attachment) header('Content-Disposition: attachment; filename="'.$filename.'"'); + else header('Content-Disposition: inline; filename="'.$filename.'"'); + + // Ajout directives pour resoudre bug IE + header('Cache-Control: Public, must-revalidate'); + header('Pragma: public'); + + readfile($file); + + return 1; + } +} diff --git a/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php b/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php new file mode 100644 index 00000000000..d608543d5f5 --- /dev/null +++ b/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php @@ -0,0 +1,252 @@ + + * Copyright (C) 2005 Regis Houssin + * Copyright (C) 2015 Francis Appels + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php + * \ingroup barcode + * \brief File of class to manage barcode numbering with tcpdf library + */ + +require_once DOL_DOCUMENT_ROOT.'/core/modules/barcode/modules_barcode.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/barcode.lib.php'; // This is to include def like $genbarcode_loc and $font_loc + +/** + * Class to generate barcode images using tcpdf barcode generator + */ +class modTcpdfbarcode extends ModeleBarCode +{ + var $version='dolibarr'; // 'development', 'experimental', 'dolibarr' + var $error=''; + var $is2d = false; + + /** + * Return description of numbering model + * + * @return string Text with description + */ + function info() + { + global $langs; + + return 'TCPDF-barcode'; + } + + /** + * Return if a module can be used or not + * + * @return boolean true if module can be used + */ + function isEnabled() + { + return true; + } + + /** + * Test si les numeros deja en vigueur dans la base ne provoquent pas de + * de conflits qui empechera cette numerotation de fonctionner. + * + * @return boolean false si conflit, true si ok + */ + function canBeActivated() + { + global $langs; + + return true; + } + + /** + * Return true if encoding is supported + * + * @param string $encoding Encoding norm + * @return int >0 if supported, 0 if not + */ + function encodingIsSupported($encoding) + { + $tcpdfEncoding = $this->getTcpdfEncodingType($encoding); + if (empty($tcpdfEncoding)) { + return 0; + } else { + return 1; + } + } + + /** + * Return an image file on the fly (no need to write on disk) + * + * @param String $code Value to encode + * @param String $encoding Mode of encoding + * @param String $readable Code can be read + * @return int <0 if KO, >0 if OK + */ + function buildBarCode($code,$encoding,$readable='Y') + { + global $_GET; + + $tcpdfEncoding = $this->getTcpdfEncodingType($encoding); + if (empty($tcpdfEncoding)) return -1; + + $color = array(0,0,0); + + $_GET["code"]=$code; + $_GET["type"]=$encoding; + $_GET["height"]=$height; + $_GET["readable"]=$readable; + + if ($code) { + // Load the tcpdf barcode class + if ($this->is2d) { + $height = 3; + $width = 3; + require_once TCPDF_PATH.'tcpdf_barcodes_2d.php'; + $barcodeobj = new TCPDF2DBarcode($code, $tcpdfEncoding); + } else { + $height = 50; + $width = 1; + require_once TCPDF_PATH.'tcpdf_barcodes_1d.php'; + $barcodeobj = new TCPDFBarcode($code, $tcpdfEncoding); + } + + dol_syslog("buildBarCode::TCPDF.getBarcodePNG"); + $barcodeobj->getBarcodePNG($width, $height, $color); + + return 1; + } else { + return -2; + } + } + + /** + * Save an image file on disk (with no output) + * + * @param String $code Value to encode + * @param String $encoding Mode of encoding + * @param String $readable Code can be read + * @return int <0 if KO, >0 if OK + */ + function writeBarCode($code,$encoding,$readable='Y') + { + global $conf,$_GET; + + dol_mkdir($conf->barcode->dir_temp); + $file=$conf->barcode->dir_temp.'/barcode_'.$code.'_'.$encoding.'.png'; + + $tcpdfEncoding = $this->getTcpdfEncodingType($encoding); + if (empty($tcpdfEncoding)) return -1; + + $color = array(0,0,0); + + $_GET["code"]=$code; + $_GET["type"]=$encoding; + $_GET["height"]=$height; + $_GET["readable"]=$readable; + + if ($code) { + // Load the tcpdf barcode class + if ($this->is2d) { + $height = 1; + $width = 1; + require_once TCPDF_PATH.'tcpdf_barcodes_2d.php'; + $barcodeobj = new TCPDF2DBarcode($code, $tcpdfEncoding); + } else { + $height = 50; + $width = 1; + require_once TCPDF_PATH.'tcpdf_barcodes_1d.php'; + $barcodeobj = new TCPDFBarcode($code, $tcpdfEncoding); + } + + dol_syslog("writeBarCode::TCPDF.getBarcodePngData"); + if ($imageData = $barcodeobj->getBarcodePngData($width, $height, $color)) { + if (function_exists('imagecreate')) { + $imageData = imagecreatefromstring($imageData); + } + if (imagepng($imageData, $file)) { + return 1; + } else { + return -3; + } + } else { + return -4; + } + } else { + return -2; + } + } + + /** + * get available output_modes for tcpdf class wth its translated description + * + * @param string $dolEncodingType dolibarr barcode encoding type + * @return string tcpdf encoding type + */ + private function getTcpdfEncodingType($dolEncodingType) + { + $tcpdf1dEncodingTypes = array( + 'C39' => 'C39', + 'C39+' => 'C39+', + 'C39E' => 'C39E', + 'C39E+' => 'C39E+', + 'S25' => 'S25', + 'S25+' => 'S25+', + 'I25' => 'I25', + 'I25+' => 'I25+', + 'C128' => 'C128', + 'C128A' => 'C128A', + 'C128B' => 'C128B', + 'C128C' => 'C128C', + 'EAN2' => 'EAN2', + 'EAN5' => 'EAN5', + 'EAN8' => 'EAN8', + 'EAN13' => 'EAN13', + 'ISBN' => 'EAN13', + 'UPC' => 'UPCA', + 'UPCE' => 'UPCE', + 'MSI' => 'MSI', + 'MSI+' => 'MSI+', + 'POSTNET' => 'POSTNET', + 'PLANET' => 'PLANET', + 'RMS4CC' => 'RMS4CC', + 'KIX' => 'KIX', + 'IMB' => 'IMB', + 'CODABAR' => 'CODABAR', + 'CODE11' => 'CODE11', + 'PHARMA' => 'PHARMA', + 'PHARMA2T' => 'PHARMA2T' + ); + + $tcpdf2dEncodingTypes = array( + 'DATAMATRIX' => 'DATAMATRIX', + 'PDF417' => 'PDF417', + 'QRCODE' => 'QRCODE,L', + 'QRCODE,L' => 'QRCODE,L', + 'QRCODE,M' => 'QRCODE,M', + 'QRCODE,Q' => 'QRCODE,Q', + 'QRCODE,H' => 'QRCODE,H' + ); + + if (array_key_exists($dolEncodingType, $tcpdf1dEncodingTypes)) { + $this->is2d = false; + return $tcpdf1dEncodingTypes[$dolEncodingType]; + } else if (array_key_exists($dolEncodingType, $tcpdf2dEncodingTypes)) { + $this->is2d = true; + return $tcpdf2dEncodingTypes[$dolEncodingType]; + } else { + return ''; + } + } +} \ No newline at end of file diff --git a/htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php b/htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php index 193de960bb8..e8eaeabf12e 100644 --- a/htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php +++ b/htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php @@ -4,6 +4,7 @@ * Copyright (C) 2001-2003 Rodolphe Quiedeville * Copyright (C) 2002-2003 Jean-Louis Bergamo * Copyright (C) 2006-2013 Laurent Destailleur + * Copyright (C) 2015 Francis Appels * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -50,74 +51,20 @@ * \brief Fichier de la classe permettant d'editer au format PDF des etiquettes au format Avery ou personnalise */ -require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/core/lib/format_cards.lib.php'; - +require_once DOL_DOCUMENT_ROOT.'/core/class/pdf_label.class.php'; /** * Class to generate stick sheet with format Avery or other personalised */ -class pdf_standardlabel +class pdf_standardlabel extends pdf_label { - var $code; // Code of format - var $format; // Array with informations - - // Proprietes privees - var $_Avery_Name = ''; // Nom du format de l'etiquette - var $_Margin_Left = 0; // Marge de gauche de l'etiquette - var $_Margin_Top = 0; // marge en haut de la page avant la premiere etiquette - var $_X_Space = 0; // Espace horizontal entre 2 bandes d'etiquettes - var $_Y_Space = 0; // Espace vertical entre 2 bandes d'etiquettes - var $_X_Number = 0; // NX Nombre d'etiquettes sur la largeur de la page - var $_Y_Number = 0; // NY Nombre d'etiquettes sur la hauteur de la page - var $_Width = 0; // Largeur de chaque etiquette - var $_Height = 0; // Hauteur de chaque etiquette - var $_Char_Size = 10; // Hauteur des caracteres - var $_Line_Height = 10; // Hauteur par defaut d'une ligne - var $_Metric = 'mm'; // Type of metric.. Will help to calculate good values - var $_Metric_Doc = 'mm'; // Type of metric for the doc.. - - var $_COUNTX = 1; - var $_COUNTY = 1; - var $_First = 1; - - - - /** - * Constructor - * - * @param DoliDB $db Database handler - */ - function __construct($db) - { - $this->db = $db; - } - - /** - * Methode qui permet de modifier la taille des caracteres - * Cela modiera aussi l'espace entre chaque ligne - * - * @param PDF $pdf PDF - * @param int $pt point - * @return void - */ - function Set_Char_Size(&$pdf,$pt) - { - if ($pt > 3) { - $this->_Char_Size = $pt; - $this->_Line_Height = $this->_Get_Height_Chars($pt); - $pdf->SetFont('','',$pt); - } - } - /** * Output a sticker on page at position _COUNTX, _COUNTY (_COUNTX and _COUNTY start from 0) * - %LOGO% is replace with company logo * - %PHOTO% is replace with photo provided as parameter * - * @param PDF $pdf PDF + * @param PDF &$pdf PDF reference * @param string $textleft Text left * @param string $header Header * @param string $footer Footer @@ -289,140 +236,6 @@ class pdf_standardlabel } - /** - * Print dot line - * - * @param PDF $pdf PDF - * @param int $x1 X1 - * @param int $y1 Y1 - * @param int $x2 X2 - * @param int $y2 Y2 - * @param int $epaisseur Epaisseur - * @param int $nbPointilles Nb pointilles - * @return void - */ - function _Pointille(&$pdf,$x1=0,$y1=0,$x2=210,$y2=297,$epaisseur=1,$nbPointilles=15) - { - $pdf->SetLineWidth($epaisseur); - $length=abs($x1-$x2); - $hauteur=abs($y1-$y2); - if($length>$hauteur) { - $Pointilles=($length/$nbPointilles)/2; // taille des pointilles - } - else { - $Pointilles=($hauteur/$nbPointilles)/2; - } - for($i=$x1;$i<=$x2;$i+=$Pointilles+$Pointilles) { - for($j=$i;$j<=($i+$Pointilles);$j++) { - if($j<=($x2-1)) { - $pdf->Line($j,$y1,$j+1,$y1); // on trace le pointill? du haut, point par point - $pdf->Line($j,$y2,$j+1,$y2); // on trace le pointill? du bas, point par point - } - } - } - for($i=$y1;$i<=$y2;$i+=$Pointilles+$Pointilles) { - for($j=$i;$j<=($i+$Pointilles);$j++) { - if($j<=($y2-1)) { - $pdf->Line($x1,$j,$x1,$j+1); // on trace le pointill? du haut, point par point - $pdf->Line($x2,$j,$x2,$j+1); // on trace le pointill? du bas, point par point - } - } - } - } - - /** - * Fonction realisant une croix aux 4 coins des cartes - * - * @param PDF $pdf PDF - * @param int $x1 X1 - * @param int $y1 Y1 - * @param int $x2 X2 - * @param int $y2 Y2 - * @param int $epaisseur Epaisseur - * @param int $taille Size - * @return void - */ - function _Croix(&$pdf,$x1=0,$y1=0,$x2=210,$y2=297,$epaisseur=1,$taille=4) - { - $pdf->SetDrawColor(192,192,192); - - $pdf->SetLineWidth($epaisseur); - $lg=$taille/2; - // croix haut gauche - $pdf->Line($x1,$y1-$lg,$x1,$y1+$lg); - $pdf->Line($x1-$lg,$y1,$x1+$lg,$y1); - // croix bas gauche - $pdf->Line($x1,$y2-$lg,$x1,$y2+$lg); - $pdf->Line($x1-$lg,$y2,$x1+$lg,$y2); - // croix haut droit - $pdf->Line($x2,$y1-$lg,$x2,$y1+$lg); - $pdf->Line($x2-$lg,$y1,$x2+$lg,$y1); - // croix bas droit - $pdf->Line($x2,$y2-$lg,$x2,$y2+$lg); - $pdf->Line($x2-$lg,$y2,$x2+$lg,$y2); - - $pdf->SetDrawColor(0,0,0); - } - - /** - * Convert units (in to mm, mm to in) - * $src and $dest must be 'in' or 'mm' - * - * @param int $value value - * @param string $src from - * @param string $dest to - * @return float value value after conversion - */ - function _Convert_Metric ($value, $src, $dest) - { - if ($src != $dest) { - $tab['in'] = 39.37008; - $tab['mm'] = 1000; - return $value * $tab[$dest] / $tab[$src]; - } else { - return $value; - } - } - - /** - * Give the height for a char size given. - * - * @param int $pt Point - * @return int Height chars - */ - function _Get_Height_Chars($pt) - { - // Tableau de concordance entre la hauteur des caracteres et de l'espacement entre les lignes - $_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); - if (in_array($pt, array_keys($_Table_Hauteur_Chars))) { - return $_Table_Hauteur_Chars[$pt]; - } else { - return 100; // There is a prob.. - } - } - - /** - * Set format - * - * @param PDF $pdf PDF - * @param string $format Format - * @return void - */ - function _Set_Format(&$pdf, $format) - { - $this->_Metric = $format['metric']; - $this->_Avery_Name = $format['name']; - $this->_Avery_Code = $format['code']; - $this->_Margin_Left = $this->_Convert_Metric($format['marginLeft'], $this->_Metric, $this->_Metric_Doc); - $this->_Margin_Top = $this->_Convert_Metric($format['marginTop'], $this->_Metric, $this->_Metric_Doc); - $this->_X_Space = $this->_Convert_Metric($format['SpaceX'], $this->_Metric, $this->_Metric_Doc); - $this->_Y_Space = $this->_Convert_Metric($format['SpaceY'], $this->_Metric, $this->_Metric_Doc); - $this->_X_Number = $format['NX']; - $this->_Y_Number = $format['NY']; - $this->_Width = $this->_Convert_Metric($format['width'], $this->_Metric, $this->_Metric_Doc); - $this->_Height = $this->_Convert_Metric($format['height'], $this->_Metric, $this->_Metric_Doc); - $this->Set_Char_Size($pdf, $format['font-size']); - } /** From 2fd4bf10124d1df22b44897557c51aae444a3529 Mon Sep 17 00:00:00 2001 From: Francis Appels Date: Sun, 3 May 2015 09:54:37 +0200 Subject: [PATCH 02/10] Add commonstickergenerator class Common abstract class for sticker printing. Creates contracts for write_file and addSticker methods --- .../class/commonstickergenerator.class.php | 270 +++++++++ htdocs/core/class/pdf_label.class.php | 546 ------------------ 2 files changed, 270 insertions(+), 546 deletions(-) create mode 100644 htdocs/core/class/commonstickergenerator.class.php delete mode 100644 htdocs/core/class/pdf_label.class.php diff --git a/htdocs/core/class/commonstickergenerator.class.php b/htdocs/core/class/commonstickergenerator.class.php new file mode 100644 index 00000000000..50a0c929a7e --- /dev/null +++ b/htdocs/core/class/commonstickergenerator.class.php @@ -0,0 +1,270 @@ + + * Copyright (C) 2002-2003 Jean-Louis Bergamo + * Copyright (C) 2006-2013 Laurent Destailleur + * Copyright (C) 2015 Francis Appels + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* Inspire de PDF_Label + * PDF_Label - PDF label editing + * @package PDF_Label + * @author Laurent PASSEBECQ + * @copyright 2003 Laurent PASSEBECQ + * disponible ici : http://www.fpdf.org/fr/script/script29.php + */ + +//------------------------------------------------------------------- +// VERSIONS : +// 1.0 : Initial release +// 1.1 : + : Added unit in the constructor +// + : Now Positions start @ (1,1).. then the first image @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 printing in millimiter by setting unit to 'mm' in constructor. +// Added some labels : +// 5160, 5161, 5162, 5163,5164 : thanx to Al Canton : acanton@adams-blake.com +// 8600 : thanx to Kunal Walia : kunal@u.washington.edu +// + : Added 3mm to the position of labels to avoid errors +//////////////////////////////////////////////////// + +/** + * \file htdocs/core/class/commonstickergenerator.class.php + * \ingroup core + * \brief generate pdf document with labels or cards in Avery or custom format + */ + +require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php'; +require_once DOL_DOCUMENT_ROOT.'/core/lib/format_cards.lib.php'; + + +/** + * Class to generate stick sheet with format Avery or other personalised + */ +abstract class CommonStickerGenerator +{ + + public $code; // Code of format + public $format; // Array with informations + + // protected + var $_Avery_Name = ''; // Nom du format de l'etiquette + var $_Margin_Left = 0; // Marge de gauche de l'etiquette + var $_Margin_Top = 0; // marge en haut de la page avant la premiere etiquette + var $_X_Space = 0; // Espace horizontal entre 2 bandes d'etiquettes + var $_Y_Space = 0; // Espace vertical entre 2 bandes d'etiquettes + var $_X_Number = 0; // NX Nombre d'etiquettes sur la largeur de la page + var $_Y_Number = 0; // NY Nombre d'etiquettes sur la hauteur de la page + var $_Width = 0; // Largeur de chaque etiquette + var $_Height = 0; // Hauteur de chaque etiquette + var $_Char_Size = 10; // Hauteur des caracteres + var $_Line_Height = 10; // Hauteur par defaut d'une ligne + var $_Metric = 'mm'; // Type of metric.. Will help to calculate good values + var $_Metric_Doc = 'mm'; // Type of metric for the doc.. + var $_COUNTX = 1; + var $_COUNTY = 1; + var $_First = 1; + var $Tformat; + + /** + * Constructor + * + * @param DoliDB $db Database handler + */ + function __construct($db) + { + $this->db = $db; + } + + /** + * Function to build PDF on disk, then output on HTTP strem. + * + * @param array $arrayofrecords Array of record informations (array('textleft'=>,'textheader'=>, ..., 'id'=>,'photo'=>) + * @param Translate $outputlangs Lang object for output language + * @param string $srctemplatepath Full path of source filename for generator using a template file + * @param string $outputdir Output directory for pdf file + * @return int 1=OK, 0=KO + */ + abstract function write_file($arrayofrecords,$outputlangs,$srctemplatepath,$outputdir=''); + + /** + * Output a sticker on page at position _COUNTX, _COUNTY (_COUNTX and _COUNTY start from 0) + * + * @param PDF &$pdf PDF reference + * @param Translate $outputlangs Output langs + * @param array $param Associative array containing label content and optional parameters + * @return void + */ + abstract function addSticker(&$pdf,$outputlangs,$param); + + /** + * Methode qui permet de modifier la taille des caracteres + * Cela modiera aussi l'espace entre chaque ligne + * + * @param PDF &$pdf PDF reference + * @param int $pt point + * @return void + */ + function Set_Char_Size(&$pdf,$pt) + { + if ($pt > 3) { + $this->_Char_Size = $pt; + $this->_Line_Height = $this->_Get_Height_Chars($pt); + $pdf->SetFont('','',$pt); + } + } + + /** + * protected Print dot line + * + * @param PDF &$pdf PDF reference + * @param int $x1 X1 + * @param int $y1 Y1 + * @param int $x2 X2 + * @param int $y2 Y2 + * @param int $epaisseur Epaisseur + * @param int $nbPointilles Nb pointilles + * @return void + */ + function _Pointille(&$pdf,$x1=0,$y1=0,$x2=210,$y2=297,$epaisseur=1,$nbPointilles=15) + { + $pdf->SetLineWidth($epaisseur); + $length=abs($x1-$x2); + $hauteur=abs($y1-$y2); + if($length>$hauteur) { + $Pointilles=($length/$nbPointilles)/2; // taille des pointilles + } + else { + $Pointilles=($hauteur/$nbPointilles)/2; + } + for($i=$x1;$i<=$x2;$i+=$Pointilles+$Pointilles) { + for($j=$i;$j<=($i+$Pointilles);$j++) { + if($j<=($x2-1)) { + $pdf->Line($j,$y1,$j+1,$y1); // on trace le pointill? du haut, point par point + $pdf->Line($j,$y2,$j+1,$y2); // on trace le pointill? du bas, point par point + } + } + } + for($i=$y1;$i<=$y2;$i+=$Pointilles+$Pointilles) { + for($j=$i;$j<=($i+$Pointilles);$j++) { + if($j<=($y2-1)) { + $pdf->Line($x1,$j,$x1,$j+1); // on trace le pointill? du haut, point par point + $pdf->Line($x2,$j,$x2,$j+1); // on trace le pointill? du bas, point par point + } + } + } + } + + /** + * protected Function realisant une croix aux 4 coins des cartes + * + * @param PDF &$pdf PDF reference + * @param int $x1 X1 + * @param int $y1 Y1 + * @param int $x2 X2 + * @param int $y2 Y2 + * @param int $epaisseur Epaisseur + * @param int $taille Size + * @return void + */ + function _Croix(&$pdf,$x1=0,$y1=0,$x2=210,$y2=297,$epaisseur=1,$taille=4) + { + $pdf->SetDrawColor(192,192,192); + + $pdf->SetLineWidth($epaisseur); + $lg=$taille/2; + // croix haut gauche + $pdf->Line($x1,$y1-$lg,$x1,$y1+$lg); + $pdf->Line($x1-$lg,$y1,$x1+$lg,$y1); + // croix bas gauche + $pdf->Line($x1,$y2-$lg,$x1,$y2+$lg); + $pdf->Line($x1-$lg,$y2,$x1+$lg,$y2); + // croix haut droit + $pdf->Line($x2,$y1-$lg,$x2,$y1+$lg); + $pdf->Line($x2-$lg,$y1,$x2+$lg,$y1); + // croix bas droit + $pdf->Line($x2,$y2-$lg,$x2,$y2+$lg); + $pdf->Line($x2-$lg,$y2,$x2+$lg,$y2); + + $pdf->SetDrawColor(0,0,0); + } + + /** + * protected Convert units (in to mm, mm to in) + * $src and $dest must be 'in' or 'mm' + * + * @param int $value value + * @param string $src from + * @param string $dest to + * @return float value value after conversion + */ + function _Convert_Metric ($value, $src, $dest) + { + if ($src != $dest) { + $tab['in'] = 39.37008; + $tab['mm'] = 1000; + return $value * $tab[$dest] / $tab[$src]; + } else { + return $value; + } + } + + /** + * protected Give the height for a char size given. + * + * @param int $pt Point + * @return int Height chars + */ + function _Get_Height_Chars($pt) + { + // Tableau de concordance entre la hauteur des caracteres et de l'espacement entre les lignes + $_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); + if (in_array($pt, array_keys($_Table_Hauteur_Chars))) { + return $_Table_Hauteur_Chars[$pt]; + } else { + return 100; // There is a prob.. + } + } + + /** + * protected Set format + * + * @param PDF &$pdf PDF reference + * @param string $format Format + * @return void + */ + function _Set_Format(&$pdf, $format) + { + $this->_Metric = $format['metric']; + $this->_Avery_Name = $format['name']; + $this->_Avery_Code = $format['code']; + $this->_Margin_Left = $this->_Convert_Metric($format['marginLeft'], $this->_Metric, $this->_Metric_Doc); + $this->_Margin_Top = $this->_Convert_Metric($format['marginTop'], $this->_Metric, $this->_Metric_Doc); + $this->_X_Space = $this->_Convert_Metric($format['SpaceX'], $this->_Metric, $this->_Metric_Doc); + $this->_Y_Space = $this->_Convert_Metric($format['SpaceY'], $this->_Metric, $this->_Metric_Doc); + $this->_X_Number = $format['NX']; + $this->_Y_Number = $format['NY']; + $this->_Width = $this->_Convert_Metric($format['width'], $this->_Metric, $this->_Metric_Doc); + $this->_Height = $this->_Convert_Metric($format['height'], $this->_Metric, $this->_Metric_Doc); + $this->Set_Char_Size($pdf, $format['font-size']); + } + +} diff --git a/htdocs/core/class/pdf_label.class.php b/htdocs/core/class/pdf_label.class.php deleted file mode 100644 index f6b156bb37a..00000000000 --- a/htdocs/core/class/pdf_label.class.php +++ /dev/null @@ -1,546 +0,0 @@ - - * Copyright (C) 2002-2003 Jean-Louis Bergamo - * Copyright (C) 2006-2013 Laurent Destailleur - * Copyright (C) 2015 Francis Appels - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -/* Inspire de PDF_Label - * PDF_Label - PDF label editing - * @package PDF_Label - * @author Laurent PASSEBECQ - * @copyright 2003 Laurent PASSEBECQ - * disponible ici : http://www.fpdf.org/fr/script/script29.php - */ - -//------------------------------------------------------------------- -// VERSIONS : -// 1.0 : Initial release -// 1.1 : + : Added unit in the constructor -// + : Now Positions start @ (1,1).. then the first image @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 printing in millimiter by setting unit to 'mm' in constructor. -// Added some labels : -// 5160, 5161, 5162, 5163,5164 : thanx to Al Canton : acanton@adams-blake.com -// 8600 : thanx to Kunal Walia : kunal@u.washington.edu -// + : Added 3mm to the position of labels to avoid errors -//////////////////////////////////////////////////// - -/** - * \file htdocs/core/class/pdf_label.class.php - * \ingroup core - * \brief generate pdf document with labels or cards in Avery or custom format - */ - -require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/core/lib/format_cards.lib.php'; - - -/** - * Class to generate stick sheet with format Avery or other personalised - */ -class pdf_label -{ - - var $code; // Code of format - var $format; // Array with informations - - // Proprietes privees - var $_Avery_Name = ''; // Nom du format de l'etiquette - var $_Margin_Left = 0; // Marge de gauche de l'etiquette - var $_Margin_Top = 0; // marge en haut de la page avant la premiere etiquette - var $_X_Space = 0; // Espace horizontal entre 2 bandes d'etiquettes - var $_Y_Space = 0; // Espace vertical entre 2 bandes d'etiquettes - var $_X_Number = 0; // NX Nombre d'etiquettes sur la largeur de la page - var $_Y_Number = 0; // NY Nombre d'etiquettes sur la hauteur de la page - var $_Width = 0; // Largeur de chaque etiquette - var $_Height = 0; // Hauteur de chaque etiquette - var $_Char_Size = 10; // Hauteur des caracteres - var $_Line_Height = 10; // Hauteur par defaut d'une ligne - var $_Metric = 'mm'; // Type of metric.. Will help to calculate good values - var $_Metric_Doc = 'mm'; // Type of metric for the doc.. - - var $_COUNTX = 1; - var $_COUNTY = 1; - var $_First = 1; - - - - /** - * Constructor - * - * @param DoliDB $db Database handler - */ - function __construct($db) - { - $this->db = $db; - } - - /** - * Methode qui permet de modifier la taille des caracteres - * Cela modiera aussi l'espace entre chaque ligne - * - * @param PDF &$pdf PDF reference - * @param int $pt point - * @return void - */ - function Set_Char_Size(&$pdf,$pt) - { - if ($pt > 3) { - $this->_Char_Size = $pt; - $this->_Line_Height = $this->_Get_Height_Chars($pt); - $pdf->SetFont('','',$pt); - } - } - - /** - * Output a sticker on page at position _COUNTX, _COUNTY (_COUNTX and _COUNTY start from 0) - * - %LOGO% is replace with company logo - * - %PHOTO% is replace with photo provided as parameter - * - * @param PDF &$pdf PDF reference - * @param string $textleft Text left - * @param string $header Header - * @param string $footer Footer - * @param Translate $outputlangs Output langs - * @param string $textright Text right - * @param string $photo Photo (full path to image file used as replacement for key %PHOTOS% into left, right, header or footer text) - * @return void - */ - function Add_PDF_card(&$pdf,$textleft,$header,$footer,$outputlangs,$textright='',$photo='') - { - global $mysoc,$conf,$langs; - global $forceimgscalewidth,$forceimgscaleheight; - - $imgscalewidth=(empty($forceimgscalewidth)?0.3:$forceimgscalewidth); // Scale of image for width (1=Full width of sticker) - $imgscaleheight=(empty($forceimgscalewidth)?0.5:$forceimgscalewidth); // Scale of image for height (1=Full height of sticker) - - // We are in a new page, then we must add a page - if (($this->_COUNTX ==0) && ($this->_COUNTY==0) and (!$this->_First==1)) { - $pdf->AddPage(); - } - $this->_First=0; - $_PosX = $this->_Margin_Left+($this->_COUNTX*($this->_Width+$this->_X_Space)); - $_PosY = $this->_Margin_Top+($this->_COUNTY*($this->_Height+$this->_Y_Space)); - - // Define logo - $logo=$conf->mycompany->dir_output.'/logos/'.$mysoc->logo; - if (! is_readable($logo)) - { - $logo=''; - if (! empty($mysoc->logo_small) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_small)) - { - $logo=$conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_small; - } - elseif (! empty($mysoc->logo) && is_readable($conf->mycompany->dir_output.'/logos/'.$mysoc->logo)) - { - $logo=$conf->mycompany->dir_output.'/logos/'.$mysoc->logo; - } - } - - // Define photo - if (! empty($photo)) - { - if (! is_readable($photo)) $photo=''; - } - - // Define background image - $backgroundimage=''; - - // Print lines - if ($this->code == "CARD") - { - $this->Tformat=$this->_Avery_Labels["CARD"]; - //$this->_Pointille($pdf,$_PosX,$_PosY,$_PosX+$this->_Width,$_PosY+$this->_Height,0.3,25); - $this->_Croix($pdf,$_PosX,$_PosY,$_PosX+$this->_Width,$_PosY+$this->_Height,0.1,10); - } - - // Background - if ($backgroundimage) - { - $pdf->image($backgroundimage,$_PosX,$_PosY,$this->_Width,$this->_Height); - } - - $xleft=2; $ytop=2; - - // Top - if ($header!='') - { - if ($this->code == "CARD") - { - $pdf->SetDrawColor(128,128,128); - $pdf->Line($_PosX, $_PosY+$this->_Line_Height+1, $_PosX+$this->_Width, $_PosY+$this->_Line_Height+1); // Only 1 mm and not ytop for top text - $pdf->SetDrawColor(0,0,0); - } - $pdf->SetXY($_PosX+$xleft, $_PosY+1); // Only 1 mm and not ytop for top text - $pdf->Cell($this->_Width-2*$xleft, $this->_Line_Height, $outputlangs->convToOutputCharset($header),0,1,'C'); - } - - - $ytop+=(empty($header)?0:(1+$this->_Line_Height)); - - // Define widthtouse and heighttouse - $maxwidthtouse=round(($this->_Width - 2*$xleft)*$imgscalewidth); $maxheighttouse=round(($this->_Height - 2*$ytop)*$imgscaleheight); - $defaultratio=($maxwidthtouse/$maxheighttouse); - $widthtouse=$maxwidthtouse; $heighttouse=0; // old value for image - $tmp=dol_getImageSize($photo, false); - if ($tmp['height']) - { - $imgratio=$tmp['width']/$tmp['height']; - if ($imgratio >= $defaultratio) { $widthtouse = $maxwidthtouse; $heighttouse = round($widthtouse / $imgratio); } - else { $heightouse = $maxheighttouse; $widthtouse = round($heightouse * $imgratio); } - } - //var_dump($this->_Width.'x'.$this->_Height.' with border and scale '.$imgscale.' => max '.$maxwidthtouse.'x'.$maxheighttouse.' => We use '.$widthtouse.'x'.$heighttouse);exit; - - // Center - if ($textright=='') // Only a left part - { - // Output left area - if ($textleft == '%LOGO%' && $logo) $pdf->Image($logo,$_PosX+$xleft,$_PosY+$ytop,$widthtouse,$heighttouse); - else if ($textleft == '%PHOTO%' && $photo) $pdf->Image($photo,$_PosX+$xleft,$_PosY+$ytop,$widthtouse,$heighttouse); - else - { - $pdf->SetXY($_PosX+$xleft, $_PosY+$ytop); - $pdf->MultiCell($this->_Width, $this->_Line_Height, $outputlangs->convToOutputCharset($textleft),0,'L'); - } - } - else if ($textleft!='' && $textright!='') // - { - if ($textleft == '%LOGO%' || $textleft == '%PHOTO%') - { - if ($textleft == '%LOGO%' && $logo) $pdf->Image($logo,$_PosX+$xleft,$_PosY+$ytop,$widthtouse,$heighttouse); - else if ($textleft == '%PHOTO%' && $photo) $pdf->Image($photo,$_PosX+$xleft,$_PosY+$ytop,$widthtouse,$heighttouse); - $pdf->SetXY($_PosX+$xleft+$widthtouse+1, $_PosY+$ytop); - $pdf->MultiCell($this->_Width-$xleft-$xleft-$widthtouse-1, $this->_Line_Height, $outputlangs->convToOutputCharset($textright),0,'R'); - } - else if ($textright == '%LOGO%' || $textright == '%PHOTO%') - { - if ($textright == '%LOGO%' && $logo) $pdf->Image($logo,$_PosX+$this->_Width-$widthtouse-$xleft,$_PosY+$ytop,$widthtouse,$heighttouse); - else if ($textright == '%PHOTO%' && $photo) $pdf->Image($photo,$_PosX+$this->_Width-$widthtouse-$xleft,$_PosY+$ytop,$widthtouse,$heighttouse); - $pdf->SetXY($_PosX+$xleft, $_PosY+$ytop); - $pdf->MultiCell($this->_Width-$widthtouse-$xleft-$xleft-1, $this->_Line_Height, $outputlangs->convToOutputCharset($textleft),0,'L'); - } - else // text on halft left and text on half right - { - $pdf->SetXY($_PosX+$xleft, $_PosY+$ytop); - $pdf->MultiCell(round($this->_Width/2), $this->_Line_Height, $outputlangs->convToOutputCharset($textleft),0,'L'); - $pdf->SetXY($_PosX+round($this->_Width/2), $_PosY+$ytop); - $pdf->MultiCell(round($this->_Width/2)-2, $this->_Line_Height, $outputlangs->convToOutputCharset($textright),0,'R'); - } - } - else // Only a right part - { - // Output right area - if ($textright == '%LOGO%' && $logo) $pdf->Image($logo,$_PosX+$this->_Width-$widthtouse-$xleft,$_PosY+$ytop,$widthtouse,$heighttouse); - else if ($textright == '%PHOTO%' && $photo) $pdf->Image($photo,$_PosX+$this->_Width-$widthtouse-$xleft,$_PosY+$ytop,$widthtouse,$heighttouse); - else - { - $pdf->SetXY($_PosX+$xleft, $_PosY+$ytop); - $pdf->MultiCell($this->_Width-$xleft, $this->_Line_Height, $outputlangs->convToOutputCharset($textright),0,'R'); - } - } - - // Bottom - if ($footer!='') - { - if ($this->code == "CARD") - { - $pdf->SetDrawColor(128,128,128); - $pdf->Line($_PosX, $_PosY+$this->_Height-$this->_Line_Height-2, $_PosX+$this->_Width, $_PosY+$this->_Height-$this->_Line_Height-2); - $pdf->SetDrawColor(0,0,0); - } - $pdf->SetXY($_PosX, $_PosY+$this->_Height-$this->_Line_Height-1); - $pdf->Cell($this->_Width, $this->_Line_Height, $outputlangs->convToOutputCharset($footer),0,1,'C'); - } - //print "$_PosY+$this->_Height-$this->_Line_Height-1
\n"; - - $this->_COUNTY++; - - if ($this->_COUNTY == $this->_Y_Number) { - // Si on est en bas de page, on remonte le 'curseur' de position - $this->_COUNTX++; - $this->_COUNTY=0; - } - - if ($this->_COUNTX == $this->_X_Number) { - // Si on est en bout de page, alors on repart sur une nouvelle page - $this->_COUNTX=0; - $this->_COUNTY=0; - } - } - - - /** - * Print dot line - * - * @param PDF &$pdf PDF reference - * @param int $x1 X1 - * @param int $y1 Y1 - * @param int $x2 X2 - * @param int $y2 Y2 - * @param int $epaisseur Epaisseur - * @param int $nbPointilles Nb pointilles - * @return void - */ - function _Pointille(&$pdf,$x1=0,$y1=0,$x2=210,$y2=297,$epaisseur=1,$nbPointilles=15) - { - $pdf->SetLineWidth($epaisseur); - $length=abs($x1-$x2); - $hauteur=abs($y1-$y2); - if($length>$hauteur) { - $Pointilles=($length/$nbPointilles)/2; // taille des pointilles - } - else { - $Pointilles=($hauteur/$nbPointilles)/2; - } - for($i=$x1;$i<=$x2;$i+=$Pointilles+$Pointilles) { - for($j=$i;$j<=($i+$Pointilles);$j++) { - if($j<=($x2-1)) { - $pdf->Line($j,$y1,$j+1,$y1); // on trace le pointill? du haut, point par point - $pdf->Line($j,$y2,$j+1,$y2); // on trace le pointill? du bas, point par point - } - } - } - for($i=$y1;$i<=$y2;$i+=$Pointilles+$Pointilles) { - for($j=$i;$j<=($i+$Pointilles);$j++) { - if($j<=($y2-1)) { - $pdf->Line($x1,$j,$x1,$j+1); // on trace le pointill? du haut, point par point - $pdf->Line($x2,$j,$x2,$j+1); // on trace le pointill? du bas, point par point - } - } - } - } - - /** - * Fonction realisant une croix aux 4 coins des cartes - * - * @param PDF &$pdf PDF reference - * @param int $x1 X1 - * @param int $y1 Y1 - * @param int $x2 X2 - * @param int $y2 Y2 - * @param int $epaisseur Epaisseur - * @param int $taille Size - * @return void - */ - function _Croix(&$pdf,$x1=0,$y1=0,$x2=210,$y2=297,$epaisseur=1,$taille=4) - { - $pdf->SetDrawColor(192,192,192); - - $pdf->SetLineWidth($epaisseur); - $lg=$taille/2; - // croix haut gauche - $pdf->Line($x1,$y1-$lg,$x1,$y1+$lg); - $pdf->Line($x1-$lg,$y1,$x1+$lg,$y1); - // croix bas gauche - $pdf->Line($x1,$y2-$lg,$x1,$y2+$lg); - $pdf->Line($x1-$lg,$y2,$x1+$lg,$y2); - // croix haut droit - $pdf->Line($x2,$y1-$lg,$x2,$y1+$lg); - $pdf->Line($x2-$lg,$y1,$x2+$lg,$y1); - // croix bas droit - $pdf->Line($x2,$y2-$lg,$x2,$y2+$lg); - $pdf->Line($x2-$lg,$y2,$x2+$lg,$y2); - - $pdf->SetDrawColor(0,0,0); - } - - /** - * Convert units (in to mm, mm to in) - * $src and $dest must be 'in' or 'mm' - * - * @param int $value value - * @param string $src from - * @param string $dest to - * @return float value value after conversion - */ - function _Convert_Metric ($value, $src, $dest) - { - if ($src != $dest) { - $tab['in'] = 39.37008; - $tab['mm'] = 1000; - return $value * $tab[$dest] / $tab[$src]; - } else { - return $value; - } - } - - /** - * Give the height for a char size given. - * - * @param int $pt Point - * @return int Height chars - */ - function _Get_Height_Chars($pt) - { - // Tableau de concordance entre la hauteur des caracteres et de l'espacement entre les lignes - $_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); - if (in_array($pt, array_keys($_Table_Hauteur_Chars))) { - return $_Table_Hauteur_Chars[$pt]; - } else { - return 100; // There is a prob.. - } - } - - /** - * Set format - * - * @param PDF &$pdf PDF reference - * @param string $format Format - * @return void - */ - function _Set_Format(&$pdf, $format) - { - $this->_Metric = $format['metric']; - $this->_Avery_Name = $format['name']; - $this->_Avery_Code = $format['code']; - $this->_Margin_Left = $this->_Convert_Metric($format['marginLeft'], $this->_Metric, $this->_Metric_Doc); - $this->_Margin_Top = $this->_Convert_Metric($format['marginTop'], $this->_Metric, $this->_Metric_Doc); - $this->_X_Space = $this->_Convert_Metric($format['SpaceX'], $this->_Metric, $this->_Metric_Doc); - $this->_Y_Space = $this->_Convert_Metric($format['SpaceY'], $this->_Metric, $this->_Metric_Doc); - $this->_X_Number = $format['NX']; - $this->_Y_Number = $format['NY']; - $this->_Width = $this->_Convert_Metric($format['width'], $this->_Metric, $this->_Metric_Doc); - $this->_Height = $this->_Convert_Metric($format['height'], $this->_Metric, $this->_Metric_Doc); - $this->Set_Char_Size($pdf, $format['font-size']); - } - - - /** - * Function to build PDF on disk, then output on HTTP strem. - * - * @param array $arrayofrecords Array of record informations (array('textleft'=>,'textheader'=>, ..., 'id'=>,'photo'=>) - * @param Translate $outputlangs Lang object for output language - * @param string $srctemplatepath Full path of source filename for generator using a template file - * @param string $outputdir Output directory for pdf file - * @return int 1=OK, 0=KO - */ - function write_file($arrayofrecords,$outputlangs,$srctemplatepath,$outputdir='') - { - global $user,$conf,$langs,$mysoc,$_Avery_Labels; - - $this->code=$srctemplatepath; - $this->Tformat = $_Avery_Labels[$this->code]; - if (empty($this->Tformat)) { dol_print_error('','ErrorBadTypeForCard'.$this->code); exit; } - $this->type = 'pdf'; - $this->format = $this->Tformat['paper-size']; - - if (! is_object($outputlangs)) $outputlangs=$langs; - // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO - if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1'; - - $outputlangs->load("main"); - $outputlangs->load("dict"); - $outputlangs->load("companies"); - $outputlangs->load("admin"); - - $title=$outputlangs->transnoentities('Labels'); - $keywords=$title." ".$outputlangs->convToOutputCharset($mysoc->name); - - $dir = (empty($outputdir)?$conf->adherent->dir_temp:$outputdir); - $filename='tmp_address_sheet.pdf'; - $file = $dir."/".$filename; - - if (! file_exists($dir)) - { - if (dol_mkdir($dir) < 0) - { - $this->error=$langs->trans("ErrorCanNotCreateDir",$dir); - return 0; - } - } - - $pdf=pdf_getInstance($this->format,$this->Tformat['metric']); - - if (class_exists('TCPDF')) - { - $pdf->setPrintHeader(false); - $pdf->setPrintFooter(false); - } - $pdf->SetFont(pdf_getPDFFont($outputlangs)); - - $pdf->SetTitle($title); - $pdf->SetSubject($title); - $pdf->SetCreator("Dolibarr ".DOL_VERSION); - $pdf->SetAuthor($outputlangs->convToOutputCharset($user->getFullName($outputlangs))); - $pdf->SetKeyWords($keywords); - if (! empty($conf->global->MAIN_DISABLE_PDF_COMPRESSION)) $pdf->SetCompression(false); - - $pdf->SetMargins(0,0); - $pdf->SetAutoPageBreak(false); - - $this->_Metric_Doc = $this->Tformat['metric']; - // Permet de commencer l'impression de l'etiquette desiree dans le cas ou la page a deja servie - $posX=1; - $posY=1; - if ($posX > 0) $posX--; else $posX=0; - if ($posY > 0) $posY--; else $posY=0; - $this->_COUNTX = $posX; - $this->_COUNTY = $posY; - $this->_Set_Format($pdf, $this->Tformat); - - - $pdf->Open(); - $pdf->AddPage(); - - - // Add each record - foreach($arrayofrecords as $val) - { - // imprime le texte specifique sur la carte - $this->Add_PDF_card($pdf,$val['textleft'],$val['textheader'],$val['textfooter'],$langs,$val['textright'],$val['photo']); - } - - //$pdf->SetXY(10, 295); - //$pdf->Cell($this->_Width, $this->_Line_Height, 'XXX',0,1,'C'); - - - // Output to file - $pdf->Output($file,'F'); - - if (! empty($conf->global->MAIN_UMASK)) - @chmod($file, octdec($conf->global->MAIN_UMASK)); - - - - // Output to http stream - clearstatcache(); - - $attachment=true; - if (! empty($conf->global->MAIN_DISABLE_FORCE_SAVEAS)) $attachment=false; - $type=dol_mimetype($filename); - - //if ($encoding) header('Content-Encoding: '.$encoding); - if ($type) header('Content-Type: '.$type); - if ($attachment) header('Content-Disposition: attachment; filename="'.$filename.'"'); - else header('Content-Disposition: inline; filename="'.$filename.'"'); - - // Ajout directives pour resoudre bug IE - header('Cache-Control: Public, must-revalidate'); - header('Pragma: public'); - - readfile($file); - - return 1; - } -} From 701c85620b5d2dbe7b3d6fddce6cc75d7074af14 Mon Sep 17 00:00:00 2001 From: Francis Appels Date: Sun, 3 May 2015 10:00:11 +0200 Subject: [PATCH 03/10] Extend sticker classes from abstract class Extend member and printsheet sticker printer classes from new abstract commonsticker generator --- .../modules/member/doc/pdf_standard.class.php | 232 ++---------------- .../doc/pdf_standardlabel.class.php | 46 ++-- 2 files changed, 30 insertions(+), 248 deletions(-) diff --git a/htdocs/core/modules/member/doc/pdf_standard.class.php b/htdocs/core/modules/member/doc/pdf_standard.class.php index 9268a10f3c4..7df37a7c05c 100644 --- a/htdocs/core/modules/member/doc/pdf_standard.class.php +++ b/htdocs/core/modules/member/doc/pdf_standard.class.php @@ -4,6 +4,7 @@ * Copyright (C) 2001-2003 Rodolphe Quiedeville * Copyright (C) 2002-2003 Jean-Louis Bergamo * Copyright (C) 2006-2013 Laurent Destailleur + * Copyright (C) 2015 Francis Appels * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,106 +20,38 @@ * along with this program. If not, see . */ -/* Inspire de PDF_Label - * PDF_Label - PDF label editing - * @package PDF_Label - * @author Laurent PASSEBECQ - * @copyright 2003 Laurent PASSEBECQ - * disponible ici : http://www.fpdf.org/fr/script/script29.php - */ - -//------------------------------------------------------------------- -// VERSIONS : -// 1.0 : Initial release -// 1.1 : + : Added unit in the constructor -// + : Now Positions start @ (1,1).. then the first image @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 printing in millimiter by setting unit to 'mm' in constructor. -// Added some labels : -// 5160, 5161, 5162, 5163,5164 : thanx to Al Canton : acanton@adams-blake.com -// 8600 : thanx to Kunal Walia : kunal@u.washington.edu -// + : Added 3mm to the position of labels to avoid errors -//////////////////////////////////////////////////// - /** * \file htdocs/core/modules/member/doc/pdf_standard.class.php * \ingroup member * \brief Fichier de la classe permettant d'editer au format PDF des etiquettes au format Avery ou personnalise */ -require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php'; -require_once DOL_DOCUMENT_ROOT.'/core/lib/format_cards.lib.php'; - +require_once DOL_DOCUMENT_ROOT.'/core/class/commonstickergenerator.class.php'; /** * Class to generate stick sheet with format Avery or other personalised */ -class pdf_standard +class pdf_standard extends CommonStickerGenerator { - var $code; // Code of format - var $format; // Array with informations - - // Proprietes privees - var $_Avery_Name = ''; // Nom du format de l'etiquette - var $_Margin_Left = 0; // Marge de gauche de l'etiquette - var $_Margin_Top = 0; // marge en haut de la page avant la premiere etiquette - var $_X_Space = 0; // Espace horizontal entre 2 bandes d'etiquettes - var $_Y_Space = 0; // Espace vertical entre 2 bandes d'etiquettes - var $_X_Number = 0; // NX Nombre d'etiquettes sur la largeur de la page - var $_Y_Number = 0; // NY Nombre d'etiquettes sur la hauteur de la page - var $_Width = 0; // Largeur de chaque etiquette - var $_Height = 0; // Hauteur de chaque etiquette - var $_Char_Size = 10; // Hauteur des caracteres - var $_Line_Height = 10; // Hauteur par defaut d'une ligne - var $_Metric = 'mm'; // Type of metric.. Will help to calculate good values - var $_Metric_Doc = 'mm'; // Type of metric for the doc.. - - var $_COUNTX = 1; - var $_COUNTY = 1; - var $_First = 1; - - /** - * Constructor + * Output a sticker on page at position _COUNTX, _COUNTY (_COUNTX and _COUNTY start from 0) * - * @param DoliDB $db Database handler + * @param PDF &$pdf PDF reference + * @param Translate $outputlangs Output langs + * @param array $param Associative array containing label content and optional parameters + * @return void */ - function __construct($db) - { - $this->db = $db; - } - - - /** - * Methode qui permet de modifier la taille des caracteres - * Cela modiera aussi l'espace entre chaque ligne - * - * @param PDF $pdf PDF - * @param int $pt point - * @return void - */ - function Set_Char_Size(&$pdf,$pt) - { - if ($pt > 3) { - $this->_Char_Size = $pt; - $this->_Line_Height = $this->_Get_Height_Chars($pt); - $pdf->SetFont('','',$pt); - } - } - - - /** + function addSticker(&$pdf,$outputlangs,$param) { + // use this method in future refactoring + } + + /** * Output a sticker on page at position _COUNTX, _COUNTY (_COUNTX and _COUNTY start from 0) * - %LOGO% is replace with company logo * - %PHOTO% is replace with photo provided as parameter * - * @param PDF $pdf PDF + * @param PDF &$pdf PDF * @param string $textleft Text left * @param string $header Header * @param string $footer Footer @@ -297,143 +230,6 @@ class pdf_standard } } - /** - * Print dot line - * - * @param PDF $pdf PDF - * @param int $x1 X1 - * @param int $y1 Y1 - * @param int $x2 X2 - * @param int $y2 Y2 - * @param int $epaisseur Epaisseur - * @param int $nbPointilles Nb pointilles - * @return void - */ - function _Pointille(&$pdf,$x1=0,$y1=0,$x2=210,$y2=297,$epaisseur=1,$nbPointilles=15) - { - $pdf->SetLineWidth($epaisseur); - $length=abs($x1-$x2); - $hauteur=abs($y1-$y2); - if($length>$hauteur) { - $Pointilles=($length/$nbPointilles)/2; // taille des pointilles - } - else { - $Pointilles=($hauteur/$nbPointilles)/2; - } - for($i=$x1;$i<=$x2;$i+=$Pointilles+$Pointilles) { - for($j=$i;$j<=($i+$Pointilles);$j++) { - if($j<=($x2-1)) { - $pdf->Line($j,$y1,$j+1,$y1); // on trace le pointill? du haut, point par point - $pdf->Line($j,$y2,$j+1,$y2); // on trace le pointill? du bas, point par point - } - } - } - for($i=$y1;$i<=$y2;$i+=$Pointilles+$Pointilles) { - for($j=$i;$j<=($i+$Pointilles);$j++) { - if($j<=($y2-1)) { - $pdf->Line($x1,$j,$x1,$j+1); // on trace le pointill? du haut, point par point - $pdf->Line($x2,$j,$x2,$j+1); // on trace le pointill? du bas, point par point - } - } - } - } - - /** - * Fonction realisant une croix aux 4 coins des cartes - * - * @param PDF $pdf PDF - * @param int $x1 X1 - * @param int $y1 Y1 - * @param int $x2 X2 - * @param int $y2 Y2 - * @param int $epaisseur Epaisseur - * @param int $taille Size - * @return void - */ - function _Croix(&$pdf,$x1=0,$y1=0,$x2=210,$y2=297,$epaisseur=1,$taille=4) - { - $pdf->SetDrawColor(192,192,192); - - $pdf->SetLineWidth($epaisseur); - $lg=$taille/2; - // croix haut gauche - $pdf->Line($x1,$y1-$lg,$x1,$y1+$lg); - $pdf->Line($x1-$lg,$y1,$x1+$lg,$y1); - // croix bas gauche - $pdf->Line($x1,$y2-$lg,$x1,$y2+$lg); - $pdf->Line($x1-$lg,$y2,$x1+$lg,$y2); - // croix haut droit - $pdf->Line($x2,$y1-$lg,$x2,$y1+$lg); - $pdf->Line($x2-$lg,$y1,$x2+$lg,$y1); - // croix bas droit - $pdf->Line($x2,$y2-$lg,$x2,$y2+$lg); - $pdf->Line($x2-$lg,$y2,$x2+$lg,$y2); - - $pdf->SetDrawColor(0,0,0); - } - - /** - * Convert units (in to mm, mm to in) - * $src and $dest must be 'in' or 'mm' - * - * @param int $value value - * @param string $src from - * @param string $dest to - * @return float value value after conversion - */ - function _Convert_Metric ($value, $src, $dest) - { - if ($src != $dest) { - $tab['in'] = 39.37008; - $tab['mm'] = 1000; - return $value * $tab[$dest] / $tab[$src]; - } else { - return $value; - } - } - - /** - * Give the height for a char size given. - * - * @param int $pt Point - * @return int Height chars - */ - function _Get_Height_Chars($pt) - { - // Tableau de concordance entre la hauteur des caracteres et de l'espacement entre les lignes - $_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); - if (in_array($pt, array_keys($_Table_Hauteur_Chars))) { - return $_Table_Hauteur_Chars[$pt]; - } else { - return 100; // There is a prob.. - } - } - - /** - * Set format - * - * @param PDF $pdf PDF - * @param string $format Format - * @return void - */ - function _Set_Format(&$pdf, $format) - { - - $this->_Metric = $format['metric']; - $this->_Avery_Name = $format['name']; - $this->_Avery_Code = $format['code']; - $this->_Margin_Left = $this->_Convert_Metric($format['marginLeft'], $this->_Metric, $this->_Metric_Doc); - $this->_Margin_Top = $this->_Convert_Metric($format['marginTop'], $this->_Metric, $this->_Metric_Doc); - $this->_X_Space = $this->_Convert_Metric($format['SpaceX'], $this->_Metric, $this->_Metric_Doc); - $this->_Y_Space = $this->_Convert_Metric($format['SpaceY'], $this->_Metric, $this->_Metric_Doc); - $this->_X_Number = $format['NX']; - $this->_Y_Number = $format['NY']; - $this->_Width = $this->_Convert_Metric($format['width'], $this->_Metric, $this->_Metric_Doc); - $this->_Height = $this->_Convert_Metric($format['height'], $this->_Metric, $this->_Metric_Doc); - $this->Set_Char_Size($pdf, $format['font-size']); - } - - /** * Function to build PDF on disk, then output on HTTP strem. * diff --git a/htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php b/htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php index e8eaeabf12e..d9d9b825a4b 100644 --- a/htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php +++ b/htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php @@ -20,45 +20,31 @@ * along with this program. If not, see . */ -/* Inspire de PDF_Label - * PDF_Label - PDF label editing - * @package PDF_Label - * @author Laurent PASSEBECQ - * @copyright 2003 Laurent PASSEBECQ - * disponible ici : http://www.fpdf.org/fr/script/script29.php - */ - -//------------------------------------------------------------------- -// VERSIONS : -// 1.0 : Initial release -// 1.1 : + : Added unit in the constructor -// + : Now Positions start @ (1,1).. then the first image @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 printing in millimiter by setting unit to 'mm' in constructor. -// Added some labels : -// 5160, 5161, 5162, 5163,5164 : thanx to Al Canton : acanton@adams-blake.com -// 8600 : thanx to Kunal Walia : kunal@u.washington.edu -// + : Added 3mm to the position of labels to avoid errors -//////////////////////////////////////////////////// - /** * \file htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php * \ingroup core * \brief Fichier de la classe permettant d'editer au format PDF des etiquettes au format Avery ou personnalise */ -require_once DOL_DOCUMENT_ROOT.'/core/class/pdf_label.class.php'; +require_once DOL_DOCUMENT_ROOT.'/core/class/commonstickergenerator.class.php'; /** * Class to generate stick sheet with format Avery or other personalised */ -class pdf_standardlabel extends pdf_label +class pdf_standardlabel extends CommonStickerGenerator { - + /** + * Output a sticker on page at position _COUNTX, _COUNTY (_COUNTX and _COUNTY start from 0) + * + * @param PDF &$pdf PDF reference + * @param Translate $outputlangs Output langs + * @param array $param Associative array containing label content and optional parameters + * @return void + */ + function addSticker(&$pdf,$outputlangs,$param) { + // use this method in future refactoring + } + /** * Output a sticker on page at position _COUNTX, _COUNTY (_COUNTX and _COUNTY start from 0) * - %LOGO% is replace with company logo @@ -73,7 +59,7 @@ class pdf_standardlabel extends pdf_label * @param string $photo Photo (full path to image file used as replacement for key %PHOTOS% into left, right, header or footer text) * @return void */ - function Add_PDF_card(&$pdf,$textleft,$header,$footer,$outputlangs,$textright='',$photo='') + function Add_PDF_label(&$pdf,$textleft,$header,$footer,$outputlangs,$textright='',$photo='') { global $mysoc,$conf,$langs; global $forceimgscalewidth,$forceimgscaleheight; @@ -320,7 +306,7 @@ class pdf_standardlabel extends pdf_label foreach($arrayofrecords as $val) { // imprime le texte specifique sur la carte - $this->Add_PDF_card($pdf,$val['textleft'],$val['textheader'],$val['textfooter'],$langs,$val['textright'],$val['photo']); + $this->Add_PDF_label($pdf,$val['textleft'],$val['textheader'],$val['textfooter'],$langs,$val['textright'],$val['photo']); } //$pdf->SetXY(10, 295); From 96dfdfeb73e606043cd84f626e7b7c6044812646 Mon Sep 17 00:00:00 2001 From: Francis Appels Date: Sun, 3 May 2015 10:05:59 +0200 Subject: [PATCH 04/10] New tcpdf barcode label printing class New tcpdf barcode label printing class and add parameters to printsheet for using this class. Add parameter to modules_xxx.php functions to pass printing templete class to use --- htdocs/barcode/printsheet.php | 69 ++-- htdocs/core/modules/member/modules_cards.php | 17 +- .../printsheet/doc/pdf_tcpdflabel.class.php | 385 ++++++++++++++++++ .../modules/printsheet/modules_labels.php | 12 +- 4 files changed, 441 insertions(+), 42 deletions(-) create mode 100644 htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php diff --git a/htdocs/barcode/printsheet.php b/htdocs/barcode/printsheet.php index fd89390f3db..7cd539bf323 100644 --- a/htdocs/barcode/printsheet.php +++ b/htdocs/barcode/printsheet.php @@ -123,7 +123,7 @@ if ($action == 'builddoc') $code=$forbarcode; $generator=$stdobject->barcode_type_coder; // coder (loaded by fetch_barcode). Engine. $encoding=strtoupper($stdobject->barcode_type_code); // code (loaded by fetch_barcode). Example 'ean', 'isbn', ... - $barcodeimage=$conf->barcode->dir_temp.'/barcode_'.$code.'_'.$encoding.'.png'; + $diroutput=$conf->barcode->dir_temp; dol_mkdir($diroutput); @@ -142,27 +142,36 @@ if ($action == 'builddoc') $result=@include_once $newdir.$generator.'.modules.php'; if ($result) break; } - - // Load barcode class - $classname = "mod".ucfirst($generator); - $module = new $classname($db); - if ($module->encodingIsSupported($encoding)) - { - dol_delete_file($barcodeimage); - // File is created with full name $barcodeimage = $conf->barcode->dir_temp.'/barcode_'.$code.'_'.$encoding.'.png'; - $result=$module->writeBarCode($code,$encoding,'Y',4); - - if ($result <= 0 || ! dol_is_file($barcodeimage)) - { - $error++; - setEventMessage('Failed to generate image file of barcode for code='.$code.' encoding='.$encoding.' file='.basename($barcodeimage), 'errors'); - } - } - else - { - $error++; - setEventMessage("Error, encoding ".$encoding." is not supported by encoder ".$generator.'. You must choose another barcode type or install a barcode generation engine that support '.$encoding, 'errors'); - } + + // Load barcode class for generating barcode image + $classname = "mod".ucfirst($generator); + $module = new $classname($db); + if ($generator != 'tcpdfbarcode') { + $template = 'standardlabel'; + $is2d = false; + if ($module->encodingIsSupported($encoding)) + { + $barcodeimage=$conf->barcode->dir_temp.'/barcode_'.$code.'_'.$encoding.'.png'; + dol_delete_file($barcodeimage); + // File is created with full name $barcodeimage = $conf->barcode->dir_temp.'/barcode_'.$code.'_'.$encoding.'.png'; + $result=$module->writeBarCode($code,$encoding,'Y',4); + + if ($result <= 0 || ! dol_is_file($barcodeimage)) + { + $error++; + setEventMessage('Failed to generate image file of barcode for code='.$code.' encoding='.$encoding.' file='.basename($barcodeimage), 'errors'); + } + } + else + { + $error++; + setEventMessage("Error, encoding ".$encoding." is not supported by encoder ".$generator.'. You must choose another barcode type or install a barcode generation engine that support '.$encoding, 'errors'); + } + } else { + $template = 'tcpdflabel'; + $encoding = $module->getTcpdfEncodingType($encoding); //convert to TCPDF compatible encoding types + $is2d = $module->is2d; + } } if (! $error) @@ -188,11 +197,12 @@ if ($action == 'builddoc') // For labels if ($mode == 'label') { - $txtforsticker="%PHOTO%"; - $textleft=make_substitutions($txtforsticker, $substitutionarray); - $textheader=''; - $textfooter=''; - $textright=''; + + $txtforsticker="%PHOTO%"; // Photo will be barcode image, %BARCODE% posible when using TCPDF generator + $textleft=make_substitutions((empty($conf->global->BARCODE_LABEL_LEFT_TEXT)?$txtforsticker:$conf->global->BARCODE_LABEL_LEFT_TEXT), $substitutionarray); + $textheader=make_substitutions((empty($conf->global->BARCODE_LABEL_HEADER_TEXT)?'':$conf->global->BARCODE_LABEL_HEADER_TEXT), $substitutionarray); + $textfooter=make_substitutions((empty($conf->global->BARCODE_LABEL_FOOTER_TEXT)?'':$conf->global->BARCODE_LABEL_FOOTER_TEXT), $substitutionarray); + $textright=make_substitutions((empty($conf->global->BARCODE_LABEL_RIGHT_TEXT)?'':$conf->global->BARCODE_LABEL_RIGHT_TEXT), $substitutionarray); $forceimgscalewidth=(empty($conf->global->BARCODE_FORCEIMGSCALEWIDTH)?1:$conf->global->BARCODE_FORCEIMGSCALEWIDTH); $forceimgscaleheight=(empty($conf->global->BARCODE_FORCEIMGSCALEHEIGHT)?1:$conf->global->BARCODE_FORCEIMGSCALEHEIGHT); @@ -203,6 +213,9 @@ if ($action == 'builddoc') 'textheader'=>$textheader, 'textfooter'=>$textfooter, 'textright'=>$textright, + 'code'=>$code, + 'encoding'=>$encoding, + 'is2d'=>$is2d, 'photo'=>$barcodeimage // Photo must be a file that exists with format supported by TCPDF ); } @@ -222,7 +235,7 @@ if ($action == 'builddoc') { $mesg=$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("DescADHERENT_ETIQUETTE_TYPE")); } - if (! $mesg) $result=members_label_pdf_create($db, $arrayofmembers, $modellabel, $outputlangs, $diroutput); + if (! $mesg) $result=members_label_pdf_create($db, $arrayofmembers, $modellabel, $outputlangs, $diroutput, $template); } if ($result <= 0) diff --git a/htdocs/core/modules/member/modules_cards.php b/htdocs/core/modules/member/modules_cards.php index d7fa0cbaae1..ab5604f2f99 100644 --- a/htdocs/core/modules/member/modules_cards.php +++ b/htdocs/core/modules/member/modules_cards.php @@ -65,10 +65,12 @@ class ModelePDFCards * @param DoliDB $db Database handler * @param array $arrayofmembers Array of members * @param string $modele Force modele to use ('' to not force) - * @param Translate $outputlangs Objet langs to use for translation + * @param Translate $outputlangs Object langs to use for translation + * @param string $outputdir Output directory + * @param string $template pdf generenate document class to use default 'standard' * @return int <0 if KO, >0 if OK */ -function members_card_pdf_create($db, $arrayofmembers, $modele, $outputlangs) +function members_card_pdf_create($db, $arrayofmembers, $modele, $outputlangs, $outputdir='', $template='standard') { global $conf,$langs; $langs->load("members"); @@ -97,13 +99,12 @@ function members_card_pdf_create($db, $arrayofmembers, $modele, $outputlangs) } } else $code=$modele; - $modele='standard'; - + // If selected modele is a filename template (then $modele="modelname:filename") - $tmp=explode(':',$modele,2); + $tmp=explode(':',$template,2); if (! empty($tmp[1])) { - $modele=$tmp[0]; + $template=$tmp[0]; $srctemplatepath=$tmp[1]; } else $srctemplatepath=$code; @@ -116,14 +117,14 @@ function members_card_pdf_create($db, $arrayofmembers, $modele, $outputlangs) { foreach(array('doc','pdf') as $prefix) { - $file = $prefix."_".$modele.".class.php"; + $file = $prefix."_".$template.".class.php"; // On verifie l'emplacement du modele $file=dol_buildpath($reldir."core/modules/member/doc/".$file,0); if (file_exists($file)) { $filefound=1; - $classname=$prefix.'_'.$modele; + $classname=$prefix.'_'.$template; break; } } diff --git a/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php b/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php new file mode 100644 index 00000000000..e73c112d26e --- /dev/null +++ b/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php @@ -0,0 +1,385 @@ + + * Copyright (C) 2002-2003 Jean-Louis Bergamo + * Copyright (C) 2006-2013 Laurent Destailleur + * Copyright (C) 2015 Francis Appels + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/** + * \file htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php + * \ingroup core + * \brief Fichier de la classe permettant d'editer au format PDF des etiquettes au format Avery ou personnalise + */ + +require_once DOL_DOCUMENT_ROOT.'/core/class/commonstickergenerator.class.php'; + +/** + * Class to generate stick sheet with format Avery or other personalised + */ +class pdf_tcpdflabel extends CommonStickerGenerator +{ + // define 1d barcode style + private $_style1d = array( + 'position' => '', + 'align' => 'C', + 'stretch' => false, + 'fitwidth' => true, + 'cellfitalign' => '', + 'border' => false, + 'hpadding' => 'auto', + 'vpadding' => 'auto', + 'fgcolor' => array(0,0,0), + 'bgcolor' => false, + 'text' => true, + 'font' => 'helvetica', + 'fontsize' => 8, + 'stretchtext' => 4 + ); + + // set style for 2d barcode + private $_style2d = array( + 'border' => false, + 'vpadding' => 'auto', + 'hpadding' => 'auto', + 'fgcolor' => array(0,0,0), + 'bgcolor' => false, + 'module_width' => 1, // width of a single module in points + 'module_height' => 1 // height of a single module in points + ); + + private $_align2d = 'N'; + + private $_xres = 0.4; + + /** + * write barcode to pdf + * + * @param PDF &$pdf PDF reference + * @param string $code code to print + * @param string $encoding type of barcode + * @param boolean $is2d true if 2d barcode + * @param int $x x position in user units + * @param int $y y position in user units + * @param int $w width in user units + * @param int $h height in user units + */ + private function writeBarcode(&$pdf, $code, $encoding, $is2d, $x, $y, $w, $h) + { + if ($is2d) { + $pdf->write2DBarcode($code, $encoding, $x, $y, $w, $h, $this->_style2d, $this->_align2d); + } else { + $pdf->write1DBarcode($code, $encoding, $x, $y, $w, $h, $this->_xres, $this->_style1d); + } + } + + /** + * Output a sticker on page at position _COUNTX, _COUNTY (_COUNTX and _COUNTY start from 0) + * + * @param PDF &$pdf PDF reference + * @param Translate $outputlangs Output langs + * @param array $param Associative array containing label content and optional parameters + * @return void + */ + function addSticker(&$pdf,$outputlangs,$param) + { + global $mysoc,$conf; + + $textleft = $param['textleft']; + $header = $param['textheader']; + $footer = $param['textfooter']; + $textright = $param['textright']; + $code = $param['code']; + $encoding = $param['encoding']; + $is2d = $param['is2d']; + + + + // We are in a new page, then we must add a page + if (($this->_COUNTX ==0) && ($this->_COUNTY==0) and (!$this->_First==1)) { + $pdf->AddPage(); + } + $this->_First=0; + $_PosX = $this->_Margin_Left+($this->_COUNTX*($this->_Width+$this->_X_Space)); + $_PosY = $this->_Margin_Top+($this->_COUNTY*($this->_Height+$this->_Y_Space)); + + // Define logo + $logo=$conf->mycompany->dir_output.'/logos/'.$mysoc->logo; + if (! is_readable($logo)) + { + $logo=''; + if (! empty($mysoc->logo_small) && is_readable($conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_small)) + { + $logo=$conf->mycompany->dir_output.'/logos/thumbs/'.$mysoc->logo_small; + } + elseif (! empty($mysoc->logo) && is_readable($conf->mycompany->dir_output.'/logos/'.$mysoc->logo)) + { + $logo=$conf->mycompany->dir_output.'/logos/'.$mysoc->logo; + } + } + + $xleft = 2; + $ytop = 2; + + // Top + if ($header!='') + { + $pdf->SetXY($_PosX+$xleft, $_PosY+1); // Only 1 mm and not ytop for top text + $pdf->Cell($this->_Width-2*$xleft, $this->_Line_Height, $outputlangs->convToOutputCharset($header),0,1,'C'); + } + + $ytop += (empty($header)?0:(1+$this->_Line_Height)); + + // Define widthtouse and heighttouse + $pageMargins = $pdf->getMargins(); + $maxwidthtouse = round($this->_Width - 2*$xleft); + $maxheighttouse = round($this->_Height - 2*$ytop); + $maxheighttouse -= (empty($footer)?0:(1+$this->_Line_Height)); + $defaultratio = ($maxwidthtouse/$maxheighttouse); + $widthtouse = $maxwidthtouse; + $heighttouse = $maxheighttouse; + $logoHeight = $heighttouse; + $logoWidth = $heighttouse; + + //var_dump($this->_Width.'x'.$this->_Height.' with border and scale '.$imgscale.' => max '.$maxwidthtouse.'x'.$maxheighttouse.' => We use '.$widthtouse.'x'.$heighttouse);exit; + + // Center + if ($textright=='') // Only a left part + { + // Output left area + if ($textleft == '%LOGO%' && $logo) $pdf->Image($logo, $_PosX+$xleft, $_PosY+$ytop, 0, $logoHeight); + else if ($code && !empty($encoding)) + { + $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+$xleft, $_PosY+$ytop, $widthtouse, $heighttouse); + } + else + { + $pdf->SetXY($_PosX+$xleft, $_PosY+$ytop); + $pdf->MultiCell($this->_Width, $this->_Line_Height, $outputlangs->convToOutputCharset($textleft),0,'L'); + } + } + else if ($textleft!='' && $textright!='') // left and right part + { + if (($textleft == '%LOGO%' || $textleft == '%PHOTO%' || $textleft == '%BARCODE%') && !strstr($textright, '%') ) // left part logo/barcode right part text + { + if ($textleft == '%LOGO%' && $logo) $pdf->Image($logo, $_PosX+$xleft, $_PosY+$ytop, $widthtouse/2, 0); + else if ($code && !empty($encoding)) + { + $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+$xleft, $_PosY+$ytop, $widthtouse/2, $heighttouse); + } + $pdf->SetXY($_PosX+($widthtouse/2), $_PosY+$ytop); + $pdf->MultiCell($widthtouse/2, $this->_Line_Height, $outputlangs->convToOutputCharset($textright), 0, 'R'); + } + else if (($textright == '%LOGO%' || $textright == '%PHOTO%' || $textright == '%BARCODE%') && !strstr($textleft, '%')) // right part logo/barcode left part text + { + if ($textright == '%LOGO%' && $logo) $pdf->Image($logo, $_PosX+($widthtouse/2), $_PosY+$ytop, $widthtouse/2, 0); + else if ($code && !empty($encoding)) + { + $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+($widthtouse/2), $_PosY+$ytop, $widthtouse/2, $heighttouse); + } + $pdf->SetXY($_PosX+$xleft, $_PosY+$ytop); + $pdf->MultiCell($widthtouse/2, $this->_Line_Height, $outputlangs->convToOutputCharset($textleft),0,'L'); + } + else if ($textleft == '%LOGO%') // left part logo right part text/barcode + { + if ($logo) $pdf->Image($logo, $_PosX+$xleft, $_PosY+$ytop, 0, $logoHeight); + if ($code && !empty($encoding)) + { + $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+$xleft+$logoWidth+1, $_PosY+$ytop, $widthtouse-$logoWidth-1, $heighttouse); + } else { + $pdf->SetXY($_PosX+$xleft+$logoWidth+1, $_PosY+$ytop); + $pdf->MultiCell($widthtouse-$logoWidth1-1, $this->_Line_Height, $outputlangs->convToOutputCharset($textright),0,'R'); + } + } + else if ($textright == '%LOGO%') // right part logo left part text/barcode + { + if ($logo) $pdf->Image($logo, $_PosX+$xleft+$widthtouse-$logoWidth+1, $_PosY+$ytop, 0, $logoHeight); + if ($code && !empty($encoding)) + { + $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+$xleft, $_PosY+$ytop, $widthtouse-$logoWidth-1, $heighttouse); + } else { + $pdf->SetXY($_PosX+$xleft, $_PosY+$ytop); + $pdf->MultiCell($widthtouse-$logoWidth-1, $this->_Line_Height, $outputlangs->convToOutputCharset($textleft),0,'L'); + } + } + else // text on halft left and text on half right + { + $pdf->SetXY($_PosX+$xleft, $_PosY+$ytop); + $pdf->MultiCell(round($this->_Width/2), $this->_Line_Height, $outputlangs->convToOutputCharset($textleft),0,'L'); + $pdf->SetXY($_PosX+round($this->_Width/2), $_PosY+$ytop); + $pdf->MultiCell(round($this->_Width/2)-2, $this->_Line_Height, $outputlangs->convToOutputCharset($textright),0,'R'); + } + } + else // Only a right part + { + // Output right area + if ($textright == '%LOGO%' && $logo) $pdf->Image($logo, $_PosX+$this->_Width-$widthtouse-$xleft, $_PosY+$ytop, 0, $logoHeight); + else if ($code && !empty($encoding)) + { + $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+$this->_Width-$widthtouse-$xleft, $_PosY+$ytop, $widthtouse, $heighttouse); + } + else + { + $pdf->SetXY($_PosX+$xleft, $_PosY+$ytop); + $pdf->MultiCell($this->_Width-$xleft, $this->_Line_Height, $outputlangs->convToOutputCharset($textright),0,'R'); + } + } + + // Bottom + if ($footer!='') + { + $pdf->SetXY($_PosX, $_PosY+$this->_Height-$this->_Line_Height-1); + $pdf->Cell($this->_Width, $this->_Line_Height, $outputlangs->convToOutputCharset($footer),0,1,'C'); + } + //print "$_PosY+$this->_Height-$this->_Line_Height-1
\n"; + + $this->_COUNTY++; + + if ($this->_COUNTY == $this->_Y_Number) { + // Si on est en bas de page, on remonte le 'curseur' de position + $this->_COUNTX++; + $this->_COUNTY=0; + } + + if ($this->_COUNTX == $this->_X_Number) { + // Si on est en bout de page, alors on repart sur une nouvelle page + $this->_COUNTX=0; + $this->_COUNTY=0; + } + } + + + + + /** + * Function to build PDF on disk, then output on HTTP strem. + * + * @param array $arrayofrecords Array of record informations (array('textleft'=>,'textheader'=>, ..., 'id'=>,'photo'=>) + * @param Translate $outputlangs Lang object for output language + * @param string $srctemplatepath Full path of source filename for generator using a template file + * @param string $outputdir Output directory for pdf file + * @return int 1=OK, 0=KO + */ + function write_file($arrayofrecords,$outputlangs,$srctemplatepath,$outputdir='') + { + global $user,$conf,$langs,$mysoc,$_Avery_Labels; + + $this->code=$srctemplatepath; + $this->Tformat = $_Avery_Labels[$this->code]; + if (empty($this->Tformat)) { dol_print_error('','ErrorBadTypeForCard'.$this->code); exit; } + $this->type = 'pdf'; + $this->format = $this->Tformat['paper-size']; + + if (! is_object($outputlangs)) $outputlangs=$langs; + // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO + if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1'; + + $outputlangs->load("main"); + $outputlangs->load("dict"); + $outputlangs->load("companies"); + $outputlangs->load("admin"); + + $title=$outputlangs->transnoentities('Labels'); + $keywords=$title." ".$outputlangs->convToOutputCharset($mysoc->name); + + $dir = (empty($outputdir)?$conf->adherent->dir_temp:$outputdir); + $filename='tmp_address_sheet.pdf'; + $file = $dir."/".$filename; + + if (! file_exists($dir)) + { + if (dol_mkdir($dir) < 0) + { + $this->error=$langs->trans("ErrorCanNotCreateDir",$dir); + return 0; + } + } + + $pdf=pdf_getInstance($this->format,$this->Tformat['metric']); + + if (class_exists('TCPDF')) + { + $pdf->setPrintHeader(false); + $pdf->setPrintFooter(false); + } + $pdf->SetFont(pdf_getPDFFont($outputlangs)); + + $pdf->SetTitle($title); + $pdf->SetSubject($title); + $pdf->SetCreator("Dolibarr ".DOL_VERSION); + $pdf->SetAuthor($outputlangs->convToOutputCharset($user->getFullName($outputlangs))); + $pdf->SetKeyWords($keywords); + if (! empty($conf->global->MAIN_DISABLE_PDF_COMPRESSION)) $pdf->SetCompression(false); + + $pdf->SetMargins(0,0); + $pdf->SetAutoPageBreak(false); + + $this->_Metric_Doc = $this->Tformat['metric']; + // Permet de commencer l'impression de l'etiquette desiree dans le cas ou la page a deja servie + $posX=1; + $posY=1; + if ($posX > 0) $posX--; else $posX=0; + if ($posY > 0) $posY--; else $posY=0; + $this->_COUNTX = $posX; + $this->_COUNTY = $posY; + $this->_Set_Format($pdf, $this->Tformat); + + + $pdf->Open(); + $pdf->AddPage(); + + + // Add each record + foreach($arrayofrecords as $val) + { + // imprime le texte specifique sur la carte + $this->addSticker($pdf, $outputlangs, $val); + } + + //$pdf->SetXY(10, 295); + //$pdf->Cell($this->_Width, $this->_Line_Height, 'XXX',0,1,'C'); + + + // Output to file + $pdf->Output($file,'F'); + + if (! empty($conf->global->MAIN_UMASK)) + @chmod($file, octdec($conf->global->MAIN_UMASK)); + + + + // Output to http stream + clearstatcache(); + + $attachment=true; + if (! empty($conf->global->MAIN_DISABLE_FORCE_SAVEAS)) $attachment=false; + $type=dol_mimetype($filename); + + //if ($encoding) header('Content-Encoding: '.$encoding); + if ($type) header('Content-Type: '.$type); + if ($attachment) header('Content-Disposition: attachment; filename="'.$filename.'"'); + else header('Content-Disposition: inline; filename="'.$filename.'"'); + + // Ajout directives pour resoudre bug IE + header('Cache-Control: Public, must-revalidate'); + header('Pragma: public'); + + readfile($file); + + return 1; + } +} diff --git a/htdocs/core/modules/printsheet/modules_labels.php b/htdocs/core/modules/printsheet/modules_labels.php index 15ef011ea04..1b077f8eab5 100644 --- a/htdocs/core/modules/printsheet/modules_labels.php +++ b/htdocs/core/modules/printsheet/modules_labels.php @@ -67,9 +67,10 @@ class ModelePDFLabels * @param string $modele Force le modele a utiliser ('' to not force) * @param Translate $outputlangs Objet lang a utiliser pour traduction * @param string $outputdir Output directory + * @param string $template pdf generenate document class to use default 'standardlabel' * @return int <0 if KO, >0 if OK */ -function members_label_pdf_create($db, $arrayofrecords, $modele, $outputlangs, $outputdir='') +function members_label_pdf_create($db, $arrayofrecords, $modele, $outputlangs, $outputdir='', $template='standardlabel') { global $conf,$langs; $langs->load("members"); @@ -98,13 +99,12 @@ function members_label_pdf_create($db, $arrayofrecords, $modele, $outputlangs, $ } } else $code=$modele; - $modele='standardlabel'; // If selected modele is a filename template (then $modele="modelname:filename") - $tmp=explode(':',$modele,2); + $tmp=explode(':',$template,2); if (! empty($tmp[1])) { - $modele=$tmp[0]; + $template=$tmp[0]; $srctemplatepath=$tmp[1]; } else $srctemplatepath=$code; @@ -117,14 +117,14 @@ function members_label_pdf_create($db, $arrayofrecords, $modele, $outputlangs, $ { foreach(array('doc','pdf') as $prefix) { - $file = $prefix."_".$modele.".class.php"; + $file = $prefix."_".$template.".class.php"; // On verifie l'emplacement du modele $file=dol_buildpath($reldir."core/modules/printsheet/doc/".$file,0); if (file_exists($file)) { $filefound=1; - $classname=$prefix.'_'.$modele; + $classname=$prefix.'_'.$template; break; } } From f9908c48cbc2c9db8081b204286ce9ca5f77202e Mon Sep 17 00:00:00 2001 From: Francis Appels Date: Sun, 3 May 2015 10:07:04 +0200 Subject: [PATCH 05/10] Add datamatrix en qrcode barcodes --- .../modules/barcode/doc/tcpdfbarcode.modules.php | 2 +- htdocs/core/modules/modBarcode.class.php | 12 ++++++++---- htdocs/langs/en_US/admin.lang | 2 ++ 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php b/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php index d608543d5f5..56acdc704cb 100644 --- a/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php +++ b/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php @@ -194,7 +194,7 @@ class modTcpdfbarcode extends ModeleBarCode * @param string $dolEncodingType dolibarr barcode encoding type * @return string tcpdf encoding type */ - private function getTcpdfEncodingType($dolEncodingType) + public function getTcpdfEncodingType($dolEncodingType) { $tcpdf1dEncodingTypes = array( 'C39' => 'C39', diff --git a/htdocs/core/modules/modBarcode.class.php b/htdocs/core/modules/modBarcode.class.php index c9ba87250bb..780a3539bf5 100644 --- a/htdocs/core/modules/modBarcode.class.php +++ b/htdocs/core/modules/modBarcode.class.php @@ -65,9 +65,11 @@ class modBarcode extends DolibarrModules // Constants // Example: $this->const=array(0=>array('MYMODULE_MYNEWCONST1','chaine','myvalue','This is a constant to add',0), // 1=>array('MYMODULE_MYNEWCONST2','chaine','myvalue','This is another constant to add',0) ); - $this->const = array( - //0=>array('GENBARCODE_LOCATION','chaine',DOL_DOCUMENT_ROOT.'/includes/barcode/genbarcode/genbarcode','Path to genbarcode command line tool',0) - ); + $this->const = array(); + //$this->const[0] = array('BARCODE_LABEL_LEFT_TEXT','chaine','%BARCODE%','Print barcode on left side of label',1); + //$this->const[1] = array('BARCODE_LABEL_RIGHT_TEXT','chaine','%LOGO%','Print Company logo on right side',1); + //$this->const[2] = array('BARCODE_LABEL_HEADER_TEXT','chaine','My header','Print header text on label',1); + //$this->const[3] = array('BARCODE_LABEL_FOOTER_TEXT','chaine','My footer','Print footer text on label',1); // Boxes $this->boxes = array(); @@ -137,7 +139,9 @@ class modBarcode extends DolibarrModules array('sql'=>"INSERT INTO ".MAIN_DB_PREFIX."c_barcode_type (code, libelle, coder, example, entity) VALUES ('UPC', 'UPC', 0, '123456789012', __ENTITY__)",'ignoreerror'=>1), array('sql'=>"INSERT INTO ".MAIN_DB_PREFIX."c_barcode_type (code, libelle, coder, example, entity) VALUES ('ISBN', 'ISBN', 0, '123456789', __ENTITY__)",'ignoreerror'=>1), array('sql'=>"INSERT INTO ".MAIN_DB_PREFIX."c_barcode_type (code, libelle, coder, example, entity) VALUES ('C39', 'Code 39', 0, '1234567890', __ENTITY__)",'ignoreerror'=>1), - array('sql'=>"INSERT INTO ".MAIN_DB_PREFIX."c_barcode_type (code, libelle, coder, example, entity) VALUES ('C128', 'Code 128', 0, 'ABCD1234567890', __ENTITY__)",'ignoreerror'=>1) + array('sql'=>"INSERT INTO ".MAIN_DB_PREFIX."c_barcode_type (code, libelle, coder, example, entity) VALUES ('C128', 'Code 128', 0, 'ABCD1234567890', __ENTITY__)",'ignoreerror'=>1), + array('sql'=>"INSERT INTO ".MAIN_DB_PREFIX."c_barcode_type (code, libelle, coder, example, entity) VALUES ('DATAMATRIX', 'Datamatrix', 0, '1234567xyz', __ENTITY__)",'ignoreerror'=>1), + array('sql'=>"INSERT INTO ".MAIN_DB_PREFIX."c_barcode_type (code, libelle, coder, example, entity) VALUES ('QRCODE', 'Qr Code', 0, 'www.dolibarr.org', __ENTITY__)",'ignoreerror'=>1) ); return $this->_init($sql, $options); diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index f6041a2abf0..09aafd228f7 100755 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -1422,6 +1422,8 @@ BarcodeDescUPC=Barcode of type UPC BarcodeDescISBN=Barcode of type ISBN BarcodeDescC39=Barcode of type C39 BarcodeDescC128=Barcode of type C128 +BarcodeDescDATAMATRIX=Barcode of type Datamatrix +BarcodeDescQRCODE=Barcode of type QR code GenbarcodeLocation=Bar code generation command line tool (used by internal engine for some bar code types). Must be compatible with "genbarcode".
For example: /usr/local/bin/genbarcode BarcodeInternalEngine=Internal engine BarCodeNumberManager=Manager to auto define barcode numbers From ffe767154919204dc7e086d1072b9a07fe23d570 Mon Sep 17 00:00:00 2001 From: Francis Appels Date: Sun, 3 May 2015 10:08:32 +0200 Subject: [PATCH 06/10] Fix label L7163 X spacing --- htdocs/core/lib/format_cards.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/format_cards.lib.php b/htdocs/core/lib/format_cards.lib.php index 29789791e14..b0b865c89f4 100644 --- a/htdocs/core/lib/format_cards.lib.php +++ b/htdocs/core/lib/format_cards.lib.php @@ -111,7 +111,7 @@ $_Avery_Labels = array ( 'marginTop'=>15, 'NX'=>2, 'NY'=>7, - 'SpaceX'=>25, + 'SpaceX'=>2.5, 'SpaceY'=>0, 'width'=>99.1, 'height'=>38.1, From f9ece24f9572733f9112e50037864178e58ba253 Mon Sep 17 00:00:00 2001 From: Francis Appels Date: Sun, 3 May 2015 10:09:31 +0200 Subject: [PATCH 07/10] Fix: Member card header/footer text --- htdocs/core/modules/modAdherent.class.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/modules/modAdherent.class.php b/htdocs/core/modules/modAdherent.class.php index a1c90f242a6..fb8d9c01e15 100644 --- a/htdocs/core/modules/modAdherent.class.php +++ b/htdocs/core/modules/modAdherent.class.php @@ -80,8 +80,8 @@ class modAdherent extends DolibarrModules $this->const[21] = array("ADHERENT_MAIL_FROM","chaine","","From des mails"); $this->const[22] = array("ADHERENT_MAIL_COTIS","texte","Bonjour %FIRSTNAME%,\r\nCet email confirme que votre cotisation a été reçue\r\net enregistrée","Mail de validation de cotisation"); $this->const[23] = array("ADHERENT_MAIL_COTIS_SUBJECT","chaine","Reçu de votre cotisation","Sujet du mail de validation de cotisation"); - $this->const[25] = array("ADHERENT_CARD_HEADER_TEXT","chaine","%ANNEE%","Texte imprimé sur le haut de la carte adhérent"); - $this->const[26] = array("ADHERENT_CARD_FOOTER_TEXT","chaine","Association AZERTY","Texte imprimé sur le bas de la carte adhérent"); + $this->const[25] = array("ADHERENT_CARD_HEADER_TEXT","chaine","%YEAR%","Texte imprimé sur le haut de la carte adhérent"); + $this->const[26] = array("ADHERENT_CARD_FOOTER_TEXT","chaine","%COMPANY%","Texte imprimé sur le bas de la carte adhérent"); $this->const[27] = array("ADHERENT_CARD_TEXT","texte","%FULLNAME%\r\nID: %ID%\r\n%EMAIL%\r\n%ADDRESS%\r\n%ZIP% %TOWN%\r\n%COUNTRY%","Text to print on member cards"); $this->const[28] = array("ADHERENT_MAILMAN_ADMINPW","chaine","","Mot de passe Admin des liste mailman"); $this->const[31] = array("ADHERENT_BANK_USE_AUTO","yesno","","Insertion automatique des cotisations dans le compte banquaire"); From fee4c4e0e27ec29659e2ab9aab0a28917336f1e2 Mon Sep 17 00:00:00 2001 From: Francis Appels Date: Sun, 3 May 2015 10:26:12 +0200 Subject: [PATCH 08/10] Fix: add newline at eof --- htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php b/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php index 56acdc704cb..71057359e7c 100644 --- a/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php +++ b/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php @@ -249,4 +249,4 @@ class modTcpdfbarcode extends ModeleBarCode return ''; } } -} \ No newline at end of file +} From cb75d0778a9ed850dfe5b958846d3df2cce8dd6b Mon Sep 17 00:00:00 2001 From: Francis Appels Date: Sun, 3 May 2015 11:09:33 +0200 Subject: [PATCH 09/10] Fix doc errors --- htdocs/core/class/commonstickergenerator.class.php | 10 +++++----- htdocs/core/modules/member/doc/pdf_standard.class.php | 4 ++-- .../modules/printsheet/doc/pdf_standardlabel.class.php | 4 ++-- .../modules/printsheet/doc/pdf_tcpdflabel.class.php | 4 ++-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/htdocs/core/class/commonstickergenerator.class.php b/htdocs/core/class/commonstickergenerator.class.php index 50a0c929a7e..1091962f6ea 100644 --- a/htdocs/core/class/commonstickergenerator.class.php +++ b/htdocs/core/class/commonstickergenerator.class.php @@ -108,7 +108,7 @@ abstract class CommonStickerGenerator /** * Output a sticker on page at position _COUNTX, _COUNTY (_COUNTX and _COUNTY start from 0) * - * @param PDF &$pdf PDF reference + * @param PDF $pdf PDF reference * @param Translate $outputlangs Output langs * @param array $param Associative array containing label content and optional parameters * @return void @@ -119,7 +119,7 @@ abstract class CommonStickerGenerator * Methode qui permet de modifier la taille des caracteres * Cela modiera aussi l'espace entre chaque ligne * - * @param PDF &$pdf PDF reference + * @param PDF $pdf PDF reference * @param int $pt point * @return void */ @@ -135,7 +135,7 @@ abstract class CommonStickerGenerator /** * protected Print dot line * - * @param PDF &$pdf PDF reference + * @param PDF $pdf PDF reference * @param int $x1 X1 * @param int $y1 Y1 * @param int $x2 X2 @@ -176,7 +176,7 @@ abstract class CommonStickerGenerator /** * protected Function realisant une croix aux 4 coins des cartes * - * @param PDF &$pdf PDF reference + * @param PDF $pdf PDF reference * @param int $x1 X1 * @param int $y1 Y1 * @param int $x2 X2 @@ -247,7 +247,7 @@ abstract class CommonStickerGenerator /** * protected Set format * - * @param PDF &$pdf PDF reference + * @param PDF $pdf PDF reference * @param string $format Format * @return void */ diff --git a/htdocs/core/modules/member/doc/pdf_standard.class.php b/htdocs/core/modules/member/doc/pdf_standard.class.php index 7df37a7c05c..40d74648ee3 100644 --- a/htdocs/core/modules/member/doc/pdf_standard.class.php +++ b/htdocs/core/modules/member/doc/pdf_standard.class.php @@ -37,7 +37,7 @@ class pdf_standard extends CommonStickerGenerator /** * Output a sticker on page at position _COUNTX, _COUNTY (_COUNTX and _COUNTY start from 0) * - * @param PDF &$pdf PDF reference + * @param PDF $pdf PDF reference * @param Translate $outputlangs Output langs * @param array $param Associative array containing label content and optional parameters * @return void @@ -51,7 +51,7 @@ class pdf_standard extends CommonStickerGenerator * - %LOGO% is replace with company logo * - %PHOTO% is replace with photo provided as parameter * - * @param PDF &$pdf PDF + * @param PDF $pdf PDF * @param string $textleft Text left * @param string $header Header * @param string $footer Footer diff --git a/htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php b/htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php index d9d9b825a4b..a6e9bce07c8 100644 --- a/htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php +++ b/htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php @@ -36,7 +36,7 @@ class pdf_standardlabel extends CommonStickerGenerator /** * Output a sticker on page at position _COUNTX, _COUNTY (_COUNTX and _COUNTY start from 0) * - * @param PDF &$pdf PDF reference + * @param PDF $pdf PDF reference * @param Translate $outputlangs Output langs * @param array $param Associative array containing label content and optional parameters * @return void @@ -50,7 +50,7 @@ class pdf_standardlabel extends CommonStickerGenerator * - %LOGO% is replace with company logo * - %PHOTO% is replace with photo provided as parameter * - * @param PDF &$pdf PDF reference + * @param PDF $pdf PDF reference * @param string $textleft Text left * @param string $header Header * @param string $footer Footer diff --git a/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php b/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php index e73c112d26e..1e5c74c299a 100644 --- a/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php +++ b/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php @@ -69,7 +69,7 @@ class pdf_tcpdflabel extends CommonStickerGenerator /** * write barcode to pdf * - * @param PDF &$pdf PDF reference + * @param PDF $pdf PDF reference * @param string $code code to print * @param string $encoding type of barcode * @param boolean $is2d true if 2d barcode @@ -90,7 +90,7 @@ class pdf_tcpdflabel extends CommonStickerGenerator /** * Output a sticker on page at position _COUNTX, _COUNTY (_COUNTX and _COUNTY start from 0) * - * @param PDF &$pdf PDF reference + * @param PDF $pdf PDF reference * @param Translate $outputlangs Output langs * @param array $param Associative array containing label content and optional parameters * @return void From 2b32dc4ba89543582d4b7b2279032c5f65416a8e Mon Sep 17 00:00:00 2001 From: Francis Appels Date: Sun, 3 May 2015 11:51:54 +0200 Subject: [PATCH 10/10] Apply correct tabulation --- htdocs/barcode/printsheet.php | 121 +++--- .../barcode/doc/tcpdfbarcode.modules.php | 332 +++++++-------- .../modules/member/doc/pdf_standard.class.php | 76 ++-- htdocs/core/modules/member/modules_cards.php | 34 +- htdocs/core/modules/modBarcode.class.php | 108 ++--- .../doc/pdf_standardlabel.class.php | 224 +++++----- .../printsheet/doc/pdf_tcpdflabel.class.php | 382 +++++++++--------- 7 files changed, 638 insertions(+), 639 deletions(-) diff --git a/htdocs/barcode/printsheet.php b/htdocs/barcode/printsheet.php index 7cd539bf323..81af2aafa10 100644 --- a/htdocs/barcode/printsheet.php +++ b/htdocs/barcode/printsheet.php @@ -1,7 +1,7 @@ - * Copyright (C) 2003 Jean-Louis Bergamo - * Copyright (C) 2006-2013 Laurent Destailleur +/* Copyright (C) 2003 Rodolphe Quiedeville + * Copyright (C) 2003 Jean-Louis Bergamo + * Copyright (C) 2006-2013 Laurent Destailleur * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -10,7 +10,7 @@ * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License @@ -18,9 +18,9 @@ */ /** - * \file htdocs/barcode/printsheet.php - * \ingroup member - * \brief Page to print sheets with barcodes using the document templates into core/modules/printsheets + * \file htdocs/barcode/printsheet.php + * \ingroup member + * \brief Page to print sheets with barcodes using the document templates into core/modules/printsheets */ require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/format_cards.lib.php'; @@ -96,13 +96,13 @@ if ($action == 'builddoc') if (empty($forbarcode)) // barcode value { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("BarcodeValue")),'errors'); - $error++; + setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("BarcodeValue")),'errors'); + $error++; } if (empty($fk_barcode_type)) // barcode type = barcode encoding { - setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("BarcodeType")),'errors'); - $error++; + setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("BarcodeType")),'errors'); + $error++; } if (! $error) @@ -123,55 +123,54 @@ if ($action == 'builddoc') $code=$forbarcode; $generator=$stdobject->barcode_type_coder; // coder (loaded by fetch_barcode). Engine. $encoding=strtoupper($stdobject->barcode_type_code); // code (loaded by fetch_barcode). Example 'ean', 'isbn', ... - $diroutput=$conf->barcode->dir_temp; dol_mkdir($diroutput); // Generate barcode - $dirbarcode=array_merge(array("/core/modules/barcode/doc/"),$conf->modules_parts['barcode']); + $dirbarcode=array_merge(array("/core/modules/barcode/doc/"),$conf->modules_parts['barcode']); - foreach($dirbarcode as $reldir) - { - $dir=dol_buildpath($reldir,0); - $newdir=dol_osencode($dir); + foreach($dirbarcode as $reldir) + { + $dir=dol_buildpath($reldir,0); + $newdir=dol_osencode($dir); - // Check if directory exists (we do not use dol_is_dir to avoid loading files.lib.php) - if (! is_dir($newdir)) continue; + // Check if directory exists (we do not use dol_is_dir to avoid loading files.lib.php) + if (! is_dir($newdir)) continue; - $result=@include_once $newdir.$generator.'.modules.php'; - if ($result) break; - } - - // Load barcode class for generating barcode image - $classname = "mod".ucfirst($generator); - $module = new $classname($db); - if ($generator != 'tcpdfbarcode') { - $template = 'standardlabel'; - $is2d = false; - if ($module->encodingIsSupported($encoding)) - { - $barcodeimage=$conf->barcode->dir_temp.'/barcode_'.$code.'_'.$encoding.'.png'; - dol_delete_file($barcodeimage); - // File is created with full name $barcodeimage = $conf->barcode->dir_temp.'/barcode_'.$code.'_'.$encoding.'.png'; - $result=$module->writeBarCode($code,$encoding,'Y',4); - - if ($result <= 0 || ! dol_is_file($barcodeimage)) - { - $error++; - setEventMessage('Failed to generate image file of barcode for code='.$code.' encoding='.$encoding.' file='.basename($barcodeimage), 'errors'); - } - } - else - { - $error++; - setEventMessage("Error, encoding ".$encoding." is not supported by encoder ".$generator.'. You must choose another barcode type or install a barcode generation engine that support '.$encoding, 'errors'); - } - } else { - $template = 'tcpdflabel'; - $encoding = $module->getTcpdfEncodingType($encoding); //convert to TCPDF compatible encoding types - $is2d = $module->is2d; - } + $result=@include_once $newdir.$generator.'.modules.php'; + if ($result) break; + } + + // Load barcode class for generating barcode image + $classname = "mod".ucfirst($generator); + $module = new $classname($db); + if ($generator != 'tcpdfbarcode') { + $template = 'standardlabel'; + $is2d = false; + if ($module->encodingIsSupported($encoding)) + { + $barcodeimage=$conf->barcode->dir_temp.'/barcode_'.$code.'_'.$encoding.'.png'; + dol_delete_file($barcodeimage); + // File is created with full name $barcodeimage = $conf->barcode->dir_temp.'/barcode_'.$code.'_'.$encoding.'.png'; + $result=$module->writeBarCode($code,$encoding,'Y',4); + + if ($result <= 0 || ! dol_is_file($barcodeimage)) + { + $error++; + setEventMessage('Failed to generate image file of barcode for code='.$code.' encoding='.$encoding.' file='.basename($barcodeimage), 'errors'); + } + } + else + { + $error++; + setEventMessage("Error, encoding ".$encoding." is not supported by encoder ".$generator.'. You must choose another barcode type or install a barcode generation engine that support '.$encoding, 'errors'); + } + } else { + $template = 'tcpdflabel'; + $encoding = $module->getTcpdfEncodingType($encoding); //convert to TCPDF compatible encoding types + $is2d = $module->is2d; + } } if (! $error) @@ -198,7 +197,7 @@ if ($action == 'builddoc') if ($mode == 'label') { - $txtforsticker="%PHOTO%"; // Photo will be barcode image, %BARCODE% posible when using TCPDF generator + $txtforsticker="%PHOTO%"; // Photo will be barcode image, %BARCODE% posible when using TCPDF generator $textleft=make_substitutions((empty($conf->global->BARCODE_LABEL_LEFT_TEXT)?$txtforsticker:$conf->global->BARCODE_LABEL_LEFT_TEXT), $substitutionarray); $textheader=make_substitutions((empty($conf->global->BARCODE_LABEL_HEADER_TEXT)?'':$conf->global->BARCODE_LABEL_HEADER_TEXT), $substitutionarray); $textfooter=make_substitutions((empty($conf->global->BARCODE_LABEL_FOOTER_TEXT)?'':$conf->global->BARCODE_LABEL_FOOTER_TEXT), $substitutionarray); @@ -213,9 +212,9 @@ if ($action == 'builddoc') 'textheader'=>$textheader, 'textfooter'=>$textfooter, 'textright'=>$textright, - 'code'=>$code, - 'encoding'=>$encoding, - 'is2d'=>$is2d, + 'code'=>$code, + 'encoding'=>$encoding, + 'is2d'=>$is2d, 'photo'=>$barcodeimage // Photo must be a file that exists with format supported by TCPDF ); } @@ -243,11 +242,11 @@ if ($action == 'builddoc') dol_print_error('',$result); } - if (! $mesg) - { - $db->close(); - exit; - } + if (! $mesg) + { + $db->close(); + exit; + } } } diff --git a/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php b/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php index 71057359e7c..eb1b801821b 100644 --- a/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php +++ b/htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php @@ -1,7 +1,7 @@ - * Copyright (C) 2005 Regis Houssin - * Copyright (C) 2015 Francis Appels +/* Copyright (C) 2005-2009 Laurent Destailleur + * Copyright (C) 2005 Regis Houssin + * Copyright (C) 2015 Francis Appels * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -10,7 +10,7 @@ * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License @@ -18,13 +18,13 @@ */ /** - * \file htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php - * \ingroup barcode - * \brief File of class to manage barcode numbering with tcpdf library + * \file htdocs/core/modules/barcode/doc/tcpdfbarcode.modules.php + * \ingroup barcode + * \brief File of class to manage barcode numbering with tcpdf library */ require_once DOL_DOCUMENT_ROOT.'/core/modules/barcode/modules_barcode.class.php'; -require_once DOL_DOCUMENT_ROOT.'/core/lib/barcode.lib.php'; // This is to include def like $genbarcode_loc and $font_loc +require_once DOL_DOCUMENT_ROOT.'/core/lib/barcode.lib.php'; // This is to include def like $genbarcode_loc and $font_loc /** * Class to generate barcode images using tcpdf barcode generator @@ -35,39 +35,39 @@ class modTcpdfbarcode extends ModeleBarCode var $error=''; var $is2d = false; - /** - * Return description of numbering model - * - * @return string Text with description - */ - function info() - { - global $langs; - - return 'TCPDF-barcode'; - } - - /** - * Return if a module can be used or not + /** + * Return description of numbering model * - * @return boolean true if module can be used + * @return string Text with description + */ + function info() + { + global $langs; + + return 'TCPDF-barcode'; + } + + /** + * Return if a module can be used or not + * + * @return boolean true if module can be used */ function isEnabled() { return true; - } + } /** - * Test si les numeros deja en vigueur dans la base ne provoquent pas de - * de conflits qui empechera cette numerotation de fonctionner. + * Test si les numeros deja en vigueur dans la base ne provoquent pas de + * de conflits qui empechera cette numerotation de fonctionner. * - * @return boolean false si conflit, true si ok + * @return boolean false si conflit, true si ok */ function canBeActivated() { - global $langs; + global $langs; - return true; + return true; } /** @@ -78,28 +78,28 @@ class modTcpdfbarcode extends ModeleBarCode */ function encodingIsSupported($encoding) { - $tcpdfEncoding = $this->getTcpdfEncodingType($encoding); - if (empty($tcpdfEncoding)) { - return 0; - } else { - return 1; - } + $tcpdfEncoding = $this->getTcpdfEncodingType($encoding); + if (empty($tcpdfEncoding)) { + return 0; + } else { + return 1; + } } - /** + /** * Return an image file on the fly (no need to write on disk) * - * @param String $code Value to encode - * @param String $encoding Mode of encoding - * @param String $readable Code can be read + * @param String $code Value to encode + * @param String $encoding Mode of encoding + * @param String $readable Code can be read * @return int <0 if KO, >0 if OK - */ - function buildBarCode($code,$encoding,$readable='Y') - { - global $_GET; - - $tcpdfEncoding = $this->getTcpdfEncodingType($encoding); - if (empty($tcpdfEncoding)) return -1; + */ + function buildBarCode($code,$encoding,$readable='Y') + { + global $_GET; + + $tcpdfEncoding = $this->getTcpdfEncodingType($encoding); + if (empty($tcpdfEncoding)) return -1; $color = array(0,0,0); @@ -109,45 +109,45 @@ class modTcpdfbarcode extends ModeleBarCode $_GET["readable"]=$readable; if ($code) { - // Load the tcpdf barcode class - if ($this->is2d) { - $height = 3; - $width = 3; - require_once TCPDF_PATH.'tcpdf_barcodes_2d.php'; - $barcodeobj = new TCPDF2DBarcode($code, $tcpdfEncoding); - } else { - $height = 50; - $width = 1; - require_once TCPDF_PATH.'tcpdf_barcodes_1d.php'; - $barcodeobj = new TCPDFBarcode($code, $tcpdfEncoding); - } - - dol_syslog("buildBarCode::TCPDF.getBarcodePNG"); - $barcodeobj->getBarcodePNG($width, $height, $color); - - return 1; + // Load the tcpdf barcode class + if ($this->is2d) { + $height = 3; + $width = 3; + require_once TCPDF_PATH.'tcpdf_barcodes_2d.php'; + $barcodeobj = new TCPDF2DBarcode($code, $tcpdfEncoding); + } else { + $height = 50; + $width = 1; + require_once TCPDF_PATH.'tcpdf_barcodes_1d.php'; + $barcodeobj = new TCPDFBarcode($code, $tcpdfEncoding); + } + + dol_syslog("buildBarCode::TCPDF.getBarcodePNG"); + $barcodeobj->getBarcodePNG($width, $height, $color); + + return 1; } else { - return -2; + return -2; } - } + } /** - * Save an image file on disk (with no output) - * - * @param String $code Value to encode - * @param String $encoding Mode of encoding - * @param String $readable Code can be read + * Save an image file on disk (with no output) + * + * @param String $code Value to encode + * @param String $encoding Mode of encoding + * @param String $readable Code can be read * @return int <0 if KO, >0 if OK - */ - function writeBarCode($code,$encoding,$readable='Y') - { - global $conf,$_GET; + */ + function writeBarCode($code,$encoding,$readable='Y') + { + global $conf,$_GET; dol_mkdir($conf->barcode->dir_temp); $file=$conf->barcode->dir_temp.'/barcode_'.$code.'_'.$encoding.'.png'; $tcpdfEncoding = $this->getTcpdfEncodingType($encoding); - if (empty($tcpdfEncoding)) return -1; + if (empty($tcpdfEncoding)) return -1; $color = array(0,0,0); @@ -156,97 +156,97 @@ class modTcpdfbarcode extends ModeleBarCode $_GET["height"]=$height; $_GET["readable"]=$readable; - if ($code) { - // Load the tcpdf barcode class - if ($this->is2d) { - $height = 1; - $width = 1; - require_once TCPDF_PATH.'tcpdf_barcodes_2d.php'; - $barcodeobj = new TCPDF2DBarcode($code, $tcpdfEncoding); - } else { - $height = 50; - $width = 1; - require_once TCPDF_PATH.'tcpdf_barcodes_1d.php'; - $barcodeobj = new TCPDFBarcode($code, $tcpdfEncoding); - } - - dol_syslog("writeBarCode::TCPDF.getBarcodePngData"); - if ($imageData = $barcodeobj->getBarcodePngData($width, $height, $color)) { - if (function_exists('imagecreate')) { - $imageData = imagecreatefromstring($imageData); - } - if (imagepng($imageData, $file)) { - return 1; - } else { - return -3; - } - } else { - return -4; - } + if ($code) { + // Load the tcpdf barcode class + if ($this->is2d) { + $height = 1; + $width = 1; + require_once TCPDF_PATH.'tcpdf_barcodes_2d.php'; + $barcodeobj = new TCPDF2DBarcode($code, $tcpdfEncoding); + } else { + $height = 50; + $width = 1; + require_once TCPDF_PATH.'tcpdf_barcodes_1d.php'; + $barcodeobj = new TCPDFBarcode($code, $tcpdfEncoding); + } + + dol_syslog("writeBarCode::TCPDF.getBarcodePngData"); + if ($imageData = $barcodeobj->getBarcodePngData($width, $height, $color)) { + if (function_exists('imagecreate')) { + $imageData = imagecreatefromstring($imageData); + } + if (imagepng($imageData, $file)) { + return 1; + } else { + return -3; + } + } else { + return -4; + } } else { - return -2; + return -2; } - } - - /** - * get available output_modes for tcpdf class wth its translated description - * - * @param string $dolEncodingType dolibarr barcode encoding type - * @return string tcpdf encoding type - */ - public function getTcpdfEncodingType($dolEncodingType) - { - $tcpdf1dEncodingTypes = array( - 'C39' => 'C39', - 'C39+' => 'C39+', - 'C39E' => 'C39E', - 'C39E+' => 'C39E+', - 'S25' => 'S25', - 'S25+' => 'S25+', - 'I25' => 'I25', - 'I25+' => 'I25+', - 'C128' => 'C128', - 'C128A' => 'C128A', - 'C128B' => 'C128B', - 'C128C' => 'C128C', - 'EAN2' => 'EAN2', - 'EAN5' => 'EAN5', - 'EAN8' => 'EAN8', - 'EAN13' => 'EAN13', - 'ISBN' => 'EAN13', - 'UPC' => 'UPCA', - 'UPCE' => 'UPCE', - 'MSI' => 'MSI', - 'MSI+' => 'MSI+', - 'POSTNET' => 'POSTNET', - 'PLANET' => 'PLANET', - 'RMS4CC' => 'RMS4CC', - 'KIX' => 'KIX', - 'IMB' => 'IMB', - 'CODABAR' => 'CODABAR', - 'CODE11' => 'CODE11', - 'PHARMA' => 'PHARMA', - 'PHARMA2T' => 'PHARMA2T' - ); - - $tcpdf2dEncodingTypes = array( - 'DATAMATRIX' => 'DATAMATRIX', - 'PDF417' => 'PDF417', - 'QRCODE' => 'QRCODE,L', - 'QRCODE,L' => 'QRCODE,L', - 'QRCODE,M' => 'QRCODE,M', - 'QRCODE,Q' => 'QRCODE,Q', - 'QRCODE,H' => 'QRCODE,H' - ); - - if (array_key_exists($dolEncodingType, $tcpdf1dEncodingTypes)) { - $this->is2d = false; - return $tcpdf1dEncodingTypes[$dolEncodingType]; - } else if (array_key_exists($dolEncodingType, $tcpdf2dEncodingTypes)) { - $this->is2d = true; - return $tcpdf2dEncodingTypes[$dolEncodingType]; - } else { - return ''; - } - } + } + + /** + * get available output_modes for tcpdf class wth its translated description + * + * @param string $dolEncodingType dolibarr barcode encoding type + * @return string tcpdf encoding type + */ + public function getTcpdfEncodingType($dolEncodingType) + { + $tcpdf1dEncodingTypes = array( + 'C39' => 'C39', + 'C39+' => 'C39+', + 'C39E' => 'C39E', + 'C39E+' => 'C39E+', + 'S25' => 'S25', + 'S25+' => 'S25+', + 'I25' => 'I25', + 'I25+' => 'I25+', + 'C128' => 'C128', + 'C128A' => 'C128A', + 'C128B' => 'C128B', + 'C128C' => 'C128C', + 'EAN2' => 'EAN2', + 'EAN5' => 'EAN5', + 'EAN8' => 'EAN8', + 'EAN13' => 'EAN13', + 'ISBN' => 'EAN13', + 'UPC' => 'UPCA', + 'UPCE' => 'UPCE', + 'MSI' => 'MSI', + 'MSI+' => 'MSI+', + 'POSTNET' => 'POSTNET', + 'PLANET' => 'PLANET', + 'RMS4CC' => 'RMS4CC', + 'KIX' => 'KIX', + 'IMB' => 'IMB', + 'CODABAR' => 'CODABAR', + 'CODE11' => 'CODE11', + 'PHARMA' => 'PHARMA', + 'PHARMA2T' => 'PHARMA2T' + ); + + $tcpdf2dEncodingTypes = array( + 'DATAMATRIX' => 'DATAMATRIX', + 'PDF417' => 'PDF417', + 'QRCODE' => 'QRCODE,L', + 'QRCODE,L' => 'QRCODE,L', + 'QRCODE,M' => 'QRCODE,M', + 'QRCODE,Q' => 'QRCODE,Q', + 'QRCODE,H' => 'QRCODE,H' + ); + + if (array_key_exists($dolEncodingType, $tcpdf1dEncodingTypes)) { + $this->is2d = false; + return $tcpdf1dEncodingTypes[$dolEncodingType]; + } else if (array_key_exists($dolEncodingType, $tcpdf2dEncodingTypes)) { + $this->is2d = true; + return $tcpdf2dEncodingTypes[$dolEncodingType]; + } else { + return ''; + } + } } diff --git a/htdocs/core/modules/member/doc/pdf_standard.class.php b/htdocs/core/modules/member/doc/pdf_standard.class.php index 40d74648ee3..c421ae1cda4 100644 --- a/htdocs/core/modules/member/doc/pdf_standard.class.php +++ b/htdocs/core/modules/member/doc/pdf_standard.class.php @@ -2,8 +2,8 @@ /* Copyright (C) 2003 Steve Dillon * Copyright (C) 2003 Laurent Passebecq * Copyright (C) 2001-2003 Rodolphe Quiedeville - * Copyright (C) 2002-2003 Jean-Louis Bergamo - * Copyright (C) 2006-2013 Laurent Destailleur + * Copyright (C) 2002-2003 Jean-Louis Bergamo + * Copyright (C) 2006-2013 Laurent Destailleur * Copyright (C) 2015 Francis Appels * * This program is free software; you can redistribute it and/or modify @@ -13,7 +13,7 @@ * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License @@ -21,9 +21,9 @@ */ /** - * \file htdocs/core/modules/member/doc/pdf_standard.class.php - * \ingroup member - * \brief Fichier de la classe permettant d'editer au format PDF des etiquettes au format Avery ou personnalise + * \file htdocs/core/modules/member/doc/pdf_standard.class.php + * \ingroup member + * \brief Fichier de la classe permettant d'editer au format PDF des etiquettes au format Avery ou personnalise */ require_once DOL_DOCUMENT_ROOT.'/core/class/commonstickergenerator.class.php'; @@ -37,37 +37,37 @@ class pdf_standard extends CommonStickerGenerator /** * Output a sticker on page at position _COUNTX, _COUNTY (_COUNTX and _COUNTY start from 0) * - * @param PDF $pdf PDF reference - * @param Translate $outputlangs Output langs - * @param array $param Associative array containing label content and optional parameters - * @return void + * @param PDF $pdf PDF reference + * @param Translate $outputlangs Output langs + * @param array $param Associative array containing label content and optional parameters + * @return void */ function addSticker(&$pdf,$outputlangs,$param) { - // use this method in future refactoring - } - - /** + // use this method in future refactoring + } + + /** * Output a sticker on page at position _COUNTX, _COUNTY (_COUNTX and _COUNTY start from 0) * - %LOGO% is replace with company logo * - %PHOTO% is replace with photo provided as parameter * - * @param PDF $pdf PDF - * @param string $textleft Text left - * @param string $header Header - * @param string $footer Footer - * @param Translate $outputlangs Output langs - * @param string $textright Text right - * @param int $idmember Id member - * @param string $photo Photo (full path to image file used as replacement for key %PHOTOS% into left, right, header or footer text) - * @return void + * @param PDF $pdf PDF + * @param string $textleft Text left + * @param string $header Header + * @param string $footer Footer + * @param Translate $outputlangs Output langs + * @param string $textright Text right + * @param int $idmember Id member + * @param string $photo Photo (full path to image file used as replacement for key %PHOTOS% into left, right, header or footer text) + * @return void */ function Add_PDF_card(&$pdf,$textleft,$header,$footer,$outputlangs,$textright='',$idmember=0,$photo='') { global $mysoc,$conf,$langs; global $forceimgscalewidth,$forceimgscaleheight; - $imgscalewidth=(empty($forceimgscalewidth)?0.3:$forceimgscalewidth); // Scale of image for width (1=Full width of sticker) - $imgscaleheight=(empty($forceimgscalewidth)?0.5:$forceimgscalewidth); // Scale of image for height (1=Full height of sticker) + $imgscalewidth=(empty($forceimgscalewidth)?0.3:$forceimgscalewidth); // Scale of image for width (1=Full width of sticker) + $imgscaleheight=(empty($forceimgscalewidth)?0.5:$forceimgscalewidth); // Scale of image for height (1=Full height of sticker) // We are in a new page, then we must add a page if (($this->_COUNTX ==0) && ($this->_COUNTY==0) and (!$this->_First==1)) { @@ -235,9 +235,9 @@ class pdf_standard extends CommonStickerGenerator * * @param array $arrayofrecords Array of record informations (array('textleft'=>,'textheader'=>, ...'id'=>,'photo'=>) * @param Translate $outputlangs Lang object for output language - * @param string $srctemplatepath Full path of source filename for generator using a template file - * @param string $mode Tell if doc module is called for 'member', ... - * @return int 1=OK, 0=KO + * @param string $srctemplatepath Full path of source filename for generator using a template file + * @param string $mode Tell if doc module is called for 'member', ... + * @return int 1=OK, 0=KO */ function write_file($arrayofrecords,$outputlangs,$srctemplatepath,$mode='member') { @@ -261,8 +261,8 @@ class pdf_standard extends CommonStickerGenerator if (empty($mode) || $mode == 'member') { - $title=$outputlangs->transnoentities('MembersCards'); - $keywords=$outputlangs->transnoentities('MembersCards')." ".$outputlangs->transnoentities("Foundation")." ".$outputlangs->convToOutputCharset($mysoc->name); + $title=$outputlangs->transnoentities('MembersCards'); + $keywords=$outputlangs->transnoentities('MembersCards')." ".$outputlangs->transnoentities("Foundation")." ".$outputlangs->convToOutputCharset($mysoc->name); $outputdir=$conf->adherent->dir_temp; } else @@ -284,14 +284,14 @@ class pdf_standard extends CommonStickerGenerator } } - $pdf=pdf_getInstance($this->format,$this->Tformat['metric']); + $pdf=pdf_getInstance($this->format,$this->Tformat['metric']); - if (class_exists('TCPDF')) - { - $pdf->setPrintHeader(false); - $pdf->setPrintFooter(false); - } - $pdf->SetFont(pdf_getPDFFont($outputlangs)); + if (class_exists('TCPDF')) + { + $pdf->setPrintHeader(false); + $pdf->setPrintFooter(false); + } + $pdf->SetFont(pdf_getPDFFont($outputlangs)); $pdf->SetTitle($title); $pdf->SetSubject($title); @@ -344,7 +344,7 @@ class pdf_standard extends CommonStickerGenerator $type=dol_mimetype($filename); //if ($encoding) header('Content-Encoding: '.$encoding); - if ($type) header('Content-Type: '.$type); + if ($type) header('Content-Type: '.$type); if ($attachment) header('Content-Disposition: attachment; filename="'.$filename.'"'); else header('Content-Disposition: inline; filename="'.$filename.'"'); diff --git a/htdocs/core/modules/member/modules_cards.php b/htdocs/core/modules/member/modules_cards.php index ab5604f2f99..9a8b931125d 100644 --- a/htdocs/core/modules/member/modules_cards.php +++ b/htdocs/core/modules/member/modules_cards.php @@ -1,8 +1,8 @@ - * Copyright (C) 2004-2009 Laurent Destailleur - * Copyright (C) 2004 Eric Seigne - * Copyright (C) 2005-2009 Regis Houssin + * Copyright (C) 2004-2009 Laurent Destailleur + * Copyright (C) 2004 Eric Seigne + * Copyright (C) 2005-2009 Regis Houssin * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -11,7 +11,7 @@ * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License @@ -20,9 +20,9 @@ */ /** - * \file htdocs/core/modules/member/modules_cards.php - * \ingroup member - * \brief File of parent class of document generator for members cards. + * \file htdocs/core/modules/member/modules_cards.php + * \ingroup member + * \brief File of parent class of document generator for members cards. */ require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php'; @@ -38,11 +38,11 @@ class ModelePDFCards /** - * Return list of active generation modules + * Return list of active generation modules * - * @param DoliDB $db Database handler - * @param integer $maxfilenamelength Max length of value to show - * @return array List of templates + * @param DoliDB $db Database handler + * @param integer $maxfilenamelength Max length of value to show + * @return array List of templates */ function liste_modeles($db,$maxfilenamelength=0) { @@ -62,13 +62,13 @@ class ModelePDFCards /** * Cree un fichier de cartes de visites en fonction du modele de ADHERENT_CARDS_ADDON_PDF * - * @param DoliDB $db Database handler - * @param array $arrayofmembers Array of members + * @param DoliDB $db Database handler + * @param array $arrayofmembers Array of members * @param string $modele Force modele to use ('' to not force) * @param Translate $outputlangs Object langs to use for translation - * @param string $outputdir Output directory - * @param string $template pdf generenate document class to use default 'standard' - * @return int <0 if KO, >0 if OK + * @param string $outputdir Output directory + * @param string $template pdf generenate document class to use default 'standard' + * @return int <0 if KO, >0 if OK */ function members_card_pdf_create($db, $arrayofmembers, $modele, $outputlangs, $outputdir='', $template='standard') { @@ -118,7 +118,7 @@ function members_card_pdf_create($db, $arrayofmembers, $modele, $outputlangs, $o foreach(array('doc','pdf') as $prefix) { $file = $prefix."_".$template.".class.php"; - + // On verifie l'emplacement du modele $file=dol_buildpath($reldir."core/modules/member/doc/".$file,0); if (file_exists($file)) diff --git a/htdocs/core/modules/modBarcode.class.php b/htdocs/core/modules/modBarcode.class.php index 780a3539bf5..0d06c1657c2 100644 --- a/htdocs/core/modules/modBarcode.class.php +++ b/htdocs/core/modules/modBarcode.class.php @@ -1,7 +1,7 @@ - * Copyright (C) 2005-2008 Laurent Destailleur - * Copyright (C) 2005-2009 Regis Houssin +/* Copyright (C) 2005 Rodolphe Quiedeville + * Copyright (C) 2005-2008 Laurent Destailleur + * Copyright (C) 2005-2009 Regis Houssin * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -10,7 +10,7 @@ * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License @@ -18,11 +18,11 @@ */ /** - * \defgroup barcode Module barcode - * \brief Module pour gerer les codes barres - * \file htdocs/core/modules/modBarcode.class.php - * \ingroup barcode,produit - * \brief Fichier de description et activation du module Barcode + * \defgroup barcode Module barcode + * \brief Module pour gerer les codes barres + * \file htdocs/core/modules/modBarcode.class.php + * \ingroup barcode,produit + * \brief Fichier de description et activation du module Barcode */ include_once DOL_DOCUMENT_ROOT .'/core/modules/DolibarrModules.class.php'; @@ -34,9 +34,9 @@ class modBarcode extends DolibarrModules { /** - * Constructor. Define names, constants, directories, boxes, permissions + * Constructor. Define names, constants, directories, boxes, permissions * - * @param DoliDB $db Database handler + * @param DoliDB $db Database handler */ function __construct($db) { @@ -56,7 +56,7 @@ class modBarcode extends DolibarrModules $this->dirs = array("/barcode/temp"); // Dependances - $this->depends = array(); // May be used for product or service or third party module + $this->depends = array(); // May be used for product or service or third party module $this->requiredby = array(); // Config pages @@ -64,12 +64,12 @@ class modBarcode extends DolibarrModules // Constants // Example: $this->const=array(0=>array('MYMODULE_MYNEWCONST1','chaine','myvalue','This is a constant to add',0), - // 1=>array('MYMODULE_MYNEWCONST2','chaine','myvalue','This is another constant to add',0) ); + // 1=>array('MYMODULE_MYNEWCONST2','chaine','myvalue','This is another constant to add',0) ); $this->const = array(); - //$this->const[0] = array('BARCODE_LABEL_LEFT_TEXT','chaine','%BARCODE%','Print barcode on left side of label',1); - //$this->const[1] = array('BARCODE_LABEL_RIGHT_TEXT','chaine','%LOGO%','Print Company logo on right side',1); - //$this->const[2] = array('BARCODE_LABEL_HEADER_TEXT','chaine','My header','Print header text on label',1); - //$this->const[3] = array('BARCODE_LABEL_FOOTER_TEXT','chaine','My footer','Print footer text on label',1); + //$this->const[0] = array('BARCODE_LABEL_LEFT_TEXT','chaine','%BARCODE%','Print barcode on left side of label',1); + //$this->const[1] = array('BARCODE_LABEL_RIGHT_TEXT','chaine','%LOGO%','Print Company logo on right side',1); + //$this->const[2] = array('BARCODE_LABEL_HEADER_TEXT','chaine','My header','Print header text on label',1); + //$this->const[3] = array('BARCODE_LABEL_FOOTER_TEXT','chaine','My footer','Print footer text on label',1); // Boxes $this->boxes = array(); @@ -90,43 +90,43 @@ class modBarcode extends DolibarrModules $this->rights[2][3] = 0; // La permission est-elle une permission par defaut $this->rights[2][4] = 'creer_advance'; - // Main menu entries - $r=0; - $this->menu[$r]=array( 'fk_menu'=>'fk_mainmenu=tools', // Use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode - 'mainmenu'=>'tools', - 'leftmenu'=>'barcodeprint', - 'type'=>'left', // This is a Left menu entry - 'titre'=>'BarCodePrintsheet', - 'url'=>'/barcode/printsheet.php?mainmenu=tools&leftmenu=barcodeprint', - 'langs'=>'products', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory. - 'position'=>200, - 'enabled'=>'$conf->barcode->enabled', // Define condition to show or hide menu entry. Use '$conf->mymodule->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected. - 'perms'=>'1', // Use 'perms'=>'$user->rights->mymodule->level1->level2' if you want your menu with a permission rules - 'target'=>'', - 'user'=>2); // 0=Menu for internal users, 1=external users, 2=both + // Main menu entries + $r=0; + $this->menu[$r]=array( 'fk_menu'=>'fk_mainmenu=tools', // Use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode + 'mainmenu'=>'tools', + 'leftmenu'=>'barcodeprint', + 'type'=>'left', // This is a Left menu entry + 'titre'=>'BarCodePrintsheet', + 'url'=>'/barcode/printsheet.php?mainmenu=tools&leftmenu=barcodeprint', + 'langs'=>'products', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory. + 'position'=>200, + 'enabled'=>'$conf->barcode->enabled', // Define condition to show or hide menu entry. Use '$conf->mymodule->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected. + 'perms'=>'1', // Use 'perms'=>'$user->rights->mymodule->level1->level2' if you want your menu with a permission rules + 'target'=>'', + 'user'=>2); // 0=Menu for internal users, 1=external users, 2=both $r++; - $this->menu[$r]=array( 'fk_menu'=>'fk_mainmenu=home,fk_leftmenu=modulesadmintools', // Use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode - 'type'=>'left', // This is a Left menu entry + $this->menu[$r]=array( 'fk_menu'=>'fk_mainmenu=home,fk_leftmenu=modulesadmintools', // Use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode + 'type'=>'left', // This is a Left menu entry 'titre'=>'MassBarcodeInit', 'url'=>'/barcode/codeinit.php?mainmenu=home&leftmenu=modulesadmintools', - 'langs'=>'products', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory. + 'langs'=>'products', // Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory. 'position'=>300, - 'enabled'=>'$conf->barcode->enabled && $leftmenu=="modulesadmintools"', // Define condition to show or hide menu entry. Use '$conf->mymodule->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected. - 'perms'=>'1', // Use 'perms'=>'$user->rights->mymodule->level1->level2' if you want your menu with a permission rules + 'enabled'=>'$conf->barcode->enabled && $leftmenu=="modulesadmintools"', // Define condition to show or hide menu entry. Use '$conf->mymodule->enabled' if entry must be visible if module is enabled. Use '$leftmenu==\'system\'' to show if leftmenu system is selected. + 'perms'=>'1', // Use 'perms'=>'$user->rights->mymodule->level1->level2' if you want your menu with a permission rules 'target'=>'', - 'user'=>0); // 0=Menu for internal users, 1=external users, 2=both + 'user'=>0); // 0=Menu for internal users, 1=external users, 2=both $r++; } - /** - * Function called when module is enabled. - * The init function add constants, boxes, permissions and menus (defined in constructor) into Dolibarr database. - * It also creates data directories. - * - * @param string $options Options when enabling module ('', 'noboxes') - * @return int 1 if OK, 0 if KO + /** + * Function called when module is enabled. + * The init function add constants, boxes, permissions and menus (defined in constructor) into Dolibarr database. + * It also creates data directories. + * + * @param string $options Options when enabling module ('', 'noboxes') + * @return int 1 if OK, 0 if KO */ function init($options='') { @@ -140,26 +140,26 @@ class modBarcode extends DolibarrModules array('sql'=>"INSERT INTO ".MAIN_DB_PREFIX."c_barcode_type (code, libelle, coder, example, entity) VALUES ('ISBN', 'ISBN', 0, '123456789', __ENTITY__)",'ignoreerror'=>1), array('sql'=>"INSERT INTO ".MAIN_DB_PREFIX."c_barcode_type (code, libelle, coder, example, entity) VALUES ('C39', 'Code 39', 0, '1234567890', __ENTITY__)",'ignoreerror'=>1), array('sql'=>"INSERT INTO ".MAIN_DB_PREFIX."c_barcode_type (code, libelle, coder, example, entity) VALUES ('C128', 'Code 128', 0, 'ABCD1234567890', __ENTITY__)",'ignoreerror'=>1), - array('sql'=>"INSERT INTO ".MAIN_DB_PREFIX."c_barcode_type (code, libelle, coder, example, entity) VALUES ('DATAMATRIX', 'Datamatrix', 0, '1234567xyz', __ENTITY__)",'ignoreerror'=>1), - array('sql'=>"INSERT INTO ".MAIN_DB_PREFIX."c_barcode_type (code, libelle, coder, example, entity) VALUES ('QRCODE', 'Qr Code', 0, 'www.dolibarr.org', __ENTITY__)",'ignoreerror'=>1) + array('sql'=>"INSERT INTO ".MAIN_DB_PREFIX."c_barcode_type (code, libelle, coder, example, entity) VALUES ('DATAMATRIX', 'Datamatrix', 0, '1234567xyz', __ENTITY__)",'ignoreerror'=>1), + array('sql'=>"INSERT INTO ".MAIN_DB_PREFIX."c_barcode_type (code, libelle, coder, example, entity) VALUES ('QRCODE', 'Qr Code', 0, 'www.dolibarr.org', __ENTITY__)",'ignoreerror'=>1) ); return $this->_init($sql, $options); } - /** + /** * Function called when module is disabled. - * Remove from database constants, boxes and permissions from Dolibarr database. + * Remove from database constants, boxes and permissions from Dolibarr database. * Data directories are not deleted * - * @param string $options Options when enabling module ('', 'noboxes') - * @return int 1 if OK, 0 if KO - */ - function remove($options='') - { + * @param string $options Options when enabling module ('', 'noboxes') + * @return int 1 if OK, 0 if KO + */ + function remove($options='') + { $sql = array(); return $this->_remove($sql, $options); - } + } } diff --git a/htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php b/htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php index a6e9bce07c8..0bfb2d849c5 100644 --- a/htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php +++ b/htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php @@ -2,8 +2,8 @@ /* Copyright (C) 2003 Steve Dillon * Copyright (C) 2003 Laurent Passebecq * Copyright (C) 2001-2003 Rodolphe Quiedeville - * Copyright (C) 2002-2003 Jean-Louis Bergamo - * Copyright (C) 2006-2013 Laurent Destailleur + * Copyright (C) 2002-2003 Jean-Louis Bergamo + * Copyright (C) 2006-2013 Laurent Destailleur * Copyright (C) 2015 Francis Appels * * This program is free software; you can redistribute it and/or modify @@ -13,7 +13,7 @@ * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License @@ -21,9 +21,9 @@ */ /** - * \file htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php - * \ingroup core - * \brief Fichier de la classe permettant d'editer au format PDF des etiquettes au format Avery ou personnalise + * \file htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php + * \ingroup core + * \brief Fichier de la classe permettant d'editer au format PDF des etiquettes au format Avery ou personnalise */ require_once DOL_DOCUMENT_ROOT.'/core/class/commonstickergenerator.class.php'; @@ -33,41 +33,41 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commonstickergenerator.class.php'; */ class pdf_standardlabel extends CommonStickerGenerator { - /** + /** * Output a sticker on page at position _COUNTX, _COUNTY (_COUNTX and _COUNTY start from 0) * - * @param PDF $pdf PDF reference - * @param Translate $outputlangs Output langs - * @param array $param Associative array containing label content and optional parameters - * @return void + * @param PDF $pdf PDF reference + * @param Translate $outputlangs Output langs + * @param array $param Associative array containing label content and optional parameters + * @return void */ function addSticker(&$pdf,$outputlangs,$param) { - // use this method in future refactoring - } - + // use this method in future refactoring + } + /** * Output a sticker on page at position _COUNTX, _COUNTY (_COUNTX and _COUNTY start from 0) * - %LOGO% is replace with company logo * - %PHOTO% is replace with photo provided as parameter * - * @param PDF $pdf PDF reference - * @param string $textleft Text left - * @param string $header Header - * @param string $footer Footer - * @param Translate $outputlangs Output langs - * @param string $textright Text right - * @param string $photo Photo (full path to image file used as replacement for key %PHOTOS% into left, right, header or footer text) - * @return void + * @param PDF $pdf PDF reference + * @param string $textleft Text left + * @param string $header Header + * @param string $footer Footer + * @param Translate $outputlangs Output langs + * @param string $textright Text right + * @param string $photo Photo (full path to image file used as replacement for key %PHOTOS% into left, right, header or footer text) + * @return void */ function Add_PDF_label(&$pdf,$textleft,$header,$footer,$outputlangs,$textright='',$photo='') { global $mysoc,$conf,$langs; global $forceimgscalewidth,$forceimgscaleheight; - $imgscalewidth=(empty($forceimgscalewidth)?0.3:$forceimgscalewidth); // Scale of image for width (1=Full width of sticker) - $imgscaleheight=(empty($forceimgscalewidth)?0.5:$forceimgscalewidth); // Scale of image for height (1=Full height of sticker) + $imgscalewidth=(empty($forceimgscalewidth)?0.3:$forceimgscalewidth); // Scale of image for width (1=Full width of sticker) + $imgscaleheight=(empty($forceimgscalewidth)?0.5:$forceimgscalewidth); // Scale of image for height (1=Full height of sticker) - // We are in a new page, then we must add a page + // We are in a new page, then we must add a page if (($this->_COUNTX ==0) && ($this->_COUNTY==0) and (!$this->_First==1)) { $pdf->AddPage(); } @@ -224,121 +224,121 @@ class pdf_standardlabel extends CommonStickerGenerator - /** - * Function to build PDF on disk, then output on HTTP strem. - * - * @param array $arrayofrecords Array of record informations (array('textleft'=>,'textheader'=>, ..., 'id'=>,'photo'=>) - * @param Translate $outputlangs Lang object for output language - * @param string $srctemplatepath Full path of source filename for generator using a template file + /** + * Function to build PDF on disk, then output on HTTP strem. + * + * @param array $arrayofrecords Array of record informations (array('textleft'=>,'textheader'=>, ..., 'id'=>,'photo'=>) + * @param Translate $outputlangs Lang object for output language + * @param string $srctemplatepath Full path of source filename for generator using a template file * @param string $outputdir Output directory for pdf file - * @return int 1=OK, 0=KO - */ - function write_file($arrayofrecords,$outputlangs,$srctemplatepath,$outputdir='') - { - global $user,$conf,$langs,$mysoc,$_Avery_Labels; + * @return int 1=OK, 0=KO + */ + function write_file($arrayofrecords,$outputlangs,$srctemplatepath,$outputdir='') + { + global $user,$conf,$langs,$mysoc,$_Avery_Labels; - $this->code=$srctemplatepath; - $this->Tformat = $_Avery_Labels[$this->code]; - if (empty($this->Tformat)) { dol_print_error('','ErrorBadTypeForCard'.$this->code); exit; } - $this->type = 'pdf'; - $this->format = $this->Tformat['paper-size']; + $this->code=$srctemplatepath; + $this->Tformat = $_Avery_Labels[$this->code]; + if (empty($this->Tformat)) { dol_print_error('','ErrorBadTypeForCard'.$this->code); exit; } + $this->type = 'pdf'; + $this->format = $this->Tformat['paper-size']; - if (! is_object($outputlangs)) $outputlangs=$langs; + if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1'; - $outputlangs->load("main"); - $outputlangs->load("dict"); - $outputlangs->load("companies"); - $outputlangs->load("admin"); + $outputlangs->load("main"); + $outputlangs->load("dict"); + $outputlangs->load("companies"); + $outputlangs->load("admin"); - $title=$outputlangs->transnoentities('Labels'); - $keywords=$title." ".$outputlangs->convToOutputCharset($mysoc->name); + $title=$outputlangs->transnoentities('Labels'); + $keywords=$title." ".$outputlangs->convToOutputCharset($mysoc->name); - $dir = (empty($outputdir)?$conf->adherent->dir_temp:$outputdir); - $filename='tmp_address_sheet.pdf'; - $file = $dir."/".$filename; + $dir = (empty($outputdir)?$conf->adherent->dir_temp:$outputdir); + $filename='tmp_address_sheet.pdf'; + $file = $dir."/".$filename; - if (! file_exists($dir)) - { - if (dol_mkdir($dir) < 0) - { - $this->error=$langs->trans("ErrorCanNotCreateDir",$dir); - return 0; - } - } + if (! file_exists($dir)) + { + if (dol_mkdir($dir) < 0) + { + $this->error=$langs->trans("ErrorCanNotCreateDir",$dir); + return 0; + } + } - $pdf=pdf_getInstance($this->format,$this->Tformat['metric']); + $pdf=pdf_getInstance($this->format,$this->Tformat['metric']); - if (class_exists('TCPDF')) - { - $pdf->setPrintHeader(false); - $pdf->setPrintFooter(false); - } - $pdf->SetFont(pdf_getPDFFont($outputlangs)); + if (class_exists('TCPDF')) + { + $pdf->setPrintHeader(false); + $pdf->setPrintFooter(false); + } + $pdf->SetFont(pdf_getPDFFont($outputlangs)); - $pdf->SetTitle($title); - $pdf->SetSubject($title); - $pdf->SetCreator("Dolibarr ".DOL_VERSION); - $pdf->SetAuthor($outputlangs->convToOutputCharset($user->getFullName($outputlangs))); - $pdf->SetKeyWords($keywords); - if (! empty($conf->global->MAIN_DISABLE_PDF_COMPRESSION)) $pdf->SetCompression(false); + $pdf->SetTitle($title); + $pdf->SetSubject($title); + $pdf->SetCreator("Dolibarr ".DOL_VERSION); + $pdf->SetAuthor($outputlangs->convToOutputCharset($user->getFullName($outputlangs))); + $pdf->SetKeyWords($keywords); + if (! empty($conf->global->MAIN_DISABLE_PDF_COMPRESSION)) $pdf->SetCompression(false); - $pdf->SetMargins(0,0); - $pdf->SetAutoPageBreak(false); + $pdf->SetMargins(0,0); + $pdf->SetAutoPageBreak(false); - $this->_Metric_Doc = $this->Tformat['metric']; - // Permet de commencer l'impression de l'etiquette desiree dans le cas ou la page a deja servie - $posX=1; - $posY=1; - if ($posX > 0) $posX--; else $posX=0; - if ($posY > 0) $posY--; else $posY=0; - $this->_COUNTX = $posX; - $this->_COUNTY = $posY; - $this->_Set_Format($pdf, $this->Tformat); + $this->_Metric_Doc = $this->Tformat['metric']; + // Permet de commencer l'impression de l'etiquette desiree dans le cas ou la page a deja servie + $posX=1; + $posY=1; + if ($posX > 0) $posX--; else $posX=0; + if ($posY > 0) $posY--; else $posY=0; + $this->_COUNTX = $posX; + $this->_COUNTY = $posY; + $this->_Set_Format($pdf, $this->Tformat); - $pdf->Open(); - $pdf->AddPage(); + $pdf->Open(); + $pdf->AddPage(); - // Add each record - foreach($arrayofrecords as $val) - { - // imprime le texte specifique sur la carte - $this->Add_PDF_label($pdf,$val['textleft'],$val['textheader'],$val['textfooter'],$langs,$val['textright'],$val['photo']); - } + // Add each record + foreach($arrayofrecords as $val) + { + // imprime le texte specifique sur la carte + $this->Add_PDF_label($pdf,$val['textleft'],$val['textheader'],$val['textfooter'],$langs,$val['textright'],$val['photo']); + } - //$pdf->SetXY(10, 295); - //$pdf->Cell($this->_Width, $this->_Line_Height, 'XXX',0,1,'C'); + //$pdf->SetXY(10, 295); + //$pdf->Cell($this->_Width, $this->_Line_Height, 'XXX',0,1,'C'); - // Output to file - $pdf->Output($file,'F'); + // Output to file + $pdf->Output($file,'F'); - if (! empty($conf->global->MAIN_UMASK)) - @chmod($file, octdec($conf->global->MAIN_UMASK)); + if (! empty($conf->global->MAIN_UMASK)) + @chmod($file, octdec($conf->global->MAIN_UMASK)); - // Output to http stream - clearstatcache(); + // Output to http stream + clearstatcache(); - $attachment=true; - if (! empty($conf->global->MAIN_DISABLE_FORCE_SAVEAS)) $attachment=false; - $type=dol_mimetype($filename); + $attachment=true; + if (! empty($conf->global->MAIN_DISABLE_FORCE_SAVEAS)) $attachment=false; + $type=dol_mimetype($filename); - //if ($encoding) header('Content-Encoding: '.$encoding); - if ($type) header('Content-Type: '.$type); - if ($attachment) header('Content-Disposition: attachment; filename="'.$filename.'"'); - else header('Content-Disposition: inline; filename="'.$filename.'"'); + //if ($encoding) header('Content-Encoding: '.$encoding); + if ($type) header('Content-Type: '.$type); + if ($attachment) header('Content-Disposition: attachment; filename="'.$filename.'"'); + else header('Content-Disposition: inline; filename="'.$filename.'"'); - // Ajout directives pour resoudre bug IE - header('Cache-Control: Public, must-revalidate'); - header('Pragma: public'); + // Ajout directives pour resoudre bug IE + header('Cache-Control: Public, must-revalidate'); + header('Pragma: public'); - readfile($file); + readfile($file); - return 1; - } + return 1; + } } diff --git a/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php b/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php index 1e5c74c299a..dd70c608f07 100644 --- a/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php +++ b/htdocs/core/modules/printsheet/doc/pdf_tcpdflabel.class.php @@ -2,8 +2,8 @@ /* Copyright (C) 2003 Steve Dillon * Copyright (C) 2003 Laurent Passebecq * Copyright (C) 2001-2003 Rodolphe Quiedeville - * Copyright (C) 2002-2003 Jean-Louis Bergamo - * Copyright (C) 2006-2013 Laurent Destailleur + * Copyright (C) 2002-2003 Jean-Louis Bergamo + * Copyright (C) 2006-2013 Laurent Destailleur * Copyright (C) 2015 Francis Appels * * This program is free software; you can redistribute it and/or modify @@ -13,7 +13,7 @@ * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License @@ -21,9 +21,9 @@ */ /** - * \file htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php - * \ingroup core - * \brief Fichier de la classe permettant d'editer au format PDF des etiquettes au format Avery ou personnalise + * \file htdocs/core/modules/printsheet/doc/pdf_standardlabel.class.php + * \ingroup core + * \brief Fichier de la classe permettant d'editer au format PDF des etiquettes au format Avery ou personnalise */ require_once DOL_DOCUMENT_ROOT.'/core/class/commonstickergenerator.class.php'; @@ -33,83 +33,83 @@ require_once DOL_DOCUMENT_ROOT.'/core/class/commonstickergenerator.class.php'; */ class pdf_tcpdflabel extends CommonStickerGenerator { - // define 1d barcode style - private $_style1d = array( - 'position' => '', - 'align' => 'C', - 'stretch' => false, - 'fitwidth' => true, - 'cellfitalign' => '', - 'border' => false, - 'hpadding' => 'auto', - 'vpadding' => 'auto', - 'fgcolor' => array(0,0,0), - 'bgcolor' => false, - 'text' => true, - 'font' => 'helvetica', - 'fontsize' => 8, - 'stretchtext' => 4 - ); - - // set style for 2d barcode - private $_style2d = array( - 'border' => false, - 'vpadding' => 'auto', - 'hpadding' => 'auto', - 'fgcolor' => array(0,0,0), - 'bgcolor' => false, - 'module_width' => 1, // width of a single module in points - 'module_height' => 1 // height of a single module in points - ); - - private $_align2d = 'N'; - - private $_xres = 0.4; - - /** - * write barcode to pdf - * - * @param PDF $pdf PDF reference - * @param string $code code to print - * @param string $encoding type of barcode - * @param boolean $is2d true if 2d barcode - * @param int $x x position in user units - * @param int $y y position in user units - * @param int $w width in user units - * @param int $h height in user units - */ - private function writeBarcode(&$pdf, $code, $encoding, $is2d, $x, $y, $w, $h) - { - if ($is2d) { - $pdf->write2DBarcode($code, $encoding, $x, $y, $w, $h, $this->_style2d, $this->_align2d); - } else { - $pdf->write1DBarcode($code, $encoding, $x, $y, $w, $h, $this->_xres, $this->_style1d); - } - } - - /** - * Output a sticker on page at position _COUNTX, _COUNTY (_COUNTX and _COUNTY start from 0) - * - * @param PDF $pdf PDF reference - * @param Translate $outputlangs Output langs - * @param array $param Associative array containing label content and optional parameters - * @return void - */ - function addSticker(&$pdf,$outputlangs,$param) - { - global $mysoc,$conf; - - $textleft = $param['textleft']; - $header = $param['textheader']; - $footer = $param['textfooter']; - $textright = $param['textright']; - $code = $param['code']; - $encoding = $param['encoding']; - $is2d = $param['is2d']; - - + // define 1d barcode style + private $_style1d = array( + 'position' => '', + 'align' => 'C', + 'stretch' => false, + 'fitwidth' => true, + 'cellfitalign' => '', + 'border' => false, + 'hpadding' => 'auto', + 'vpadding' => 'auto', + 'fgcolor' => array(0,0,0), + 'bgcolor' => false, + 'text' => true, + 'font' => 'helvetica', + 'fontsize' => 8, + 'stretchtext' => 4 + ); + + // set style for 2d barcode + private $_style2d = array( + 'border' => false, + 'vpadding' => 'auto', + 'hpadding' => 'auto', + 'fgcolor' => array(0,0,0), + 'bgcolor' => false, + 'module_width' => 1, // width of a single module in points + 'module_height' => 1 // height of a single module in points + ); + + private $_align2d = 'N'; + + private $_xres = 0.4; + + /** + * write barcode to pdf + * + * @param PDF $pdf PDF reference + * @param string $code code to print + * @param string $encoding type of barcode + * @param boolean $is2d true if 2d barcode + * @param int $x x position in user units + * @param int $y y position in user units + * @param int $w width in user units + * @param int $h height in user units + */ + private function writeBarcode(&$pdf, $code, $encoding, $is2d, $x, $y, $w, $h) + { + if ($is2d) { + $pdf->write2DBarcode($code, $encoding, $x, $y, $w, $h, $this->_style2d, $this->_align2d); + } else { + $pdf->write1DBarcode($code, $encoding, $x, $y, $w, $h, $this->_xres, $this->_style1d); + } + } + + /** + * Output a sticker on page at position _COUNTX, _COUNTY (_COUNTX and _COUNTY start from 0) + * + * @param PDF $pdf PDF reference + * @param Translate $outputlangs Output langs + * @param array $param Associative array containing label content and optional parameters + * @return void + */ + function addSticker(&$pdf,$outputlangs,$param) + { + global $mysoc,$conf; + + $textleft = $param['textleft']; + $header = $param['textheader']; + $footer = $param['textfooter']; + $textright = $param['textright']; + $code = $param['code']; + $encoding = $param['encoding']; + $is2d = $param['is2d']; + + - // We are in a new page, then we must add a page + // We are in a new page, then we must add a page if (($this->_COUNTX ==0) && ($this->_COUNTY==0) and (!$this->_First==1)) { $pdf->AddPage(); } @@ -164,7 +164,7 @@ class pdf_tcpdflabel extends CommonStickerGenerator if ($textleft == '%LOGO%' && $logo) $pdf->Image($logo, $_PosX+$xleft, $_PosY+$ytop, 0, $logoHeight); else if ($code && !empty($encoding)) { - $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+$xleft, $_PosY+$ytop, $widthtouse, $heighttouse); + $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+$xleft, $_PosY+$ytop, $widthtouse, $heighttouse); } else { @@ -174,12 +174,12 @@ class pdf_tcpdflabel extends CommonStickerGenerator } else if ($textleft!='' && $textright!='') // left and right part { - if (($textleft == '%LOGO%' || $textleft == '%PHOTO%' || $textleft == '%BARCODE%') && !strstr($textright, '%') ) // left part logo/barcode right part text + if (($textleft == '%LOGO%' || $textleft == '%PHOTO%' || $textleft == '%BARCODE%') && !strstr($textright, '%') ) // left part logo/barcode right part text { if ($textleft == '%LOGO%' && $logo) $pdf->Image($logo, $_PosX+$xleft, $_PosY+$ytop, $widthtouse/2, 0); else if ($code && !empty($encoding)) { - $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+$xleft, $_PosY+$ytop, $widthtouse/2, $heighttouse); + $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+$xleft, $_PosY+$ytop, $widthtouse/2, $heighttouse); } $pdf->SetXY($_PosX+($widthtouse/2), $_PosY+$ytop); $pdf->MultiCell($widthtouse/2, $this->_Line_Height, $outputlangs->convToOutputCharset($textright), 0, 'R'); @@ -189,32 +189,32 @@ class pdf_tcpdflabel extends CommonStickerGenerator if ($textright == '%LOGO%' && $logo) $pdf->Image($logo, $_PosX+($widthtouse/2), $_PosY+$ytop, $widthtouse/2, 0); else if ($code && !empty($encoding)) { - $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+($widthtouse/2), $_PosY+$ytop, $widthtouse/2, $heighttouse); + $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+($widthtouse/2), $_PosY+$ytop, $widthtouse/2, $heighttouse); } $pdf->SetXY($_PosX+$xleft, $_PosY+$ytop); $pdf->MultiCell($widthtouse/2, $this->_Line_Height, $outputlangs->convToOutputCharset($textleft),0,'L'); } - else if ($textleft == '%LOGO%') // left part logo right part text/barcode + else if ($textleft == '%LOGO%') // left part logo right part text/barcode { - if ($logo) $pdf->Image($logo, $_PosX+$xleft, $_PosY+$ytop, 0, $logoHeight); - if ($code && !empty($encoding)) - { - $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+$xleft+$logoWidth+1, $_PosY+$ytop, $widthtouse-$logoWidth-1, $heighttouse); - } else { - $pdf->SetXY($_PosX+$xleft+$logoWidth+1, $_PosY+$ytop); - $pdf->MultiCell($widthtouse-$logoWidth1-1, $this->_Line_Height, $outputlangs->convToOutputCharset($textright),0,'R'); - } + if ($logo) $pdf->Image($logo, $_PosX+$xleft, $_PosY+$ytop, 0, $logoHeight); + if ($code && !empty($encoding)) + { + $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+$xleft+$logoWidth+1, $_PosY+$ytop, $widthtouse-$logoWidth-1, $heighttouse); + } else { + $pdf->SetXY($_PosX+$xleft+$logoWidth+1, $_PosY+$ytop); + $pdf->MultiCell($widthtouse-$logoWidth1-1, $this->_Line_Height, $outputlangs->convToOutputCharset($textright),0,'R'); + } } else if ($textright == '%LOGO%') // right part logo left part text/barcode { - if ($logo) $pdf->Image($logo, $_PosX+$xleft+$widthtouse-$logoWidth+1, $_PosY+$ytop, 0, $logoHeight); - if ($code && !empty($encoding)) - { - $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+$xleft, $_PosY+$ytop, $widthtouse-$logoWidth-1, $heighttouse); - } else { - $pdf->SetXY($_PosX+$xleft, $_PosY+$ytop); - $pdf->MultiCell($widthtouse-$logoWidth-1, $this->_Line_Height, $outputlangs->convToOutputCharset($textleft),0,'L'); - } + if ($logo) $pdf->Image($logo, $_PosX+$xleft+$widthtouse-$logoWidth+1, $_PosY+$ytop, 0, $logoHeight); + if ($code && !empty($encoding)) + { + $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+$xleft, $_PosY+$ytop, $widthtouse-$logoWidth-1, $heighttouse); + } else { + $pdf->SetXY($_PosX+$xleft, $_PosY+$ytop); + $pdf->MultiCell($widthtouse-$logoWidth-1, $this->_Line_Height, $outputlangs->convToOutputCharset($textleft),0,'L'); + } } else // text on halft left and text on half right { @@ -230,7 +230,7 @@ class pdf_tcpdflabel extends CommonStickerGenerator if ($textright == '%LOGO%' && $logo) $pdf->Image($logo, $_PosX+$this->_Width-$widthtouse-$xleft, $_PosY+$ytop, 0, $logoHeight); else if ($code && !empty($encoding)) { - $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+$this->_Width-$widthtouse-$xleft, $_PosY+$ytop, $widthtouse, $heighttouse); + $this->writeBarcode($pdf, $code, $encoding, $is2d, $_PosX+$this->_Width-$widthtouse-$xleft, $_PosY+$ytop, $widthtouse, $heighttouse); } else { @@ -265,121 +265,121 @@ class pdf_tcpdflabel extends CommonStickerGenerator - /** - * Function to build PDF on disk, then output on HTTP strem. - * - * @param array $arrayofrecords Array of record informations (array('textleft'=>,'textheader'=>, ..., 'id'=>,'photo'=>) - * @param Translate $outputlangs Lang object for output language - * @param string $srctemplatepath Full path of source filename for generator using a template file + /** + * Function to build PDF on disk, then output on HTTP strem. + * + * @param array $arrayofrecords Array of record informations (array('textleft'=>,'textheader'=>, ..., 'id'=>,'photo'=>) + * @param Translate $outputlangs Lang object for output language + * @param string $srctemplatepath Full path of source filename for generator using a template file * @param string $outputdir Output directory for pdf file - * @return int 1=OK, 0=KO - */ - function write_file($arrayofrecords,$outputlangs,$srctemplatepath,$outputdir='') - { - global $user,$conf,$langs,$mysoc,$_Avery_Labels; + * @return int 1=OK, 0=KO + */ + function write_file($arrayofrecords,$outputlangs,$srctemplatepath,$outputdir='') + { + global $user,$conf,$langs,$mysoc,$_Avery_Labels; - $this->code=$srctemplatepath; - $this->Tformat = $_Avery_Labels[$this->code]; - if (empty($this->Tformat)) { dol_print_error('','ErrorBadTypeForCard'.$this->code); exit; } - $this->type = 'pdf'; - $this->format = $this->Tformat['paper-size']; + $this->code=$srctemplatepath; + $this->Tformat = $_Avery_Labels[$this->code]; + if (empty($this->Tformat)) { dol_print_error('','ErrorBadTypeForCard'.$this->code); exit; } + $this->type = 'pdf'; + $this->format = $this->Tformat['paper-size']; - if (! is_object($outputlangs)) $outputlangs=$langs; + if (! is_object($outputlangs)) $outputlangs=$langs; // For backward compatibility with FPDF, force output charset to ISO, because FPDF expect text to be encoded in ISO if (! empty($conf->global->MAIN_USE_FPDF)) $outputlangs->charset_output='ISO-8859-1'; - $outputlangs->load("main"); - $outputlangs->load("dict"); - $outputlangs->load("companies"); - $outputlangs->load("admin"); + $outputlangs->load("main"); + $outputlangs->load("dict"); + $outputlangs->load("companies"); + $outputlangs->load("admin"); - $title=$outputlangs->transnoentities('Labels'); - $keywords=$title." ".$outputlangs->convToOutputCharset($mysoc->name); + $title=$outputlangs->transnoentities('Labels'); + $keywords=$title." ".$outputlangs->convToOutputCharset($mysoc->name); - $dir = (empty($outputdir)?$conf->adherent->dir_temp:$outputdir); - $filename='tmp_address_sheet.pdf'; - $file = $dir."/".$filename; + $dir = (empty($outputdir)?$conf->adherent->dir_temp:$outputdir); + $filename='tmp_address_sheet.pdf'; + $file = $dir."/".$filename; - if (! file_exists($dir)) - { - if (dol_mkdir($dir) < 0) - { - $this->error=$langs->trans("ErrorCanNotCreateDir",$dir); - return 0; - } - } + if (! file_exists($dir)) + { + if (dol_mkdir($dir) < 0) + { + $this->error=$langs->trans("ErrorCanNotCreateDir",$dir); + return 0; + } + } - $pdf=pdf_getInstance($this->format,$this->Tformat['metric']); + $pdf=pdf_getInstance($this->format,$this->Tformat['metric']); - if (class_exists('TCPDF')) - { - $pdf->setPrintHeader(false); - $pdf->setPrintFooter(false); - } - $pdf->SetFont(pdf_getPDFFont($outputlangs)); + if (class_exists('TCPDF')) + { + $pdf->setPrintHeader(false); + $pdf->setPrintFooter(false); + } + $pdf->SetFont(pdf_getPDFFont($outputlangs)); - $pdf->SetTitle($title); - $pdf->SetSubject($title); - $pdf->SetCreator("Dolibarr ".DOL_VERSION); - $pdf->SetAuthor($outputlangs->convToOutputCharset($user->getFullName($outputlangs))); - $pdf->SetKeyWords($keywords); - if (! empty($conf->global->MAIN_DISABLE_PDF_COMPRESSION)) $pdf->SetCompression(false); + $pdf->SetTitle($title); + $pdf->SetSubject($title); + $pdf->SetCreator("Dolibarr ".DOL_VERSION); + $pdf->SetAuthor($outputlangs->convToOutputCharset($user->getFullName($outputlangs))); + $pdf->SetKeyWords($keywords); + if (! empty($conf->global->MAIN_DISABLE_PDF_COMPRESSION)) $pdf->SetCompression(false); - $pdf->SetMargins(0,0); - $pdf->SetAutoPageBreak(false); + $pdf->SetMargins(0,0); + $pdf->SetAutoPageBreak(false); - $this->_Metric_Doc = $this->Tformat['metric']; - // Permet de commencer l'impression de l'etiquette desiree dans le cas ou la page a deja servie - $posX=1; - $posY=1; - if ($posX > 0) $posX--; else $posX=0; - if ($posY > 0) $posY--; else $posY=0; - $this->_COUNTX = $posX; - $this->_COUNTY = $posY; - $this->_Set_Format($pdf, $this->Tformat); + $this->_Metric_Doc = $this->Tformat['metric']; + // Permet de commencer l'impression de l'etiquette desiree dans le cas ou la page a deja servie + $posX=1; + $posY=1; + if ($posX > 0) $posX--; else $posX=0; + if ($posY > 0) $posY--; else $posY=0; + $this->_COUNTX = $posX; + $this->_COUNTY = $posY; + $this->_Set_Format($pdf, $this->Tformat); - $pdf->Open(); - $pdf->AddPage(); + $pdf->Open(); + $pdf->AddPage(); - // Add each record - foreach($arrayofrecords as $val) - { - // imprime le texte specifique sur la carte - $this->addSticker($pdf, $outputlangs, $val); - } + // Add each record + foreach($arrayofrecords as $val) + { + // imprime le texte specifique sur la carte + $this->addSticker($pdf, $outputlangs, $val); + } - //$pdf->SetXY(10, 295); - //$pdf->Cell($this->_Width, $this->_Line_Height, 'XXX',0,1,'C'); + //$pdf->SetXY(10, 295); + //$pdf->Cell($this->_Width, $this->_Line_Height, 'XXX',0,1,'C'); - // Output to file - $pdf->Output($file,'F'); + // Output to file + $pdf->Output($file,'F'); - if (! empty($conf->global->MAIN_UMASK)) - @chmod($file, octdec($conf->global->MAIN_UMASK)); + if (! empty($conf->global->MAIN_UMASK)) + @chmod($file, octdec($conf->global->MAIN_UMASK)); - // Output to http stream - clearstatcache(); + // Output to http stream + clearstatcache(); - $attachment=true; - if (! empty($conf->global->MAIN_DISABLE_FORCE_SAVEAS)) $attachment=false; - $type=dol_mimetype($filename); + $attachment=true; + if (! empty($conf->global->MAIN_DISABLE_FORCE_SAVEAS)) $attachment=false; + $type=dol_mimetype($filename); - //if ($encoding) header('Content-Encoding: '.$encoding); - if ($type) header('Content-Type: '.$type); - if ($attachment) header('Content-Disposition: attachment; filename="'.$filename.'"'); - else header('Content-Disposition: inline; filename="'.$filename.'"'); + //if ($encoding) header('Content-Encoding: '.$encoding); + if ($type) header('Content-Type: '.$type); + if ($attachment) header('Content-Disposition: attachment; filename="'.$filename.'"'); + else header('Content-Disposition: inline; filename="'.$filename.'"'); - // Ajout directives pour resoudre bug IE - header('Cache-Control: Public, must-revalidate'); - header('Pragma: public'); + // Ajout directives pour resoudre bug IE + header('Cache-Control: Public, must-revalidate'); + header('Pragma: public'); - readfile($file); + readfile($file); - return 1; - } + return 1; + } }