Génération de PDF impossible et page blanche

Une piste, j’ai vu des problèmes avec le modèle FPDFI

Je proposerai de modifier le fichier htdocs/includes/modules/facture/doc/pdf_crabe.modules.php

mettre en commentaire la ligne
//$pdf=pdf_getInstance($this->format);

et insérer la ligne suivante
$pdf = new TCPDF(‹ P ›, ‹ mm ›, ‹ A4 ›, true, ‹ UTF-8 ›, false);

Puis de générer une facture avec le modèle crabe
J’ai fait l’essai chez moi, ça marche aussi.

Merci de ton aide, au moins quelque chose a tester.

Alors je n’arrive pas à trouver cette ligne bizarre !

Voici mon fichier :

<?php /\* Copyright (C) 2004-2009 Laurent Destailleur \* Copyright (C) 2005-2008 Regis Houssin \* Copyright (C) 2008 Raphael Bertrand (Resultic) * \* 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 2 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, write to the Free Software \* Foundation, Inc., 59 Temple Place \- Suite 330, Boston, MA 02111-1307, USA. \* or see http://www.gnu.org/ */ /** * \file htdocs/includes/modules/facture/pdf_crabe.modules.php * \ingroup facture * \brief File of class to generate invoices from crab model * \author Laurent Destailleur * \version $Id: pdf_crabe.modules.php,v 1.244 2009/11/25 12:51:07 eldy Exp $ */ require_once(DOL_DOCUMENT_ROOT."/includes/modules/facture/modules_facture.php"); require_once(DOL_DOCUMENT_ROOT."/product.class.php"); require_once(DOL_DOCUMENT_ROOT."/lib/company.lib.php"); require_once(DOL_DOCUMENT_ROOT."/lib/functions2.lib.php"); /** \class pdf_crabe \brief Classe permettant de generer les factures au modele Crabe */ class pdf_crabe extends ModelePDFFactures { var $emetteur; // Objet societe qui emet /** * \brief Constructor * \param db Database handler */ function pdf_crabe($db) { global $conf,$langs,$mysoc; $langs-\>load("main"); $langs-\>load("bills"); $this-\>db = $db; $this-\>name = "crabe"; $this-\>description = $langs-\>trans('PDFCrabeDescription'); // Dimension page pour format A4 $this-\>type = 'pdf'; $this-\>page_largeur = 210; $this-\>page_hauteur = 297; $this-\>format = array($this-\>page_largeur,$this-\>page_hauteur); $this-\>marge_gauche=10; $this-\>marge_droite=10; $this-\>marge_haute=10; $this-\>marge_basse=10; $this-\>option_logo = 1; // Affiche logo $this-\>option_tva = 0; // Gere option tva FACTURE_TVAOPTION $this-\>option_modereg = 1; // Affiche mode reglement $this-\>option_condreg = 1; // Affiche conditions reglement $this-\>option_codeproduitservice = 1; // Affiche code produit-service $this-\>option_multilang = 1; // Dispo en plusieurs langues $this-\>option_escompte = 1; // Affiche si il y a eu escompte $this-\>option_credit_note = 1; // Support credit notes $this-\>option_freetext = 1; // Support add of a personalised text $this-\>option_draft_watermark = 1; // Support add of a watermark on drafts $this-\>franchise=!$mysoc-\>tva_assuj; // Recupere emmetteur $this-\>emetteur=$mysoc; if (! $this-\>emetteur-\>pays_code) $this-\>emetteur-\>pays_code=substr($langs-\>defaultlang,-2); // By default, if was not defined // Defini position des colonnes $this-\>posxdesc=$this-\>marge_gauche+1; $this-\>posxtva=113; $this-\>posxup=126; $this-\>posxqty=145; $this-\>posxdiscount=162; $this-\>postotalht=174; $this-\>tva=array(); $this-\>atleastoneratenotnull=0; $this-\>atleastonediscount=0; } /** * \brief Fonction generant la facture sur le disque * \param fac Objet facture a generer (ou id si ancienne methode) * \param outputlangs Lang object for output language * \return int 1=ok, 0=ko */ function write_file($fac,$outputlangs) { global $user,$langs,$conf; if (! is_object($outputlangs)) $outputlangs=$langs; // Force output charset to ISO, because, FPDF expect text encoded in ISO $outputlangs-\>charset_output='ISO-8859-1'; $outputlangs-\>load("main"); $outputlangs-\>load("dict"); $outputlangs-\>load("companies"); $outputlangs-\>load("bills"); $outputlangs-\>load("products"); if ($conf-\>facture-\>dir_output) { // Definition de l'objet $fac (pour compatibilite ascendante) if (! is_object($fac)) { $id = $fac; $fac = new Facture($this-\>db,"",$id); $ret=$fac-\>fetch($id); } $fac-\>fetch_client(); $deja_regle = $fac-\>getSommePaiement(); $amount_credit_notes_included = $fac-\>getSumCreditNotesUsed(); $amount_deposits_included = $fac-\>getSumDepositsUsed(); // Definition of $dir and $file if ($fac-\>specimen) { $dir = $conf-\>facture-\>dir_output; $file = $dir . "/SPECIMEN.pdf"; } else { $facref = dol_sanitizeFileName($fac-\>ref); $dir = $conf-\>facture-\>dir_output . "/" . $facref; $file = $dir . "/" . $facref . ".pdf"; } if (! file_exists($dir)) { if (create_exdir($dir) < 0) { $this-\>error=$langs-\>trans("ErrorCanNotCreateDir",$dir); return 0; } } if (file_exists($dir)) { $nblignes = sizeof($fac-\>lignes); // Protection et encryption du pdf if ($conf-\>global-\>PDF_SECURITY_ENCRYPTION) { $pdf=new FPDI_Protection('P','mm',$this-\>format); $pdfrights = array('print'); // Ne permet que l'impression du document $pdfuserpass = ''; // Mot de passe pour l'utilisateur final $pdfownerpass = NULL; // Mot de passe du proprietaire, cree aleatoirement si pas defini $pdf-\>SetProtection($pdfrights,$pdfuserpass,$pdfownerpass); } else { $pdf=new FPDI('P','mm',$this-\>format); } $pdf-\>Open(); $pagenb=0; $pdf-\>SetDrawColor(128,128,128); $pdf-\>SetDrawColor(128,128,128); $pdf-\>SetTitle($outputlangs-\>convToOutputCharset($fac-\>ref)); $pdf-\>SetSubject($outputlangs-\>transnoentities("Invoice")); $pdf-\>SetCreator("Dolibarr ".DOL_VERSION); $pdf-\>SetAuthor($outputlangs-\>convToOutputCharset($user-\>fullname)); $pdf-\>SetKeyWords($outputlangs-\>convToOutputCharset($fac-\>ref)." ".$outputlangs-\>transnoentities("Invoice")); if ($conf-\>global-\>MAIN_DISABLE_PDF_COMPRESSION) $pdf-\>SetCompression(false); $pdf-\>SetMargins($this-\>marge_gauche, $this-\>marge_haute, $this-\>marge_droite); // Left, Top, Right $pdf-\>SetAutoPageBreak(1,0); // Positionne $this-\>atleastonediscount si on a au moins une remise for ($i = 0 ; $i < $nblignes ; $i++) { if ($fac-\>lignes[$i]-\>remise_percent) { $this-\>atleastonediscount++; } } // New page $pdf-\>AddPage(); $pagenb++; $this-\>_pagehead($pdf, $fac, 1, $outputlangs); $pdf-\>SetFont('Arial','', 9); $pdf-\>MultiCell(0, 3, '', 0, 'J'); // Set interline to 3 $pdf-\>SetTextColor(0,0,0); $tab_top = 90; $tab_top_newpage = 50; $tab_height = 110; $tab_height_newpage = 150; // Affiche notes if (! empty($fac-\>note_public)) { $tab_top = 88; $pdf-\>SetFont('Arial','', 9); $pdf-\>SetXY ($this-\>posxdesc-1, $tab_top); $pdf-\>MultiCell(190, 3, $outputlangs-\>convToOutputCharset($fac-\>note_public), 0, 'J'); $nexY = $pdf-\>GetY(); $height_note=$nexY-$tab_top; // Rect prend une longueur en 3eme param $pdf-\>SetDrawColor(192,192,192); $pdf-\>Rect($this-\>marge_gauche, $tab_top-1, $this-\>page_largeur-$this-\>marge_gauche-$this-\>marge_droite, $height_note+1); $tab_height = $tab_height \- $height_note; $tab_top = $nexY+6; } else { $height_note=0; } $iniY = $tab_top \+ 7; $curY = $tab_top \+ 7; $nexY = $tab_top \+ 7; // Loop on each lines for ($i = 0 ; $i < $nblignes ; $i++) { $curY = $nexY; // Description of product line $libelleproduitservice=pdf_getlinedesc($fac-\>lignes[$i],$outputlangs); $pdf-\>SetFont('Arial','', 9); // Dans boucle pour gerer multi-page $pdf-\>writeHTMLCell($this-\>posxtva-$this-\>posxdesc-1, 3, $this-\>posxdesc-1, $curY, $outputlangs-\>convToOutputCharset($libelleproduitservice), 0, 1); $pdf-\>SetFont('Arial','', 9); // On repositionne la police par defaut $nexY = $pdf-\>GetY(); /\* MODIF : TVA if (empty($conf-\>global-\>MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT)) { $pdf-\>SetXY ($this-\>posxtva, $curY); $pdf-\>MultiCell($this-\>posxup-$this-\>posxtva-1, 3, vatrate($fac-\>lignes[$i]-\>tva_tx,1,$fac-\>lignes[$i]-\>info_bits), 0, 'R'); } */ // Prix unitaire HT avant remise $pdf-\>SetXY ($this-\>posxup, $curY); $pdf-\>MultiCell($this-\>posxqty-$this-\>posxup-1, 3, price($fac-\>lignes[$i]-\>subprice), 0, 'R', 0); // Quantity $pdf-\>SetXY ($this-\>posxqty, $curY); $pdf-\>MultiCell($this-\>posxdiscount-$this-\>posxqty-1, 3, $fac-\>lignes[$i]-\>qty, 0, 'R'); // Enough for 6 chars // Remise sur ligne $pdf-\>SetXY ($this-\>posxdiscount, $curY); if ($fac-\>lignes[$i]-\>remise_percent) { $pdf-\>MultiCell($this-\>postotalht-$this-\>posxdiscount-1, 3, dol_print_reduction($fac-\>lignes[$i]-\>remise_percent,$outputlangs), 0, 'R'); } // Total HT ligne $pdf-\>SetXY ($this-\>postotalht, $curY); $total = price($fac-\>lignes[$i]-\>total_ht); $pdf-\>MultiCell(26, 3, $total, 0, 'R', 0); // Collecte des totaux par valeur de tva dans $this-\>tva["taux"]=total_tva $tvaligne=$fac-\>lignes[$i]-\>total_tva; if ($fac-\>remise_percent) $tvaligne-=($tvaligne*$fac-\>remise_percent)/100; $vatrate=(string) $fac-\>lignes[$i]-\>tva_tx; if (($fac-\>lignes[$i]-\>info_bits & 0x01) == 0x01) $vatrate.='*'; $this-\>tva[$vatrate] += $tvaligne; $nexY+=2; // Passe espace entre les lignes // Cherche nombre de lignes a venir pour savoir si place suffisante if ($i < ($nblignes \- 1)) // If it's not last line { //on recupere la description du produit suivant $follow_descproduitservice = $fac-\>lignes[$i+1]-\>desc; //on compte le nombre de ligne afin de verifier la place disponible (largeur de ligne 52 caracteres) $nblineFollowDesc = dol_nboflines_bis($follow_descproduitservice,52,$outputlangs-\>charset_output)*4; // Et si on affiche dates de validite, on ajoute encore une ligne if ($fac-\>lignes[$i]-\>date_start && $fac-\>lignes[$i]-\>date_end) { $nblineFollowDesc += 4; } } else // If it's last line { $nblineFollowDesc = 0; } // Test if a new page is required if ($pagenb == 1) { $tab_top_in_current_page=$tab_top; $tab_height_in_current_page=$tab_height; } else { $tab_top_in_current_page=$tab_top_newpage; $tab_height_in_current_page=$tab_height_newpage; } if (($nexY+$nblineFollowDesc) \> ($tab_top_in_current_page+$tab_height_in_current_page) && $i < ($nblignes \- 1)) { if ($pagenb == 1) { $this-\>_tableau($pdf, $tab_top, $tab_height \+ 20, $nexY, $outputlangs); } else { $this-\>_tableau($pdf, $tab_top_newpage, $tab_height_newpage, $nexY, $outputlangs); } $this-\>_pagefoot($pdf,$fac,$outputlangs); // New page $pdf-\>AddPage(); $pagenb++; $this-\>_pagehead($pdf, $fac, 0, $outputlangs); $pdf-\>SetFont('Arial','', 9); $pdf-\>MultiCell(0, 3, '', 0, 'J'); // Set interline to 3 $pdf-\>SetTextColor(0,0,0); $nexY = $tab_top_newpage \+ 7; } } // Show square if ($pagenb == 1) { $this-\>_tableau($pdf, $tab_top, $tab_height, $nexY, $outputlangs); $bottomlasttab=$tab_top \+ $tab_height \+ 1; } else { $this-\>_tableau($pdf, $tab_top_newpage, $tab_height_newpage, $nexY, $outputlangs); $bottomlasttab=$tab_top_newpage \+ $tab_height_newpage \+ 1; } // Affiche zone infos $posy=$this-\>_tableau_info($pdf, $fac, $bottomlasttab, $outputlangs); // Affiche zone totaux $posy=$this-\>_tableau_tot($pdf, $fac, $deja_regle, $bottomlasttab, $outputlangs); // Affiche zone versements if ($deja_regle || $amount_credit_notes_included || $amount_deposits_included) { $posy=$this-\>_tableau_versements($pdf, $fac, $posy, $outputlangs); } // Pied de page $this-\>_pagefoot($pdf,$fac,$outputlangs); $pdf-\>AliasNbPages(); $pdf-\>Close(); $pdf-\>Output($file); if (! empty($conf-\>global-\>MAIN_UMASK)) @chmod($file, octdec($conf-\>global-\>MAIN_UMASK)); return 1; // Pas d'erreur } else { $this-\>error=$langs-\>trans("ErrorCanNotCreateDir",$dir); return 0; } } else { $this-\>error=$langs-\>trans("ErrorConstantNotDefined","FAC_OUTPUTDIR"); return 0; } $this-\>error=$langs-\>trans("ErrorUnknown"); return 0; // Erreur par defaut } /** \* \brief Affiche tableau des versement \* \param pdf Objet PDF \* \param fac Objet facture * \param posy Position y in PDF * \param outputlangs Object langs for output * \return int <0 if KO, \>0 if OK */ function _tableau_versements(&$pdf, $fac, $posy, $outputlangs) { $tab3_posx = 120; $tab3_top = $posy \+ 8; $tab3_width = 80; $tab3_height = 4; $pdf-\>SetFont('Arial','',8); $pdf-\>SetXY ($tab3_posx, $tab3_top \- 5); $pdf-\>MultiCell(60, 5, $outputlangs-\>transnoentities("PaymentsAlreadyDone"), 0, 'L', 0); $pdf-\>line($tab3_posx, $tab3_top-1+$tab3_height, $tab3_posx+$tab3_width, $tab3_top-1+$tab3_height); $pdf-\>SetFont('Arial','',6); $pdf-\>SetXY ($tab3_posx, $tab3_top ); $pdf-\>MultiCell(20, 3, $outputlangs-\>transnoentities("Payment"), 0, 'L', 0); $pdf-\>SetXY ($tab3_posx+21, $tab3_top ); $pdf-\>MultiCell(20, 3, $outputlangs-\>transnoentities("Amount"), 0, 'L', 0); $pdf-\>SetXY ($tab3_posx+41, $tab3_top ); $pdf-\>MultiCell(20, 3, $outputlangs-\>transnoentities("Type"), 0, 'L', 0); $pdf-\>SetXY ($tab3_posx+60, $tab3_top ); $pdf-\>MultiCell(20, 3, $outputlangs-\>transnoentities("Num"), 0, 'L', 0); $y=0; $pdf-\>SetFont('Arial','',6); // Loop on each deposits and credit notes included $sql = "SELECT re.rowid, re.amount_ht, re.amount_tva, re.amount_ttc,"; $sql.= " re.description, re.fk_facture_source, re.fk_facture_source,"; $sql.= " f.type, f.datef"; $sql.= " FROM ".MAIN_DB_PREFIX ."societe_remise_except as re, ".MAIN_DB_PREFIX ."facture as f"; $sql.= " WHERE re.fk_facture_source = f.rowid AND re.fk_facture = ".$fac-\>id; $resql=$this-\>db-\>query($sql); if ($resql) { $num = $this-\>db-\>num_rows($resql); $i=0; $invoice=new Facture($this-\>db); while ($i < $num) { $y+=3; $obj = $this-\>db-\>fetch_object($resql); if ($obj-\>type == 2) $text=$outputlangs-\>trans("CreditNote"); elseif ($obj-\>type == 3) $text=$outputlangs-\>trans("Deposit"); else $text=$outputlangs-\>trans("UnknownType"); $invoice-\>fetch($obj-\>fk_facture_source); $pdf-\>SetXY ($tab3_posx, $tab3_top+$y ); $pdf-\>MultiCell(20, 3, dol_print_date($obj-\>datef,'day',false,$outputlangs,true), 0, 'L', 0); $pdf-\>SetXY ($tab3_posx+21, $tab3_top+$y); $pdf-\>MultiCell(20, 3, price($obj-\>amount_ttc), 0, 'L', 0); $pdf-\>SetXY ($tab3_posx+41, $tab3_top+$y); $pdf-\>MultiCell(20, 3, $text, 0, 'L', 0); $pdf-\>SetXY ($tab3_posx+60, $tab3_top+$y); $pdf-\>MultiCell(20, 3, $invoice-\>ref, 0, 'L', 0); $pdf-\>line($tab3_posx, $tab3_top+$y+3, $tab3_posx+$tab3_width, $tab3_top+$y+3 ); $i++; } } else { $this-\>error=$this-\>db-\>lasterror(); dol_syslog($this-\>db,$this-\>error, LOG_ERR); return -1; } // Loop on each payment $sql = "SELECT ".$this-\>db-\>pdate("p.datep")."as date, pf.amount as amount, p.fk_paiement as type, p.num_paiement as num "; $sql.= "FROM ".MAIN_DB_PREFIX."paiement as p, ".MAIN_DB_PREFIX."paiement_facture as pf "; $sql.= "WHERE pf.fk_paiement = p.rowid and pf.fk_facture = ".$fac-\>id." "; $sql.= "ORDER BY p.datep"; $resql=$this-\>db-\>query($sql); if ($resql) { $num = $this-\>db-\>num_rows($resql); $i=0; while ($i < $num) { $y+=3; $row = $this-\>db-\>fetch_row($resql); $pdf-\>SetXY ($tab3_posx, $tab3_top+$y ); $pdf-\>MultiCell(20, 3, dol_print_date($row[0],'day',false,$outputlangs,true), 0, 'L', 0); $pdf-\>SetXY ($tab3_posx+21, $tab3_top+$y); $pdf-\>MultiCell(20, 3, price($row[1]), 0, 'L', 0); $pdf-\>SetXY ($tab3_posx+41, $tab3_top+$y); switch ($row[2]) { case 1: $oper = 'TIP'; break; case 2: $oper = 'VIR'; break; case 3: $oper = 'PRE'; break; case 4: $oper = 'LIQ'; break; case 5: $oper = 'VAD'; break; case 6: $oper = 'CB'; break; case 7: $oper = 'CHQ'; break; } $pdf-\>MultiCell(20, 3, $oper, 0, 'L', 0); $pdf-\>SetXY ($tab3_posx+60, $tab3_top+$y); $pdf-\>MultiCell(20, 3, $row[3], 0, 'L', 0); $pdf-\>line($tab3_posx, $tab3_top+$y+3, $tab3_posx+$tab3_width, $tab3_top+$y+3 ); $i++; } } else { $this-\>error=$this-\>db-\>lasterror(); dol_syslog($this-\>db,$this-\>error, LOG_ERR); return -1; } } /** * \brief Affiche infos divers * \param pdf Objet PDF * \param object Objet facture * \param posy Position depart * \param outputlangs Objet langs * \return y Position pour suite */ function _tableau_info(&$pdf, $object, $posy, $outputlangs) { global $conf; $pdf-\>SetFont('Arial','', 9); // If France, show VAT mention if not applicable if ($this-\>emetteur-\>pays_code == 'FR' && $this-\>franchise == 1) { $pdf-\>SetFont('Arial','B',8); $pdf-\>SetXY($this-\>marge_gauche, $posy); $pdf-\>MultiCell(100, 3, $outputlangs-\>transnoentities("VATIsNotUsedForInvoice"), 0, 'L', 0); $posy=$pdf-\>GetY()+4; } // Show payments conditions if ($object-\>type != 2 && ($object-\>cond_reglement_code || $object-\>cond_reglement)) { $pdf-\>SetFont('Arial','B',8); $pdf-\>SetXY($this-\>marge_gauche, $posy); $titre = $outputlangs-\>transnoentities("PaymentConditions").':'; $pdf-\>MultiCell(80, 5, $titre, 0, 'L'); $pdf-\>SetFont('Arial','',8); $pdf-\>SetXY(50, $posy); $lib_condition_paiement=$outputlangs-\>transnoentities("PaymentCondition".$object-\>cond_reglement_code)!=('PaymentCondition'.$object-\>cond_reglement_code)?$outputlangs-\>transnoentities("PaymentCondition".$object-\>cond_reglement_code):$outputlangs-\>convToOutputCharset($object-\>cond_reglement); $pdf-\>MultiCell(80, 5, $lib_condition_paiement,0,'L'); $posy=$pdf-\>GetY()+3; } if ($object-\>type != 2) { // Check a payment mode is defined if (empty($object-\>mode_reglement_code) && ! $conf-\>global-\>FACTURE_CHQ_NUMBER && ! $conf-\>global-\>FACTURE_RIB_NUMBER) { $pdf-\>SetXY($this-\>marge_gauche, $posy); $pdf-\>SetTextColor(200,0,0); $pdf-\>SetFont('Arial','B',8); $pdf-\>MultiCell(90, 3, $outputlangs-\>transnoentities("ErrorNoPaiementModeConfigured"),0,'L',0); $pdf-\>SetTextColor(0,0,0); $posy=$pdf-\>GetY()+1; } // Sown payment mode if ($object-\>mode_reglement_code && $object-\>mode_reglement_code != 'CHQ' && $object-\>mode_reglement_code != 'VIR') { $pdf-\>SetFont('Arial','B',8); $pdf-\>SetXY($this-\>marge_gauche, $posy); $titre = $outputlangs-\>transnoentities("PaymentMode").':'; $pdf-\>MultiCell(80, 5, $titre, 0, 'L'); $pdf-\>SetFont('Arial','',8); $pdf-\>SetXY(50, $posy); $lib_mode_reg=$outputlangs-\>transnoentities("PaymentType".$object-\>mode_reglement_code)!=('PaymentType'.$object-\>mode_reglement_code)?$outputlangs-\>transnoentities("PaymentType".$object-\>mode_reglement_code):$outputlangs-\>convToOutputCharset($object-\>mode_reglement); $pdf-\>MultiCell(80, 5, $lib_mode_reg,0,'L'); $posy=$pdf-\>GetY()+2; } // Show payment mode CHQ if (empty($object-\>mode_reglement_code) || $object-\>mode_reglement_code == 'CHQ') { // Si mode reglement non force ou si force a CHQ if ($conf-\>global-\>FACTURE_CHQ_NUMBER) { if ($conf-\>global-\>FACTURE_CHQ_NUMBER \> 0) { $account = new Account($this-\>db); $account-\>fetch($conf-\>global-\>FACTURE_CHQ_NUMBER); $pdf-\>SetXY($this-\>marge_gauche, $posy); $pdf-\>SetFont('Arial','B',8); $pdf-\>MultiCell(90, 3, $outputlangs-\>transnoentities('PaymentByChequeOrderedTo',$account-\>proprio).':',0,'L',0); $posy=$pdf-\>GetY()+1; $pdf-\>SetXY($this-\>marge_gauche, $posy); $pdf-\>SetFont('Arial','',8); $pdf-\>MultiCell(80, 3, $outputlangs-\>convToOutputCharset($account-\>adresse_proprio), 0, 'L', 0); $posy=$pdf-\>GetY()+2; } if ($conf-\>global-\>FACTURE_CHQ_NUMBER == -1) { $pdf-\>SetXY($this-\>marge_gauche, $posy); $pdf-\>SetFont('Arial','B',8); $pdf-\>MultiCell(90, 3, $outputlangs-\>transnoentities('PaymentByChequeOrderedToShort').' '.$outputlangs-\>convToOutputCharset($this-\>emetteur-\>nom).' '.$outputlangs-\>transnoentities('SendTo').':',0,'L',0); $posy=$pdf-\>GetY()+1; $pdf-\>SetXY($this-\>marge_gauche, $posy); $pdf-\>SetFont('Arial','',8); $pdf-\>MultiCell(80, 3, $outputlangs-\>convToOutputCharset($this-\>emetteur-\>adresse_full), 0, 'L', 0); $posy=$pdf-\>GetY()+2; } } } // If payment mode not forced or forced to VIR, show payment with BAN if (empty($object-\>mode_reglement_code) || $object-\>mode_reglement_code == 'VIR') { if (! empty($conf-\>global-\>FACTURE_RIB_NUMBER)) { $account = new Account($this-\>db); $account-\>fetch($conf-\>global-\>FACTURE_RIB_NUMBER); $curx=$this-\>marge_gauche; $cury=$posy; $posy=pdf_bank($pdf,$outputlangs,$curx,$cury,$account); $posy+=2; } } } return $posy; } /** * \brief Affiche le total a payer * \param pdf Objet PDF * \param object Objet facture * \param deja_regle Montant deja regle * \param posy Position depart * \param outputlangs Objet langs * \return y Position pour suite */ function _tableau_tot(&$pdf, $object, $deja_regle, $posy, $outputlangs) { global $conf; $tab2_top = $posy; $tab2_hl = 5; $tab2_height = $tab2_hl \* 4; $pdf-\>SetFont('Arial','', 9); // Tableau total $lltot = 200; $col1x = 120; $col2x = 170; $largcol2 = $lltot \- $col2x; $useborder=0; $index = 0; // Total HT $pdf-\>SetFillColor(255,255,255); $pdf-\>SetXY ($col1x, $tab2_top \+ 0); $pdf-\>MultiCell($col2x-$col1x, $tab2_hl, $outputlangs-\>transnoentities("TotalHT"), 0, 'L', 1); $pdf-\>SetXY ($col2x, $tab2_top \+ 0); $pdf-\>MultiCell($largcol2, $tab2_hl, price($object-\>total_ht \+ $object-\>remise), 0, 'R', 1); // Show VAT by rates and total $pdf-\>SetFillColor(248,248,248); $this-\>atleastoneratenotnull=0; if (empty($conf-\>global-\>MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT)) { foreach( $this-\>tva as $tvakey =\> $tvaval ) { if ($tvakey) // On affiche pas taux 0 { $this-\>atleastoneratenotnull++; $index++; $pdf-\>SetXY ($col1x, $tab2_top \+ $tab2_hl \* $index); $tvacompl=''; if (preg_match('/\*/',$tvakey)) { $tvakey=str_replace('*','',$tvakey); $tvacompl = " (".$outputlangs-\>transnoentities("NonPercuRecuperable").")"; } $totalvat =$outputlangs-\>transnoentities("TotalVAT").' '; $totalvat.=vatrate($tvakey,1).$tvacompl; $pdf-\>MultiCell($col2x-$col1x, $tab2_hl, $totalvat, 0, 'L', 1); $pdf-\>SetXY ($col2x, $tab2_top \+ $tab2_hl \* $index); $pdf-\>MultiCell($largcol2, $tab2_hl, price($tvaval), 0, 'R', 1); } } if (! $this-\>atleastoneratenotnull) // If no vat at all { $index++; $pdf-\>SetXY ($col1x, $tab2_top \+ $tab2_hl \* $index); $pdf-\>MultiCell($col2x-$col1x, $tab2_hl, $outputlangs-\>transnoentities("TotalVAT"), 0, 'L', 1); $pdf-\>SetXY ($col2x, $tab2_top \+ $tab2_hl \* $index); $pdf-\>MultiCell($largcol2, $tab2_hl, price($object-\>total_tva), 0, 'R', 1); } } // Total TTC if (empty($conf-\>global-\>MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT)) { $index++; $pdf-\>SetXY ($col1x, $tab2_top \+ $tab2_hl \* $index); $pdf-\>SetTextColor(0,0,60); $pdf-\>SetFillColor(224,224,224); $text=$outputlangs-\>transnoentities("TotalTTC"); if ($object-\>type == 2) $text=$outputlangs-\>transnoentities("TotalTTCToYourCredit"); $pdf-\>MultiCell($col2x-$col1x, $tab2_hl, $text, $useborder, 'L', 1); $pdf-\>SetXY ($col2x, $tab2_top \+ $tab2_hl \* $index); $pdf-\>MultiCell($largcol2, $tab2_hl, price($object-\>total_ttc), $useborder, 'R', 1); } $pdf-\>SetTextColor(0,0,0); $creditnoteamount=$object-\>getSumCreditNotesUsed(); $depositsamount=$object-\>getSumDepositsUsed(); //print "x".$creditnoteamount."-".$depositsamount;exit; $resteapayer = price2num($object-\>total_ttc \- $deja_regle \- $creditnoteamount \- $depositsamount, 'MT'); if ($object-\>paye) $resteapayer=0; if ($deja_regle \> 0 || $creditnoteamount \> 0 || $depositsamount \> 0) { // Already paid \+ Deposits $index++; $pdf-\>SetXY ($col1x, $tab2_top \+ $tab2_hl \* $index); $pdf-\>MultiCell($col2x-$col1x, $tab2_hl, $outputlangs-\>transnoentities("Paid"), 0, 'L', 0); $pdf-\>SetXY ($col2x, $tab2_top \+ $tab2_hl \* $index); $pdf-\>MultiCell($largcol2, $tab2_hl, price($deja_regle \+ $depositsamount), 0, 'R', 0); // Credit note if ($creditnoteamount) { $index++; $pdf-\>SetXY ($col1x, $tab2_top \+ $tab2_hl \* $index); $pdf-\>MultiCell($col2x-$col1x, $tab2_hl, $outputlangs-\>transnoentities("CreditNotes"), 0, 'L', 0); $pdf-\>SetXY ($col2x, $tab2_top \+ $tab2_hl \* $index); $pdf-\>MultiCell($largcol2, $tab2_hl, price($creditnoteamount), 0, 'R', 0); } // Escompte if ($object-\>close_code == 'discount_vat') { $index++; $pdf-\>SetFillColor(255,255,255); $pdf-\>SetXY ($col1x, $tab2_top \+ $tab2_hl \* $index); $pdf-\>MultiCell($col2x-$col1x, $tab2_hl, $outputlangs-\>transnoentities("EscompteOffered"), $useborder, 'L', 1); $pdf-\>SetXY ($col2x, $tab2_top \+ $tab2_hl \* $index); $pdf-\>MultiCell($largcol2, $tab2_hl, price($object-\>total_ttc \- $deja_regle \- $creditnoteamount \- $depositsamount), $useborder, 'R', 1); $resteapayer=0; } $index++; $pdf-\>SetTextColor(0,0,60); $pdf-\>SetFillColor(224,224,224); $pdf-\>SetXY ($col1x, $tab2_top \+ $tab2_hl \* $index); $pdf-\>MultiCell($col2x-$col1x, $tab2_hl, $outputlangs-\>transnoentities("RemainderToPay"), $useborder, 'L', 1); $pdf-\>SetXY ($col2x, $tab2_top \+ $tab2_hl \* $index); $pdf-\>MultiCell($largcol2, $tab2_hl, price($resteapayer), $useborder, 'R', 1); // Fin $pdf-\>SetFont('Arial','', 9); $pdf-\>SetTextColor(0,0,0); } $index++; return ($tab2_top \+ ($tab2_hl \* $index)); } /** \* \brief Affiche la grille des lignes de factures \* \param pdf objet PDF */ function _tableau(&$pdf, $tab_top, $tab_height, $nexY, $outputlangs) { global $conf; // Amount in (at tab_top \- 1) $pdf-\>SetTextColor(0,0,0); $pdf-\>SetFont('Arial','',8); $titre = $outputlangs-\>transnoentities("AmountInCurrency",$outputlangs-\>transnoentitiesnoconv("Currency".$conf-\>monnaie)); $pdf-\>Text($this-\>page_largeur \- $this-\>marge_droite \- $pdf-\>GetStringWidth($titre), $tab_top-1, $titre); $pdf-\>SetDrawColor(128,128,128); // Rect prend une longueur en 3eme param $pdf-\>Rect($this-\>marge_gauche, $tab_top, $this-\>page_largeur-$this-\>marge_gauche-$this-\>marge_droite, $tab_height); // line prend une position y en 3eme param $pdf-\>line($this-\>marge_gauche, $tab_top+5, $this-\>page_largeur-$this-\>marge_droite, $tab_top+5); $pdf-\>SetFont('Arial','',9); $pdf-\>SetXY ($this-\>posxdesc-1, $tab_top+2); $pdf-\>MultiCell(108,2, $outputlangs-\>transnoentities("Designation"),'','L'); if (empty($conf-\>global-\>MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT)) { $pdf-\>line($this-\>posxtva-1, $tab_top, $this-\>posxtva-1, $tab_top \+ $tab_height); $pdf-\>SetXY ($this-\>posxtva-1, $tab_top+2); $pdf-\>MultiCell($this-\>posxup-$this-\>posxtva-1,2, $outputlangs-\>transnoentities("VAT"),'','C'); } $pdf-\>line($this-\>posxup-1, $tab_top, $this-\>posxup-1, $tab_top \+ $tab_height); $pdf-\>SetXY ($this-\>posxup-1, $tab_top+2); $pdf-\>MultiCell(18,2, $outputlangs-\>transnoentities("PriceUHT"),'','C'); $pdf-\>line($this-\>posxqty-1, $tab_top, $this-\>posxqty-1, $tab_top \+ $tab_height); $pdf-\>SetXY ($this-\>posxqty-1, $tab_top+2); $pdf-\>MultiCell($this-\>posxdiscount-$this-\>posxqty-1,2, $outputlangs-\>transnoentities("Qty"),'','C'); $pdf-\>line($this-\>posxdiscount-1, $tab_top, $this-\>posxdiscount-1, $tab_top \+ $tab_height); if ($this-\>atleastonediscount) { $pdf-\>SetXY ($this-\>posxdiscount-1, $tab_top+2); $pdf-\>MultiCell(14,2, $outputlangs-\>transnoentities("ReductionShort"),'','C'); } if ($this-\>atleastonediscount) { $pdf-\>line($this-\>postotalht, $tab_top, $this-\>postotalht, $tab_top \+ $tab_height); } $pdf-\>SetXY ($this-\>postotalht-1, $tab_top+2); $pdf-\>MultiCell(28,2, $outputlangs-\>transnoentities("TotalHT"),'','C'); } /** \* \brief Show header of page \* \param pdf Object PDF \* \param object Object invoice \* \param showaddress 0=no, 1=yes \* \param outputlangs Object lang for output */ function _pagehead(&$pdf, $object, $showaddress=1, $outputlangs) { global $conf,$langs; $outputlangs-\>load("main"); $outputlangs-\>load("bills"); $outputlangs-\>load("propal"); $outputlangs-\>load("companies"); pdf_pagehead($pdf,$outputlangs,$pdf-\>page_hauteur); //Affiche le filigrane brouillon \- Print Draft Watermark if($object-\>statut==0 && (! empty($conf-\>global-\>FACTURE_DRAFT_WATERMARK)) ) { $watermark_angle=atan($this-\>page_hauteur/$this-\>page_largeur); $watermark_x=5; $watermark_y=$this-\>page_hauteur-25; //Set to $this-\>page_hauteur-50 or less if problems $watermark_width=$this-\>page_hauteur; $pdf-\>SetFont('Arial','B',50); $pdf-\>SetTextColor(255,192,203); //rotate $pdf-\>_out(sprintf('q %.5F %.5F %.5F %.5F %.2F %.2F cm 1 0 0 1 %.2F %.2F cm',cos($watermark_angle),sin($watermark_angle),-sin($watermark_angle),cos($watermark_angle),$watermark_x*$pdf-\>k,($pdf-\>h-$watermark_y)*$pdf-\>k,-$watermark_x*$pdf-\>k,-($pdf-\>h-$watermark_y)*$pdf-\>k)); //print watermark $pdf-\>SetXY($watermark_x,$watermark_y); $pdf-\>Cell($watermark_width,25,$outputlangs-\>convToOutputCharset($conf-\>global-\>FACTURE_DRAFT_WATERMARK),0,2,"C",0); //antirotate $pdf-\>_out('Q'); } //Print content $pdf-\>SetTextColor(0,0,60); $pdf-\>SetFont('Arial','B',13); $posy=$this-\>marge_haute; $pdf-\>SetXY($this-\>marge_gauche,$posy); // Logo $logo=$conf-\>mycompany-\>dir_output.'/logos/'.$this-\>emetteur-\>logo; if ($this-\>emetteur-\>logo) { if (is_readable($logo)) { $pdf-\>Image($logo, $this-\>marge_gauche, $posy, 0, 0); } else { $pdf-\>SetTextColor(200,0,0); $pdf-\>SetFont('Arial','B',8); $pdf-\>MultiCell(100, 3, $outputlangs-\>transnoentities("ErrorLogoFileNotFound",$logo), 0, 'L'); $pdf-\>MultiCell(100, 3, $outputlangs-\>transnoentities("ErrorGoToGlobalSetup"), 0, 'L'); } } else { $text=$this-\>emetteur-\>nom; $pdf-\>MultiCell(100, 4, $outputlangs-\>convToOutputCharset($text), 0, 'L'); } $pdf-\>SetFont('Arial','B',13); $pdf-\>SetXY(100,$posy); $pdf-\>SetTextColor(0,0,60); $title=$outputlangs-\>transnoentities("Invoice"); if ($object-\>type == 1) $title=$outputlangs-\>transnoentities("InvoiceReplacement"); if ($object-\>type == 2) $title=$outputlangs-\>transnoentities("InvoiceAvoir"); if ($object-\>type == 3) $title=$outputlangs-\>transnoentities("InvoiceDeposit"); if ($object-\>type == 4) $title=$outputlangs-\>transnoentities("InvoiceProFormat"); $pdf-\>MultiCell(100, 4, $title, '' , 'R'); $pdf-\>SetFont('Arial','B',12); $posy+=6; $pdf-\>SetXY(100,$posy); $pdf-\>SetTextColor(0,0,60); $pdf-\>MultiCell(100, 4, $outputlangs-\>transnoentities("Ref")." : " . $outputlangs-\>convToOutputCharset($object-\>ref), '', 'R'); $posy+=2; $pdf-\>SetFont('Arial','',9); $facidnext=$object-\>getIdReplacingInvoice('validated'); if ($object-\>type == 0 && $facidnext) { $objectreplacing=new Facture($this-\>db); $objectreplacing-\>fetch($facidnext); $posy+=4; $pdf-\>SetXY(100,$posy); $pdf-\>SetTextColor(0,0,60); $pdf-\>MultiCell(100, 3, $outputlangs-\>transnoentities("ReplacementByInvoice").' : '.$outputlangs-\>convToOutputCharset($objectreplacing-\>ref), '', 'R'); } if ($object-\>type == 1) { $objectreplaced=new Facture($this-\>db); $objectreplaced-\>fetch($object-\>fk_facture_source); $posy+=4; $pdf-\>SetXY(100,$posy); $pdf-\>SetTextColor(0,0,60); $pdf-\>MultiCell(100, 3, $outputlangs-\>transnoentities("ReplacementInvoice").' : '.$outputlangs-\>convToOutputCharset($objectreplaced-\>ref), '', 'R'); } if ($object-\>type == 2) { $objectreplaced=new Facture($this-\>db); $objectreplaced-\>fetch($object-\>fk_facture_source); $posy+=4; $pdf-\>SetXY(100,$posy); $pdf-\>SetTextColor(0,0,60); $pdf-\>MultiCell(100, 3, $outputlangs-\>transnoentities("CorrectionInvoice").' : '.$outputlangs-\>convToOutputCharset($objectreplaced-\>ref), '', 'R'); } $posy+=4; $pdf-\>SetXY(100,$posy); $pdf-\>SetTextColor(0,0,60); $pdf-\>MultiCell(100, 3, $outputlangs-\>transnoentities("DateInvoice")." : " . dol_print_date($object-\>date,"day",false,$outpulangs), '', 'R'); if ($object-\>type != 2) { $posy+=4; $pdf-\>SetXY(100,$posy); $pdf-\>SetTextColor(0,0,60); $pdf-\>MultiCell(100, 3, $outputlangs-\>transnoentities("DateEcheance")." : " . dol_print_date($object-\>date_lim_reglement,"day",false,$outputlangs,true), '', 'R'); } if ($object-\>client-\>code_client) { $posy+=4; $pdf-\>SetXY(100,$posy); $pdf-\>SetTextColor(0,0,60); $pdf-\>MultiCell(100, 3, $outputlangs-\>transnoentities("CustomerCode")." : " . $outputlangs-\>transnoentities($object-\>client-\>code_client), '', 'R'); } // Add list of linked orders and proposals $object-\>load_object_linked(); if ($conf-\>propal-\>enabled) { $outputlangs-\>load('propal'); foreach($object-\>linked_object as $key =\> $val) { if ($val['type'] == 'propal') { $newobject=new Propal($this-\>db); $result=$newobject-\>fetch($val['linkid']); if ($result \>= 0) { $posy+=4; $pdf-\>SetXY(100,$posy); $pdf-\>SetFont('Arial','',9); $pdf-\>MultiCell(100, 3, $outputlangs-\>transnoentities("RefProposal")." : ".$outputlangs-\>transnoentities($newobject-\>ref), '', 'R'); } } } } if ($conf-\>commande-\>enabled) { $outputlangs-\>load('orders'); foreach($object-\>linked_object as $key =\> $val) { if ($val['type'] == 'order') { $newobject=new Commande($this-\>db); $result=$newobject-\>fetch($val['linkid']); if ($result \>= 0) { $posy+=4; $pdf-\>SetXY(100,$posy); $pdf-\>SetFont('Arial','',9); $text=$newobject-\>ref; if ($newobject-\>ref_client) $text.=' ('.$newobject-\>ref_client.')'; $pdf-\>MultiCell(100, 3, $outputlangs-\>transnoentities("RefOrder")." : ".$outputlangs-\>transnoentities($text), '', 'R'); } } } } if ($showaddress) { // Sender properties $carac_emetteur = ''; $carac_emetteur .= ($carac_emetteur ? "\n" : '' ).$outputlangs-\>convToOutputCharset($this-\>emetteur-\>adresse); $carac_emetteur .= ($carac_emetteur ? "\n" : '' ).$outputlangs-\>convToOutputCharset($this-\>emetteur-\>cp).' '.$outputlangs-\>convToOutputCharset($this-\>emetteur-\>ville); $carac_emetteur .= "\n"; // Tel if ($this-\>emetteur-\>tel) $carac_emetteur .= ($carac_emetteur ? "\n" : '' ).$outputlangs-\>transnoentities("Phone").": ".$outputlangs-\>convToOutputCharset($this-\>emetteur-\>tel); // Fax if ($this-\>emetteur-\>fax) $carac_emetteur .= ($carac_emetteur ? ($this-\>emetteur-\>tel ? " \- " : "\n") : '' ).$outputlangs-\>transnoentities("Fax").": ".$outputlangs-\>convToOutputCharset($this-\>emetteur-\>fax); // EMail if ($this-\>emetteur-\>email) $carac_emetteur .= ($carac_emetteur ? "\n" : '' ).$outputlangs-\>transnoentities("Email").": ".$outputlangs-\>convToOutputCharset($this-\>emetteur-\>email); // Web if ($this-\>emetteur-\>url) $carac_emetteur .= ($carac_emetteur ? "\n" : '' ).$outputlangs-\>transnoentities("Web").": ".$outputlangs-\>convToOutputCharset($this-\>emetteur-\>url); // Show sender $posy=42; $posx=$this-\>marge_gauche; $hautcadre=40; if (! empty($conf-\>global-\>MAIN_INVERT_SENDER_RECIPIENT)) $posx=118; // Show sender frame $pdf-\>SetTextColor(0,0,0); $pdf-\>SetFont('Arial','',8); $pdf-\>SetXY($posx,$posy-5); $pdf-\>MultiCell(66,5, $outputlangs-\>transnoentities("BillFrom").":"); $pdf-\>SetXY($posx,$posy); $pdf-\>SetFillColor(230,230,230); $pdf-\>MultiCell(82, $hautcadre, "", 0, 'R', 1); $pdf-\>SetTextColor(0,0,60); // Show sender name $pdf-\>SetXY($posx+2,$posy+3); $pdf-\>SetFont('Arial','B',11); $pdf-\>MultiCell(80, 4, $outputlangs-\>convToOutputCharset($this-\>emetteur-\>nom), 0, 'L'); // Show sender information $pdf-\>SetXY($posx+2,$posy+8); $pdf-\>SetFont('Arial','',9); $pdf-\>MultiCell(80, 4, $carac_emetteur); // If BILLING contact defined on invoice, we use it $usecontact=false; //if ($conf-\>global-\>FACTURE_USE_BILL_CONTACT_AS_RECIPIENT) //{ $arrayidcontact=$object-\>getIdContact('external','BILLING'); if (sizeof($arrayidcontact) \> 0) { $usecontact=true; $result=$object-\>fetch_contact($arrayidcontact[0]); } //} if ($usecontact) { // On peut utiliser le nom de la societe du contact if ($conf-\>global-\>FACTURE_USE_COMPANY_NAME_OF_BILL_CONTACT) $socname = $object-\>contact-\>socname; else $socname = $object-\>client-\>nom; $carac_client_name=$outputlangs-\>convToOutputCharset($socname); // Recipient name $carac_client = "\n".$outputlangs-\>convToOutputCharset($object-\>contact-\>getFullName($outputlangs,1,1)); // Recipient properties $carac_client.="\n".$outputlangs-\>convToOutputCharset($object-\>contact-\>address); $carac_client.="\n".$outputlangs-\>convToOutputCharset($object-\>contact-\>cp) . " " . $outputlangs-\>convToOutputCharset($object-\>contact-\>ville)."\n"; if ($object-\>contact-\>pays_code && $object-\>contact-\>pays_code != $this-\>emetteur-\>pays_code) $carac_client.=$outputlangs-\>convToOutputCharset($outputlangs-\>transnoentitiesnoconv("Country".$object-\>contact-\>pays_code))."\n"; } else { // Nom client $carac_client_name=$outputlangs-\>convToOutputCharset($object-\>client-\>nom); // Nom du contact facturation si c'est une societe $arrayidcontact = $object-\>getIdContact('external','BILLING'); if (sizeof($arrayidcontact) \> 0) { $object-\>fetch_contact($arrayidcontact[0]); // On verifie si c'est une societe ou un particulier if( !preg_match('#'.$object-\>contact-\>getFullName($outputlangs,1).'#isU',$object-\>client-\>nom) ) { $carac_client .= "\n".$outputlangs-\>convToOutputCharset($object-\>contact-\>getFullName($outputlangs,1,1)); } } // Recipient $carac_client.="\n".$outputlangs-\>convToOutputCharset($object-\>client-\>adresse); $carac_client.="\n".$outputlangs-\>convToOutputCharset($object-\>client-\>cp) . " " . $outputlangs-\>convToOutputCharset($object-\>client-\>ville)."\n"; if ($object-\>client-\>pays_code && $object-\>client-\>pays_code != $this-\>emetteur-\>pays_code) $carac_client.=$outputlangs-\>convToOutputCharset($outputlangs-\>transnoentitiesnoconv("Country".$object-\>client-\>pays_code))."\n"; } // Intra VAT if ($object-\>client-\>tva_intra) $carac_client.="\n".$outputlangs-\>transnoentities("VATIntraShort").': '.$outputlangs-\>convToOutputCharset($object-\>client-\>tva_intra); // Show recipient $posy=42; $posx=100; if (! empty($conf-\>global-\>MAIN_INVERT_SENDER_RECIPIENT)) $posx=$this-\>marge_gauche; // Show recipient frame $pdf-\>SetTextColor(0,0,0); $pdf-\>SetFont('Arial','',8); $pdf-\>SetXY($posx+2,$posy-5); $pdf-\>MultiCell(80,5, $outputlangs-\>transnoentities("BillTo").":"); $pdf-\>rect($posx, $posy, 100, $hautcadre); // Show recipient name $pdf-\>SetXY($posx+2,$posy+3); $pdf-\>SetFont('Arial','B',11); $pdf-\>MultiCell(96,4, $carac_client_name, 0, 'L'); // Show recipient information $pdf-\>SetFont('Arial','',9); $posy=$pdf-\>GetY()-9; //Auto Y coord readjust for multiline name $pdf-\>SetXY($posx+2,$posy+6); $pdf-\>MultiCell(86,4, $carac_client); } } /** \* \brief Show footer of page \* \param pdf PDF factory \* \param object Object invoice \* \param outputlang Object lang for output \* \remarks Need this-\>emetteur object */ function _pagefoot(&$pdf,$object,$outputlangs) { return pdf_pagefoot($pdf,$outputlangs,'FACTURE_FREE_TEXT',$this-\>emetteur,$this-\>marge_basse,$this-\>marge_gauche,$this-\>page_hauteur,$object); } } ?\>

