millimètre en 72 dpi function px2mm($px){ return $px*25.4/72; } function txtentities($html){ $trans = get_html_translation_table(HTML_ENTITIES); $trans = array_flip($trans); return strtr($html, $trans); } //////////////////////////////////////////////////////////////////////////// /** * Cette methode surcharge la classe standard fpdf pour permettre la gestion * d'etats et de sous-etats de resultats de requetes dans la base de donnnees. */ class PDF extends fpdf { /** * */ var $footerfont; /** * */ var $footerattribut; /** * */ var $footertaille; ///////////////////////////////////////////////////////////////////////////////// // ajout fonction html // balises reconnues sont
/////////////////////////////////////////////////////////////////////////////////
var $B;
var $I;
var $U;
var $issetcolor;
//
function WriteHTML($html)
{
//Parseur HTML
$html=strip_tags($html,"
"); //supprime tous les tags sauf ceux reconnus
$html=str_replace("\n",' ',$html); //remplace retour à la ligne par un espace
$a=preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE); //éclate la chaîne avec les balises
foreach($a as $i=>$e)
{
if($i%2==0)
{
$this->Write(5,stripslashes(txtentities($e)));
}
else
{
//Balise
if($e[0]=='/')
$this->CloseTag(strtoupper(substr($e,1)));
else
{
//Extraction des attributs
$a2=explode(' ',$e);
$tag=strtoupper(array_shift($a2));
$attr=array();
foreach($a2 as $v)
{
if(preg_match('/([^=]*)=["\']?([^"\']*)/',$v,$a3))
$attr[strtoupper($a3[1])]=$a3[2];
}
$this->OpenTag($tag,$attr);
}
}
}
}
function OpenTag($tag, $attr)
{
//Balise ouvrante
switch($tag){
case 'STRONG':
$this->SetStyle('B',true);
break;
case 'EM':
$this->SetStyle('I',true);
break;
case 'B':
case 'I':
case 'U':
$this->SetStyle($tag,true);
break;
case 'IMG':
if(isset($attr['SRC']) && (isset($attr['WIDTH']) || isset($attr['HEIGHT']))) {
if(!isset($attr['WIDTH']))
$attr['WIDTH'] = 0;
if(!isset($attr['HEIGHT']))
$attr['HEIGHT'] = 0;
$this->Image($attr['SRC'], $this->GetX(), $this->GetY(), px2mm($attr['WIDTH']), px2mm($attr['HEIGHT']));
}
break;
case 'TR':
case 'BLOCKQUOTE':
case 'BR':
$this->Ln(5);
break;
case 'P':
$this->Ln(10);
break;
case 'FONT':
if (isset($attr['COLOR']) && $attr['COLOR']!='') {
$coul=hex2dec($attr['COLOR']);
$this->SetTextColor($coul['R'],$coul['V'],$coul['B']);
$this->issetcolor=true;
}
break;
}
}
function CloseTag($tag)
{
//Balise fermante
if($tag=='STRONG')
$tag='B';
if($tag=='EM')
$tag='I';
if($tag=='B' || $tag=='I' || $tag=='U')
$this->SetStyle($tag,false);
if($tag=='A')
$this->HREF='';
if($tag=='FONT'){
if ($this->issetcolor==true) {
$this->SetTextColor(0);
}
}
}
function SetStyle($tag, $enable)
{
//Modifie le style et sélectionne la police correspondante
$this->$tag+=($enable ? 1 : -1);
$style='';
foreach(array('B','I','U') as $s)
{
if($this->$s>0)
$style.=$s;
}
$this->SetFont('',$style);
}
//fin ajout html///////////////////////////////////////////////////////
function Footer() {
// surcharge fpdf
//Pied de page
//Positionnement a 1,5 cm du bas
$this->SetY(-15);
//Police Arial italique 8
$this->SetFont('Arial', 'I', 8);
//Numero de page
$this->Cell(0, 10, 'Page '.$this->PageNo().'/{nb}', 0, 0, 'C');
}
/**
*
*/
function TextWithRotation($xr, $yr, $txtr, $txtr_angle, $font_angle = 0) {
//nouvelle fonction : ROTATION texte 90 45 .....
$txtr=str_replace(')','\\)',str_replace('(','\\(',str_replace('\\','\\\\',$txtr)));
//
$font_angle+=90+$txtr_angle;
$txtr_angle*=M_PI/180;
$font_angle*=M_PI/180;
//
$txtr_dx=cos($txtr_angle);
$txtr_dy=sin($txtr_angle);
$font_dx=cos($font_angle);
$font_dy=sin($font_angle);
//
$s=sprintf('BT %.2F %.2F %.2F %.2F %.2F %.2F Tm (%s) Tj ET',
$txtr_dx,$txtr_dy,$font_dx,$font_dy,
$xr*$this->k,($this->h-$yr)*$this->k,$txtr);
if ($this->ColorFlag) $s='q '.$this->TextColor.' '.$s.' Q';
$this->_out($s);
}
/**
* fonction transformee
*/
function sousetat(&$db, $etat, $sousetat) {
$GLOBALS['entete_flag']=$sousetat['entete_flag'];
//
$res =& $db->query($sousetat['om_sql']); //***
if (DB::isError($res)) {
$this->erreur_db($res->getDebugInfo(),$res->getMessage(),'');
} else {
$info=$res->tableInfo();
}
//*** transformer les valeurs de la base en tableau ***
$sousetat['titrefondcouleur']=explode("-", $sousetat['titrefondcouleur']);
$sousetat['titretextecouleur']=explode("-", $sousetat['titretextecouleur']);
$sousetat['entete_orientation']=explode("|", $sousetat['entete_orientation']);
$sousetat['entetecolone_bordure']=explode("|", $sousetat['entetecolone_bordure']);
$sousetat['entetecolone_align']=explode("|", $sousetat['entetecolone_align']);
$sousetat['entete_fondcouleur']=explode("-", $sousetat['entete_fondcouleur']);
$sousetat['entete_textecouleur']=explode("-", $sousetat['entete_textecouleur']);
$sousetat['bordure_couleur']=explode("-", $sousetat['bordure_couleur']);
$sousetat['se_fond1']=explode("-", $sousetat['se_fond1']);
$sousetat['se_fond2']=explode("-", $sousetat['se_fond2']);
$sousetat['cellule_largeur']=explode("|", $sousetat['cellule_largeur']);
$sousetat['cellule_bordure_un']=explode("|", $sousetat['cellule_bordure_un']);
$sousetat['cellule_bordure']=explode("|", $sousetat['cellule_bordure']);
$sousetat['cellule_align']=explode("|", $sousetat['cellule_align']);
$sousetat['cellule_fondcouleur_total']=explode("-", $sousetat['cellule_fondcouleur_total']);
$sousetat['cellule_bordure_total']=explode("|", $sousetat['cellule_bordure_total']);
$sousetat['cellule_align_total']=explode("|", $sousetat['cellule_align_total']);
$sousetat['cellule_fondcouleur_moyenne']=explode("-", $sousetat['cellule_fondcouleur_moyenne']);
$sousetat['cellule_bordure_moyenne']=explode("|", $sousetat['cellule_bordure_moyenne']);
$sousetat['cellule_align_moyenne']=explode("|", $sousetat['cellule_align_moyenne']);
$sousetat['cellule_fondcouleur_nbr']=explode("-", $sousetat['cellule_fondcouleur_nbr']);
$sousetat['cellule_bordure_nbr']=explode("|", $sousetat['cellule_bordure_nbr']);
$sousetat['cellule_align_nbr']=explode("|", $sousetat['cellule_align_nbr']);
$sousetat['cellule_numerique']=explode("|", $sousetat['cellule_numerique']);
$sousetat['cellule_total']=explode("|", $sousetat['cellule_total']);
$sousetat['cellule_moyenne']=explode("|", $sousetat['cellule_moyenne']);
$sousetat['cellule_compteur']=explode("|", $sousetat['cellule_compteur']);
// ***
$this->SetDrawColor($sousetat['bordure_couleur'][0],$sousetat['bordure_couleur'][1],$sousetat['bordure_couleur'][2]);////couleur du trace
//intervalle
$this->ln($sousetat['intervalle_debut']);
//titre
$this->SetFillColor($sousetat['titrefondcouleur'][0],$sousetat['titrefondcouleur'][1],$sousetat['titrefondcouleur'][2]);
$this->SetTextColor($sousetat['titretextecouleur'][0],$sousetat['titretextecouleur'][1],$sousetat['titretextecouleur'][2]);
$this->SetFont($sousetat["titrefont"],$sousetat["titreattribut"],$sousetat["titretaille"]);
$this->MultiCell($sousetat['tableau_largeur'],$sousetat["titrehauteur"],$sousetat["titre"],$sousetat["titrebordure"],$sousetat["titrealign"],$sousetat["titrefond"]);
//
$nbchamp=count($info);
//
$this->SetFont($etat['se_font'],'',$sousetat['tableau_fontaille']);
// ENTETE
if ($sousetat['entete_flag']==1) {
$this->SetFillColor($sousetat['entete_fondcouleur'][0],$sousetat['entete_fondcouleur'][1],$sousetat['entete_fondcouleur'][2]);
$this->SetTextColor($sousetat['entete_textecouleur'][0],$sousetat['entete_textecouleur'][1],$sousetat['entete_textecouleur'][2]);
//texte horizontal
if (!isset($sousetat['entete_orientation'])) {
//-------------------------------------------
for($k=0;$k<$nbchamp;$k++) {
$this->Cell($sousetat['cellule_largeur'][$k],$sousetat['entete_hauteur'],strtoupper($info[$k]['name']),$sousetat['entetecolone_bordure'][$k],0,$sousetat['entetecolone_align'][$k],$sousetat['entete_fond']);
}
//-------------------------------------------
} else {
//texte avec angle
for ($k=0;$k<$nbchamp;$k++) {
//mo 27 mars 2008-------------------------------------------
//texte horizontal si entete_orientation =0
if ($sousetat['entete_orientation'][$k]==0) {
$this->Cell($sousetat['cellule_largeur'][$k],$sousetat['entete_hauteur'],strtoupper($info[$k]['name']),$sousetat['entetecolone_bordure'][$k],0,$sousetat['entetecolone_align'][$k],$sousetat['entete_fond']);
} else {
//mo 27 mars 2008---------------------------------------
if ($sousetat['entete_orientation'][$k]>0) {
$this->Cell($sousetat['cellule_largeur'][$k],$sousetat['entete_hauteur'],'',$sousetat['entetecolone_bordure'][$k],0,$sousetat['entetecolone_align'][$k],$sousetat['entete_fond']);
$xd=$this->Getx();
$yd=$this->Gety();
$xd=$xd-(floor($sousetat['cellule_largeur'][$k]/2));
if ($sousetat['entete_orientation'][$k]<91) {
$yd=($yd+$sousetat['entete_hauteur'])-1;
} else {
$yd=($yd+$sousetat['entete_hauteur'])-5;
}
$this->TextWithRotation($xd,$yd,strtoupper($info[$k]['name']),$sousetat['entete_orientation'][$k],0);
} else {
//$this->Cell($sousetat['cellule_largeur'][$k],$sousetat['entete_hauteur'],strtoupper($info[$k]['name']),$sousetat['entetecolone_bordure'][$k],0,$sousetat['entetecolone_align'][$k],$sousetat['entete_fond']);
$this->Cell($sousetat['cellule_largeur'][$k],$sousetat['entete_hauteur'],'',$sousetat['entetecolone_bordure'][$k],0,$sousetat['entetecolone_align'][$k],$sousetat['entete_fond']);
$xd=$this->Getx();
$yd=$this->Gety();
$xd = $xd - floor((($sousetat['cellule_largeur'][$k]/2))) - floor(strlen ($info[$k]['name']));
$yd=($yd+$sousetat['entete_hauteur'])-3;
$this->TextWithRotation($xd,$yd,strtoupper($info[$k]['name']),$sousetat['entete_orientation'][$k],0);
}
}//mo 27 mars 2008 fin else entete_orientation'][$k]different de zero
}//fin for
}
//
$this->ln();
}
//
$couleur=1;
$this->SetTextColor($etat['se_couleurtexte'][0],$etat['se_couleurtexte'][1],$etat['se_couleurtexte'][2]);
// initialisation
for($j=0;$j<$nbchamp;$j++) $total[$j]=0;
$cptenr=0;
$flagtotal=0;
$flagmoyenne=0;
$flagcompteur=0;
//
while ($row=& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
//
if ($couleur==1){
$this->SetFillColor($sousetat['se_fond1'][0],$sousetat['se_fond1'][1],$sousetat['se_fond1'][2]);
$couleur=0;
} else {
$this->SetFillColor($sousetat['se_fond2'][0],$sousetat['se_fond2'][1],$sousetat['se_fond2'][2]);
$couleur=1;
}
//
//preparer multiligne
$max_ln=1;
$multi_height=$sousetat['cellule_hauteur'];
//Etablir nb lignes necessaires et preparer chaines avec \n
for ($j=0;$j<$nbchamp;$j++) {
// A ajouter eventuellement dans .sousetat.inc
// //a 1 texte organise en multiligne, avec autre valeur texte compresse
// $sousetat['cellule_multiligne']=array("0","0","1","1","1","0","0","1","1","0");
// //pourcentage de hauteur utilisee pour 1 ligne d'une cellule multiligne
// $sousetat['cellule_hautmulti']=1/2;
if (isset($sousetat['cellule_multiligne'])) {
//si variable definie, valeur a 1 => multiligne
if ($sousetat['cellule_multiligne'][$j]==1) {
$t_ln=$this->PrepareMultiCell($sousetat['cellule_largeur'][$j],$row[$info[$j]['name']]);
if ($t_ln>$max_ln) $max_ln=$t_ln;
}
// sinon compression
} else {
//si variable non definie, multiligne par defaut
$t_ln=$this->PrepareMultiCell($sousetat['cellule_largeur'][$j],$row[$info[$j]['name']]);
if ($t_ln>$max_ln) $max_ln=$t_ln;
}
}
//fixation de la nouvelle hauteur si plus d'1 ligne selon quota hauteur/nblignesmulti ou pas
if ($max_ln>1)
if (isset($sousetat['cellule_hautmulti'])) //si valeur cellule_hautmulti existe
$multi_height=$max_ln*$sousetat['cellule_hauteur']*$sousetat['cellule_hautmulti'];
else //sinon valeur par defaut 1/2
$multi_height=$max_ln*$sousetat['cellule_hauteur']*1/2;
for ($j=0;$j<$nbchamp;$j++) {
if (isset($sousetat['cellule_numerique'][$j]) AND TRIM($sousetat['cellule_numerique'][$j])!=""){
//champs non numerique = 999 , numerique
if ($sousetat['cellule_numerique'][$j]==999) {
// non numerique
if ($cptenr==0) {
$this->Cell($sousetat['cellule_largeur'][$j],$multi_height,$row[$info[$j]['name']],$sousetat['cellule_bordure_un'][$j],0,$sousetat['cellule_align'][$j],$sousetat['cellule_fond']);
} else {
$this->Cell($sousetat['cellule_largeur'][$j],$multi_height,$row[$info[$j]['name']],$sousetat['cellule_bordure'][$j],0,$sousetat['cellule_align'][$j],$sousetat['cellule_fond']);
}
} else {
// numerique
if ($cptenr==0) {
$this->Cell($sousetat['cellule_largeur'][$j],$multi_height,number_format($row[$info[$j]['name']], $sousetat['cellule_numerique'][$j], ',', ' '),$sousetat['cellule_bordure_un'][$j],0,$sousetat['cellule_align'][$j],$sousetat['cellule_fond']);
} else {
$this->Cell($sousetat['cellule_largeur'][$j],$multi_height,number_format($row[$info[$j]['name']], $sousetat['cellule_numerique'][$j], ',', ' '),$sousetat['cellule_bordure'][$j],0,$sousetat['cellule_align'][$j],$sousetat['cellule_fond']);
}
// si total = calcul variable total
if ($sousetat['cellule_total'][$j]==1) {
$total[$j] = $total[$j]+$row[$info[$j]['name']];
$flagtotal=1;
}
if ($sousetat['cellule_moyenne'][$j]==1) {
if ($flagtotal==0)
$total[$j] = $total[$j]+$row[$info[$j]['name']];
$flagmoyenne=1;
}
}
}
if ($sousetat['cellule_compteur'][$j]==1) {
$flagcompteur=1;
}
} // fin for
$cptenr=$cptenr+1;
$this->ln();
} //fin while
//
// apres derniere ligne
if ($sousetat['tableau_bordure']=="1") {
$this->Cell($sousetat['tableau_largeur'],0,'',"T",1,'L',0);
}
//affichage total----------------------------------------------------
if ($flagtotal==1) {
for ($k=0;$k<$nbchamp;$k++) {
if ($sousetat['cellule_total'][$k]==1) {
$this->SetFont($etat['se_font'],'',$sousetat['cellule_fontaille_total']);
$this->SetFillColor($sousetat['cellule_fondcouleur_total'][0],$sousetat['cellule_fondcouleur_total'][1],$sousetat['cellule_fondcouleur_total'][2]);
$this->Cell($sousetat['cellule_largeur'][$k],$sousetat['cellule_hauteur_total'],number_format($total[$k], $sousetat['cellule_numerique'][$k], ',', ' '),$sousetat['cellule_bordure_total'][$k],0,$sousetat['cellule_align_total'][$k],$sousetat['cellule_fond_total']);
} else {// affichage sur la colone correspondante
if ($k==0) {
// 1ere colone
$this->SetFont($etat['se_font'],'',$sousetat['cellule_fontaille_total']);
$this->SetFillColor($sousetat['cellule_fondcouleur_total'][0],$sousetat['cellule_fondcouleur_total'][1],$sousetat['cellule_fondcouleur_total'][2]);
$this->Cell($sousetat['cellule_largeur'][$k],$sousetat['cellule_hauteur_total'],'TOTAL',$sousetat['cellule_bordure_total'][$k],0,$sousetat['cellule_align_total'][$k],$sousetat['cellule_fond_total']);
} else {
// colones suivante
$this->SetFont($etat['se_font'],'',$sousetat['cellule_fontaille_total']);
$this->SetFillColor($sousetat['cellule_fondcouleur_total'][0],$sousetat['cellule_fondcouleur_total'][1],$sousetat['cellule_fondcouleur_total'][2]);
$this->Cell($sousetat['cellule_largeur'][$k],$sousetat['cellule_hauteur_total'],'',$sousetat['cellule_bordure_total'][$k],0,$sousetat['cellule_align_total'][$k],$sousetat['cellule_fond_total']);
}
}
} //fin for k
$this->ln();
}
//$k=0;
//affichage moyenne----------------------------------------------------
if ($flagmoyenne==1) {
for ($k=0;$k<$nbchamp;$k++) {
if ($sousetat['cellule_moyenne'][$k]==1) {
$this->SetFont($etat['se_font'],'',$sousetat['cellule_fontaille_moyenne']);
$this->SetFillColor($sousetat['cellule_fondcouleur_moyenne'][0],$sousetat['cellule_fondcouleur_moyenne'][1],$sousetat['cellule_fondcouleur_moyenne'][2]);
$this->Cell($sousetat['cellule_largeur'][$k],$sousetat['cellule_hauteur_moyenne'],number_format($total[$k]/$cptenr, $sousetat['cellule_numerique'][$k], ',', ' '),$sousetat['cellule_bordure_moyenne'][$k],0,$sousetat['cellule_align_moyenne'][$k],$sousetat['cellule_fond_moyenne']);
} else {
// affichage sur la colone correspondante
if ($k==0) {
// 1ere colone
$this->SetFont($etat['se_font'],'',$sousetat['cellule_fontaille_moyenne']);
$this->SetFillColor($sousetat['cellule_fondcouleur_moyenne'][0],$sousetat['cellule_fondcouleur_moyenne'][1],$sousetat['cellule_fondcouleur_moyenne'][2]);
$this->Cell($sousetat['cellule_largeur'][$k],$sousetat['cellule_hauteur_moyenne'],'MOYENNE',$sousetat['cellule_bordure_moyenne'][$k],0,$sousetat['cellule_align_moyenne'][$k],$sousetat['cellule_fond_moyenne']);
} else {
// colones suivante
$this->SetFont($etat['se_font'],'',$sousetat['cellule_fontaille_moyenne']);
$this->SetFillColor($sousetat['cellule_fondcouleur_moyenne'][0],$sousetat['cellule_fondcouleur_moyenne'][1],$sousetat['cellule_fondcouleur_moyenne'][2]);
$this->Cell($sousetat['cellule_largeur'][$k],$sousetat['cellule_hauteur_moyenne'],'',$sousetat['cellule_bordure_moyenne'][$k],0,$sousetat['cellule_align_moyenne'][$k],$sousetat['cellule_fond_moyenne']);
}
}
} //fin for k
$this->ln();
}
//affichage compteur----------------------------------------------------
if ($flagcompteur==1) {
for ($k=0;$k<$nbchamp;$k++) {
if ($sousetat['cellule_compteur'][$k]==1) {
$this->SetFont($etat['se_font'],'',$sousetat['cellule_fontaille_nbr']);
$this->SetFillColor($sousetat['cellule_fondcouleur_nbr'][0],$sousetat['cellule_fondcouleur_nbr'][1],$sousetat['cellule_fondcouleur_nbr'][2]);
$this->Cell($sousetat['cellule_largeur'][$k],$sousetat['cellule_hauteur_nbr'],number_format($cptenr, 0, ',', ' '),$sousetat['cellule_bordure_nbr'][$k],0,$sousetat['cellule_align_nbr'][$k],$sousetat['cellule_fond_nbr']);
} else {
// affichage sur la colone correspondante
if ($k==0) {
// 1ere colone
$this->SetFont($etat['se_font'],'',$sousetat['cellule_fontaille_nbr']);
$this->SetFillColor($sousetat['cellule_fondcouleur_nbr'][0],$sousetat['cellule_fondcouleur_nbr'][1],$sousetat['cellule_fondcouleur_nbr'][2]);
$this->Cell($sousetat['cellule_largeur'][$k],$sousetat['cellule_hauteur_nbr'],'NOMBRE',$sousetat['cellule_bordure_nbr'][$k],0,$sousetat['cellule_align_nbr'][$k],$sousetat['cellule_fond_nbr']);
} else {
// colones suivante
$this->SetFont($etat['se_font'],'',$sousetat['cellule_fontaille_nbr']);
$this->SetFillColor($sousetat['cellule_fondcouleur_nbr'][0],$sousetat['cellule_fondcouleur_nbr'][1],$sousetat['cellule_fondcouleur_nbr'][2]);
$this->Cell($sousetat['cellule_largeur'][$k],$sousetat['cellule_hauteur_nbr'],'',$sousetat['cellule_bordure_nbr'][$k],0,$sousetat['cellule_align_nbr'][$k],$sousetat['cellule_fond_nbr']);
}
}
} //fin for k
$this->ln();
}
if ($cptenr>0) {
$this->ln($sousetat['intervalle_fin']);
}
}
/**
*
*/
function PrepareMultiCell($w, &$txt) {
//prepare un texte passe par reference (en le modifiant) avec ajout \n pour traitement par Cell modifie
//et retourne nb ligne necessaire
//base sur code MultiCell mais pas d'affichage
$cw=&$this->CurrentFont['cw']; //largeur caractere
if ($w==0) //si largeur=0, largeur=largeurcourante-margegauche-positionx
$w=$this->w-$this->rMargin-$this->x;
$wmax=($w-2*$this->cMargin)*1000/$this->FontSize;
$s=str_replace("\r",'',$txt);
$nb=strlen($s); //longueur texte sans retour chariot
if ($nb>0 && $s[$nb-1]=="\n")
$nb--; //supp. dernier retour ligne si existe
$sep=-1; //espace
$i=0; //index boucle
$j=0;
$l=0;
$ns=0;
$nl=1;
$nbrc=0; //nb retourcharriot
while ($i<$nb) { //boucle sur texte
//Get next character
$c=$s{$i}; //caractere courant
if ($c=="\n") { //retour ligne
//Explicit line break
$i++; //
$sep=-1; //raz espace
$j=$i; //debut de ligne
$l=0;
$ns=0;
$nl++; //nb ligne +1
continue; // prochain caractere
}
if ($c==' ') { //si espace
$sep=$i; //position espace
$ls=$l;
$ns++;
}
$l+=$cw[$c];
if ($l>$wmax) { //si ligne depasse largeur
//Automatic line break
if($sep==-1) { //si aucun espace detecte
if($i==$j)
$i++;
} else { //espace detecte
$i=$sep+1; //prochain car = car suivant dernier espace
} //insertion retour charriot dans texte
$txt=substr($txt,0,$i+$nbrc)."\n".substr($txt,$i+$nbrc);
$nbrc++;
$sep=-1;
$j=$i;
$l=0;
$ns=0;
$nl++; //nb ligne +1
} else //ligne < largeur colonne
$i++;
} //fin de texte
return $nl;
}
/**
*
*/
function Cell($w, $h = 0, $txt = '', $border = 0, $ln = 0, $align = '', $fill = false, $link = '') {
//surcharge pour retour ligne sur detection \n sinon compression
//changement
//border: indicates if borders must be drawn around the cell. The value can be either a number:
//0: no border
//>0: frame of the corresponding width
//or a string containing some or all of the following characters (in any order):
//L: left
//T: top
//R: right
//B: bottom
//or for bold border:
//l: left
//t: top
//r: right
//b: bottom
//Default value: 0.
//Output a cell
$k=$this->k;
// !$this->InHeader commenter pour compatibilite avec fpdf 1.53 semble ne pas etre necessaire pour
// la version fpdf 1.6
if($this->y+$h>$this->PageBreakTrigger /*&& !$this->InHeader*/ && !$this->InFooter && $this->AcceptPageBreak())
{
//Automatic page break
$x=$this->x;
$ws=$this->ws;
if($ws>0) {
$this->ws=0;
$this->_out('0 Tw');
}
$this->AddPage($this->CurOrientation,$this->CurPageFormat);
$this->x=$x;
if($ws>0) {
$this->ws=$ws;
$this->_out(sprintf('%.3F Tw', $ws*$k));
}
}
if($w==0) $w=$this->w-$this->rMargin-$this->x;
$s='';
// begin change Cell function 12.08.2003
if($fill==1 or $border>0) {
if($fill==1)
$op=($border>0) ? 'B' : 'f';
else
$op='S';
if ($border>1) {
$s=sprintf(' q %.2F w %.2F %.2F %.2F %.2F re %s Q ', $border,
$this->x*$k, ($this->h-$this->y)*$k, $w*$k, -$h*$k, $op);
}
else
$s=sprintf('%.2F %.2F %.2F %.2F re %s ', $this->x*$k, ($this->h-$this->y)*$k, $w*$k, -$h*$k, $op);
}
if(is_string($border)) {
$x=$this->x;
$y=$this->y;
if(is_int(strpos($border, 'L')))
$s.=sprintf('%.2F %.2F m %.2F %.2F l S ', $x*$k, ($this->h-$y)*$k, $x*$k, ($this->h-($y+$h))*$k);
else if(is_int(strpos($border, 'l')))
$s.=sprintf('q 2 w %.2F %.2F m %.2F %.2F l S Q ', $x*$k, ($this->h-$y)*$k, $x*$k, ($this->h-($y+$h))*$k);
if(is_int(strpos($border, 'T')))
$s.=sprintf('%.2F %.2F m %.2F %.2F l S ', $x*$k, ($this->h-$y)*$k, ($x+$w)*$k, ($this->h-$y)*$k);
else if(is_int(strpos($border, 't')))
$s.=sprintf('q 2 w %.2F %.2F m %.2F %.2F l S Q ', $x*$k, ($this->h-$y)*$k, ($x+$w)*$k, ($this->h-$y)*$k);
if(is_int(strpos($border, 'R')))
$s.=sprintf('%.2F %.2F m %.2F %.2F l S ', ($x+$w)*$k, ($this->h-$y)*$k, ($x+$w)*$k, ($this->h-($y+$h))*$k);
else if(is_int(strpos($border, 'r')))
$s.=sprintf('q 2 w %.2F %.2F m %.2F %.2F l S Q ', ($x+$w)*$k, ($this->h-$y)*$k, ($x+$w)*$k, ($this->h-($y+$h))*$k);
if(is_int(strpos($border, 'B')))
$s.=sprintf('%.2F %.2F m %.2F %.2F l S ', $x*$k, ($this->h-($y+$h))*$k, ($x+$w)*$k, ($this->h-($y+$h))*$k);
else if(is_int(strpos($border, 'b')))
$s.=sprintf('q 2 w %.2F %.2F m %.2F %.2F l S Q ', $x*$k, ($this->h-($y+$h))*$k, ($x+$w)*$k, ($this->h-($y+$h))*$k);
}
if (trim($txt)!='') {
$cr=substr_count($txt, "\n");
if ($cr>0) { // Multi line
$txts = explode("\n", $txt);
$lines = count($txts);
//$dy=($h-2*$this->cMargin)/$lines;
for ($l=0;$l<$lines;$l++) {
$txt=$txts[$l];
$w_txt=$this->GetStringWidth($txt);
if ($align=='R')
$dx=$w-$w_txt-$this->cMargin;
elseif($align=='C')
$dx=($w-$w_txt)/2;
else
$dx=$this->cMargin;
//
$txt=str_replace(')', '\\)', str_replace('(', '\\(', str_replace('\\', '\\\\', $txt)));
if ($this->ColorFlag)
$s.='q '.$this->TextColor.' ';
$s.=sprintf('BT %.2F %.2F Td (%s) Tj ET ',
($this->x+$dx)*$k,
($this->h-($this->y+.5*$h+(.7+$l-$lines/2)*$this->FontSize))*$k,
$txt);
if ($this->underline)
$s.=' '.$this->_dounderline($this->x+$dx, $this->y+.5*$h+.3*$this->FontSize, $txt);
if ($this->ColorFlag)
$s.='Q ';
if ($link)
$this->Link($this->x+$dx, $this->y+.5*$h-.5*$this->FontSize, $w_txt, $this->FontSize, $link);
}
} else {
// Single line
$w_txt=$this->GetStringWidth($txt);
$Tz=100;
if ($w_txt>$w-2*$this->cMargin) { // Need compression
$Tz=($w-2*$this->cMargin)/$w_txt*100;
$w_txt=$w-2*$this->cMargin;
}
if ($align=='R')
$dx=$w-$w_txt-$this->cMargin;
elseif($align=='C')
$dx=($w-$w_txt)/2;
else
$dx=$this->cMargin;
$txt=str_replace(')', '\\)', str_replace('(', '\\(', str_replace('\\', '\\\\', $txt)));
if ($this->ColorFlag)
$s.='q '.$this->TextColor.' ';
$s.=sprintf('q BT %.2F %.2F Td %.2F Tz (%s) Tj ET Q ',
($this->x+$dx)*$k,
($this->h-($this->y+.5*$h+.3*$this->FontSize))*$k,
$Tz, $txt);
if ($this->underline)
$s.=' '.$this->_dounderline($this->x+$dx, $this->y+.5*$h+.3*$this->FontSize, $txt);
if ($this->ColorFlag)
$s.='Q ';
if ($link)
$this->Link($this->x+$dx, $this->y+.5*$h-.5*$this->FontSize, $w_txt, $this->FontSize, $link);
}
}
// end change Cell function 12.08.2003
if ($s) $this->_out($s);
$this->lasth=$h;
if ($ln>0) {
//Go to next line
$this->y+=$h;
if ($ln==1) $this->x=$this->lMargin;
} else
$this->x+=$w;
}
/**
* Methode de traitement d'erreur
*
* Transfert a l'ecran des erreurs de base de donnees
*
* @param $debuginfo Infos table de donnees
* @param $messageDB Message d'erreur DB pear
* @param $table Table concernee
*
* @return void
*/
function erreur_db($debuginfo, $messageDB, $table) {
//
include ("error_db.inc");
//
$this->SetFont('arial', '', '9');
$this->ln();
$this->Cell(0, 10, _("Attention, Erreur de base de donnees"), 0, 1, 'L');
$this->Cell(0, 10, $requete, 0, 1, 'L');
$this->Cell(0, 10, $erreur_origine, 0, 1, 'L');
$this->Cell(0, 10, $messageDB, 0, 1, 'L');
$this->Cell(0, 10, $msgfr, 0, 1, 'L');
$this->Cell(0, 10, _("Contactez votre administrateur..."), 0, 1, 'L');
}
}
?>