celle-ci,
$pdf=new FPDI_Protection(‹ P ›,‹ mm ›,$this->format)

Je vois qu’il s’agit d’une vielle version de Dolibarr, ce serait bien de faire aussi un essai avec la 3.1.1

Bon courage

Alors un grand merci à midg qui m’a mis sur la piste !

En effet, après avoir ouvert le fichier en question et en aillant fouiller un petit peu, j’ai procéder à la modification suivante :

Remplacer :

[code]
// Protection et encryption du pdf

			if ($conf->global->PDF_SECURITY_ENCRYPTION)
			{
				$pdf=new FPDI_Protection('P','mm',$this->format);
				$pdfrights = array('print'); // Ne permet que l'impression du document
				$pdfuserpass = ''; // Mot de passe pour l'utilisateur final
				$pdfownerpass = NULL; // Mot de passe du proprietaire, cree aleatoirement si pas defini
				$pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass);
			}
			else
			{ 
				$pdf=new FPDI('P','mm',$this->format);
			}[/code]

Par :

// Protection et encryption du pdf /* if ($conf->global->PDF_SECURITY_ENCRYPTION) { $pdf=new FPDI_Protection('P','mm',$this->format); $pdfrights = array('print'); // Ne permet que l'impression du document $pdfuserpass = ''; // Mot de passe pour l'utilisateur final $pdfownerpass = NULL; // Mot de passe du proprietaire, cree aleatoirement si pas defini $pdf->SetProtection($pdfrights,$pdfuserpass,$pdfownerpass); } else { */ $pdf=new FPDI('P','mm',$this->format); /*}*/

Il s’avère donc que c’est les fonctionnalités de protection et d’encryptage des PDF qui pose un problème sur mon serveur.

Voilà, j’ai réglé le problème le plus important des deux !

Et pour ça je te remercie encore ! Bravo à midg :happy: :happy: :happy:


Donc, j’en profite pour parler du deuxième problème :

A l’ajout de lignes dans mes factures ou mes devis, j’arrive sur une page blanche … Le point positif est que, lorsque je reviens sur ma facture ou mon devis, la ligne est bien ajouté.

Je pense que ce problème est due au message d’erreur suivant :

[Tue Apr 03 11:26:15 2012] [error] [client 78.246.133.158] PHP Deprecated: mysql_db_query(): This function is deprecated; use mysql_query() instead in /var/www/vhosts/doubyweb.com/allsites/doubyweb/dolibarr/lib/databases/mysql.lib.php on line 372

Quelqu’un aurait-il une piste pour ce problème ?

Merci d’avance.

Je viens quand même de tester la solution de midg.

Mais ça ne fonctionne pas … néanmoins ça m’a mis sur la piste et un grand merci pour ça !!!

Merci je vais tenter une mise à jour de dolibarr, d’ici quelques temps par contre il y a beaucoup d’amélioration depuis ou pas ?

Es ce que ça vaut vraiment le coup ?

Mise à part niveau sécurité bien sûr :wink:

Et tiens, une petites questions, voir suggestions :

Le logiciel Ciel dispose de fonctionnalités pour générer automatiquement le montant des charges et cotisations sociales des auto-entrepreneurs (mon cas).

Es ce que dolibar le fait dans les versions plus récentes ?

Je peux enfin faire mes factures, olala !!! Youpiiiiii

Tu peux pas savoir comment je suis content, je me voyais déjà changé de système et j’aimer bien dolibarr !!!

Bravo, Bravo et encore Bravo !!! :tongue: :tongue: :tongue:

J’en reviens à mon deuxième soucis :

A l’ajout de lignes dans mes factures ou mes devis, j’arrive sur une page blanche … Le point positif est que, lorsque je reviens sur ma facture ou mon devis, la ligne est bien ajouté.

Je pense que ce problème est due au message d’erreur suivant :

[Tue Apr 03 11:26:15 2012] [error] [client 78.246.133.158] PHP Deprecated: mysql_db_query(): This function is deprecated; use mysql_query() instead in /var/www/vhosts/doubyweb.com/allsites/doubyweb/dolibarr/lib/databases/mysql.lib.php on line 372

Quelqu’un aurait-il une piste pour ce problème ?

Merci d’avance.

le problème ‹ deprecated › trouve sa source dans une trop vieille version de dolibarr pour ta version de PHP ! Il y a moyen, je crois, d’installer plusieures versions de PHP sur une même machine.

Concernant la fonction de CIEL pour le calcul des charges, elle ne doit pas exister en Dolibarr mais je poserais une nouvelle question sur le forum pour en être sûr !
De même, il vaut mieux créer un nouveau sujet pour des choses différentes à la question posée ici.

Enfin, si tu veux passer dans une dernière version de Dolibarr, ne pas oublier de faire des backup.

les pages blanches qui apparaissent dans les PDF sont provoquées, vraisemblablement, par l’écriture de quelque chose en dehors de la zone de la page !

Bé merci de ta réponse dans ce cas, si je met à jour dolibarr pour la dernière version, ça devrait réglé le problème, normalement bien sûr !

Pour le problème de page blanche, tu n’a pas bien compris mon problème, je vais me ré-expliquer :

Je vais sur une facture et j’ajoute une ligne avec un prix et une quantité, puis je clique sur « ajouter » pour valider.

Et c’est à ce moment là que j’arrive sur une page blanche.

Si je recharge la page, j’accéde bien à nouveau à ma facture ou mon devis et ma ligne c’est bien ajoutée …

J’espère avoir bien explique le soucis.

Maintenant, je peux faire avec mais bon c’est mieux sans le problème.

Une idée ? Merci d’avance :wink:

Merci pour l’explication qui montre que ça n’a rien à voir avec le PDF. Mais je n’ai pas d’idée précise, mais c’est très sûrement corrigé dans les versions suivantes.

C’est normal, ça pourrais servir à quelqu’un qui aurais le problème …

Dans ce cas, je vais faire une mise à jour dès que je pourrais, ça pourrais aussi régler mon problème de page blanche …

En tout cas, merci de ton aide qui m’a était précieuse.

Bonne continuation :silly:

Bonjour,

J’ai rencontré ce problème.

  1. Pour l’ajout d’une ligne dans la facture
  2. Pour la génération des PDF, (brouillons et factures validées).

Chez moi ça venait tout simplement du format de fichier que j’ai utilisé pour le logo de mon association. Ce dernier était au format png. Après l’avoir converti au format JPG, tous mes problèmes ont disparu.

En espérant que ça puisse vous aider, même si la réponse est quelque peu tardive…

Cordialement,

Bonjour,

Je rencontre le même souci de page blanche lorsque je veux réaliser une fusion de plusieurs factures PDF.
Je suis en version 17.0.1.

Dans l’onglet Configuration / PDF de mon dolibarr j’ai le message d’erreur suivant affiché :
*« The not supported and hidden option PDF_SECURITY_ENCRYPTION has been enabled. This means a lof of feature related to PDF will be broken, like mass PDF generation or online signature of PDF. You should disable this option. »

Je ne sait comment résoudre le problème.
J’ai bien trouver le fichier : pdf_crabe.modules.php , mais impossible de trouver les modifications a lui apporter.

Je suis novice et sans aucune expérience dans la programmation ou le langage PHP !

Merci de votre aide.
Luka.

Bonjour,
Et bien comme dit dans le message, il faut enlever l’option PDF_SECURITY_ENCRYPTION dans Configuration/divers.

Cette option, comme il est dit, ne permet pas la fusion de pdf.

Bonjour gaecCAB,

Merci pour ton retour aussi rapide.

Voici les deux lignes qui ce trouve dans mon onglet divers :

Je ne voit pas d’option PDF_SECURITY_ENCRYPTION a supprimer.

Est-ce normale ?

J’ai ajouter une ligne PDF_SECURITY_ENCRYPTION avec une valeur a 0, cela a fonctionné, je ne sait pas si c’est la bonne méthode a effectuer.

Merci pour ton aide et ta rapidité !!