begin process at 2012 05 31 18:33:28
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

texte long en cellule de fpdf


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

texte long en cellule de fpdf

dimanche 6 juin 2010 à 17:35:03 | texte long en cellule de fpdf

sidalilo

bonjour
j'ai essayé d'exporter une recap vers pdf par le fpdf mais j'ai un champ qui contient un long text et affiché avec decalage dans la hauteur
merci bien de vous m'aidez pour faire un text dans une cellule sans decalage dans la hauteur
voila le script:
<?php
session_start();
require('fpdf.php');

class PDF extends FPDF
{
//Chargement des données
function LoadData($file)
{
//Lecture des lignes du fichier
$lines=file($file);
$data=array();
foreach($lines as $line)
$data[]=explode(';',chop($line));
return $data;
}
//Tableau amélioré
function ImprovedTable($header,$data)
{
//Largeurs des colonnes
$w=array(15,20,20,6,15,50,20,4,4,4,4,4,4,4,4,4);
//En-tête
for($i=0;$i<count($header);$i++)
$this->Cell($w[$i],7,$header[$i],1,0,'C');
$this->Ln();
//Données
foreach($data as $row)
{
$this->Cell($w[0],6,$row[0],'LR');
$this->Cell($w[1],6,$row[1],'LR');
$this->Cell($w[2],6,$row[2],'LR');
$this->Cell($w[3],6,$row[3],'LR');
$this->Cell($w[4],6,$row[4],'LR');
$this->Cell($w[5],6,$row[5],'LR');
$this->Cell($w[6],6,$row[6],'LR');
$this->Cell($w[7],6,$row[7],'LR');
$this->Cell($w[8],6,$row[8],'LR');
$this->Cell($w[9],6,$row[9],'LR');
$this->Cell($w[10],6,$row[10],'LR');
$this->Cell($w[11],6,$row[11],'LR');
$this->Cell($w[12],6,$row[12],'LR');
$this->Cell($w[13],6,$row[13],'LR');
$this->Cell($w[14],6,$row[14],'LR');
$this->Cell($w[15],6,$row[15],'LR');
$this->Ln();
}
//Trait de terminaison
$this->Cell(array_sum($w),0,'','T');
}

function WordWrap(&$text, $maxwidth)
{
$text = trim($text);
if ($text==='')
return 0;
$space = $this->GetStringWidth(' ');
$lines = explode("\n", $text);
$text = '';
$count = 0;

foreach ($lines as $line)
{
$words = preg_split('/ +/', $line);
$width = 0;

foreach ($words as $word)
{
$wordwidth = $this->GetStringWidth($word);
if ($wordwidth > $maxwidth)
{
// Word is too long, we cut it
for($i=0; $i<strlen($word); $i++)
{
$wordwidth = $this->GetStringWidth(substr($word, $i, 1));
if($width + $wordwidth <= $maxwidth)
{
$width += $wordwidth;
$text .= substr($word, $i, 1);
}
else
{
$width = $wordwidth;
$text = rtrim($text)."\n".substr($word, $i, 1);
$count++;
}
}
}
elseif($width + $wordwidth <= $maxwidth)
{
$width += $wordwidth + $space;
$text .= $word.' ';
}
else
{
$width = $wordwidth + $space;
$text = rtrim($text)."\n".$word.' ';
$count++;
}
}
$text = rtrim($text)."\n";
$count++;
}
$text = rtrim($text);
return $count;
}




//----------------------------------------------------------------------------
// MULTI CELL
// @in $w = largeur de la cellule (occupe toute la ligne si $w == 0)
// @in $h = hauteur de la ligne (et non pas de la cellule multi-lignes !!)
// @in $txt = texte à insérer
// @in $border = spécification de bordure (0,1,'L','T','R','B')
// @in $align = spécification d'alignement ('L', 'R', 'C', 'J')
// @in $fill = spécification de remplissage (0,1)
// @in $cursorPos = placement du curseur après traitement (0=à droite, 1=saut de ligne)
//----------------------------------------------------------------------------
function multiCell($w, $h, $txt, $border = 0, $align = 'J', $fill = 0, $cursorPos = 1) {
// NB : ces contorsions sont rendues nécessaires par le fait que dans la classe de base,
// SetY() a comme effet de bord de replacer le curseur à gauche...
if( $cursorPos == 0 ) {
$y = $this->GetY();
$x = $this->GetX() + $w;
}
parent::MultiCell($w, $h, $txt, $border, $align, $fill);
if( $cursorPos == 0 ) {
$this->SetY($y);
$this->SetX($x);
}
}

function Header()
{
$this->SetFont('Arial','',14);
$this->multiCell('300','6',"{$_SESSION['nonrapport']} Répertoire des documents Qualités et Techniques du Service Métrologie",'0','L','0','0');
//$this->Write(6, "Répertoire des documents Qualités et Techniques du Service Métrologie");
$this->Ln();
$this->Ln();
$this->SetFont('Arial','',8);
$this->multiCell('25','3','Lieu d\'Affectation','0','L','0','0');
$this->multiCell('30','3','Type de procedure','0','L','0','0');
$this->multiCell('40','3','Domaine','0','L','0','0');
$this->multiCell('8','3','ind','0','L','0','0');
$this->multiCell('24','3','Date d\'application','0','L','0','0');
$this->multiCell('30','3','Ident','0','L','0','0');
$this->multiCell('80','3','Intitulé du document','0','L','0','0');
$this->multiCell('5','3','R Q','0','L','0','0');
$this->multiCell('5','3','M S','0','L','0','0');
$this->multiCell('5','3','R S','0','L','0','0');
$this->multiCell('5','3','U O','0','L','0','0');
$this->multiCell('5','3','S','0','L','0','0');
$this->multiCell('5','3','C','0','L','0','0');
$this->multiCell('5','3','F','0','L','0','0');
$this->multiCell('5','3','M','0','L','0','0');
$this->multiCell('5','3','L','0','L','0','1');
$this->SetDrawColor(0,80,180);
$this->SetLineWidth(1);
$this->Line(5, 30, 293, 30);
$this->multiCell('5','6',"",'0','L','0','1');
//$this->Cell(190,10,"",0,1,'C');
//$this->Ln();
}

//Pied de page
function Footer()
{
$this->SetTextColor(220,50,50);
$this->SetDrawColor(0,80,180);
//$this->Ln();
//$this->Ln();
//$this->Ln();
//$this->Ln();
$this->Sety(-17);
$this->Line(00, 190, 300, 190);
$this->SetFont('Arial','',8);
$this->multiCell('300','6','RQ: responsable qualité ; MS: Métrologie sur site ; RS: Responsable de service ;
UO: Responsable Unité Opérationel ; S: Secrétaire ; C: Commercial ; F: Correspondant Formation ; M: Métrologue ; L: Laboratoire','0','C','0','0');
$this->SetTextColor(0,0,0);
$this->Cell(0,5,'Page '.$this->PageNo().' sur {nb}',0,0,'R');
}

}



//$pdf=new PDF();
$pdf=new PDF('L','mm','A4');
$pdf->AliasNbPages();
$pdf->AddPage();
$pdf->SetFont('Arial','',8);
mysql_connect("localhost","root","mysql");
mysql_select_db("documentaire");
$req = mysql_query("SELECT * FROM repertoire WHERE lieu='{$_SESSION['lieu']}'");
$pdf->multiCell('5','1',"",'0','J','0','1');
while($result = mysql_fetch_array($req))
{
//$pdf->multiCell('5','1',"",'0','J','0','1');
//$lieu=$result['lieu'];
//$nb=$pdf->WordWrap($result['lieu'], 25);
$pdf->multiCell('25','3',$result['lieu'],'0','L','0','0');
//$type=$result['type'];
//$nb=$pdf->WordWrap($result['type'], 25);
$pdf->multiCell('30','3',$result['type'],'0','L','0','0');
//$dom=$result['domaine'];
//$nb=$pdf->WordWrap($result['domaine'], 45);
$pdf->multiCell('40','3',$result['domaine'],'0','L','0','0');
//$ind=$result['ind'];
//$nb=$pdf->WordWrap($result['ind'], 25);
$pdf->multiCell('8','3',$result['ind'],'0','L','0','0');
//$ap=$result['application'];
//$nb=$pdf->WordWrap($result['application'], 23);
$pdf->multiCell('24','3',$result['application'],'0','L','0','0');
//$rap=$result['rapport'];
//$nb=$pdf->WordWrap($result['rapport'], 25);
$pdf->multiCell('30','3',$result['rapport'],'0','L','0','0');
//$int=$result['intitule'];
//$pdf->SetFont('Arial','',10);
//$nb=$pdf->WordWrap($result['intitule'], 50);
$pdf->multiCell('80','3',$result['intitule'],'0','L','0','0');
//$pdf->SetFont('Arial','',10);
//$rq=$result['rq'];
//$nb=$pdf->WordWrap($result['rq'], 7);
$pdf->multiCell('5','3',$result['rq'],'0','L','0','0');
//$ms=$result['ms'];
//$nb=$pdf->WordWrap($result['ms'], 7);
$pdf->multiCell('5','3',$result['ms'],'0','L','0','0');
//$rs=$result['rs'];
//$nb=$pdf->WordWrap($result['rs'], 7);
$pdf->multiCell('5','3',$result['rs'],'0','L','0','0');
//$uo=$result['uo'];
//$nb=$pdf->WordWrap($result['uo'], 7);
$pdf->multiCell('5','3',$result['uo'],'0','L','0','0');
//$s=$result['s'];
//$nb=$pdf->WordWrap($result['s'], 7);
$pdf->multiCell('5','3',$result['s'],'0','L','0','0');
//$c=$result['c'];
//$nb=$pdf->WordWrap($result['c'], 7);
$pdf->multiCell('5','3',$result['c'],'0','L','0','0');
//$f=$result['f'];
//$nb=$pdf->WordWrap($result['f'], 7);
$pdf->multiCell('5','3',$result['f'],'0','L','0','0');
//$m=$result['m'];
//$nb=$pdf->WordWrap($result['m'], 7);
$pdf->multiCell('5','3',$result['m'],'0','L','0','0');
//$l=$result['l'];
//$nb=$pdf->WordWrap($result['l'], 7);
$pdf->multiCell('5','3',$result['l'],'0','L','0','1');
$pdf->multiCell('5','6',"",'0','J','0','1');
//$pdf->Cell(190,10,"",0,1,'C');
//$pdf->Ln();

}
$pdf->Output();
?>
voiola un exemple:
$hauteur=6;

$nb="1";
$long=$pdf->GetStringWidth($observ) ;

if($long>250)

{

$nb=250/$long;

}
//$nb= ceil (250 / $long) ;
//$pdf->Cell($centrage);
$nb=$pdf->WordWrap($observ, 45);
$pdf->multiCell('30',$hauteur/$nb,"longtext",'1','L','0',$sl);
est ce que c'est juste??
merci pour votre attention
vendredi 5 août 2011 à 14:08:05 | Re : texte long en cellule de fpdf

mgmbow

Salu cessez avec et prenez ceci:

Ce fichier sqppelle mc_table.php
require('fpdf.php');

class PDF_MC_Table extends FPDF
{
var $widths;
var $aligns;





function SetWidths($w)
{
//Tableau des largeurs de colonnes
$this->widths=$w;
}

function SetAligns($a)
{
//Tableau des alignements de colonnes
$this->aligns=$a;
}

function Row($data)
{
//Calcule la hauteur de la ligne
$nb=0;
for($i=0;$i<count($data);$i++)
$nb=max($nb,$this->NbLines($this->widths[$i],$data[$i]));
$h=5*$nb;
//Effectue un saut de page si nécessaire
$this->CheckPageBreak($h);
//Dessine les cellules
for($i=0;$i<count($data);$i++)
{
$w=$this->widths[$i];
$a=isset($this->aligns[$i]) ? $this->aligns[$i] : 'L';
//Sauve la position courante
$x=$this->GetX();
$y=$this->GetY();
//Dessine le cadre
$this->Rect($x,$y,$w,$h);
//Imprime le texte
$this->MultiCell($w,5,$data[$i],0,$a);
//Repositionne à droite
$this->SetXY($x+$w,$y);
}
//Va à la ligne
$this->Ln($h);
}

function CheckPageBreak($h)
{
//Si la hauteur h provoque un débordement, saut de page manuel
if($this->GetY()+$h>$this->PageBreakTrigger)
$this->AddPage($this->CurOrientation);
}

function NbLines($w,$txt)
{
//Calcule le nombre de lignes qu'occupe un MultiCell de largeur w
$cw=&$this->CurrentFont['cw'];
if($w==0)
$w=$this->w-$this->rMargin-$this->x;
$wmax=($w-2*$this->cMargin)*1000/$this->FontSize;
$s=str_replace("\r",'',$txt);
$nb=strlen($s);
if($nb>0 and $s[$nb-1]=="\n")
$nb--;
$sep=-1;
$i=0;
$j=0;
$l=0;
$nl=1;
while($i<$nb)
{
$c=$s[$i];
if($c=="\n")
{
$i++;
$sep=-1;
$j=$i;
$l=0;
$nl++;
continue;
}
if($c==' ')
$sep=$i;
$l+=$cw[$c];
if($l>$wmax)
{
if($sep==-1)
{
if($i==$j)
$i++;
}
else
$i=$sep+1;
$sep=-1;
$j=$i;
$l=0;
$nl++;
}
else
$i++;
}
return $nl;
}
}
?>


Ce fichier peut sappeler imprime.php par exemple:

Et suivant ta base de données et tes tables tu peut modifier la requete

require('mc_table.php');
include ("connexion_base.php");
// En-tête



$sql = mysql_query("select date, libelle_journal, D_etude, NomClient from j_journaux order by date");
$done = mysql_fetch_array($sql);

$pdf=new PDF_MC_Table('L');
$pdf->AddPage();
$pdf->SetFont('Arial','',10);
//Table de 20 lignes et 4 colonnes
$pdf->SetWidths(array(30,100,30,40));
$i = 0;
do{
$i++;
$titre = $i;
$pdf->Row(array($done['date'],$done['libelle_journal'],$done['D_etude'],$done['NomClient']));
$bas = $i;

}while($done = mysql_fetch_array($sql));



$pdf->Output();


Cette discussion est classée dans : pdf, nb, result, cell, multicell


Répondre à ce message

Sujets en rapport avec ce message

Bug affichage page par page :-(( [ par wynelle ] Bonjour à toutes et à tous,J'ai un problème avec un affichage page à page pour lier 2 requêtes. Seule la 2ème requête ($result) prend bien en compte u Export base de données en fichier pdf [ par flopad ] Bonjour tout le monde, j'ai un soucis que je n'arrive pas à régler et qui devient assez urgent pour moi, j'ai une base de données Access qui contient Creation fichier pdf [ par flopad ] Hello,j'exporte ma base access en un fichier pdf grace au code suivant, j'aimerais pouvoir préciser la largeur que doit faire chaque colonne.Comment f Pb Saut de page FPDP [ par flopad ] Bonjour tout le monde!!je génère un fichier pdf à l'aide de fpdf, les champs sont remplis dans des Cell via une requete sur ma bdd.Le problème est que probleme avec FPDF mise en page [ par Alpha911 ] Bonjour,j'ai fait un petit code qui permet de faire des etiquettes avec generation de code barre en FPDF. Je débute avec cet outil et je souhaite par generation du resultat d'une requete sur pdf [ par soumboula ] Warning: require(fpdf.php) [function.require]: failed to open stream: No such file or directory in C:\files\ppp.php on line 2Fatal error: FPDF et MySQL mise en page [ par bruno3591 ] Bonjour,Ca fait plusieurs jours que je cherche la solution , je m'en approche mais sans y arriver complètement, je fais donc appel à vos lumières :).C Problème de texte qui déborde avec fpdf [ par ig3 ] Bonjour, j'ai une base de données wamp et j'affiche les résultats a travers un fichier pdf grace a la classe fpdp et la méthode this->addcol() pour af recherchre dans deux tables [ par jipe32 ] BonjourJ'ai deux bases: pdf_membres et pdf_banqueet je veux afficher des champs des deux tables mais je ne sais pas comment faire.dans pdf_membres, je FichiersPDF [ par andree1 ] bonjour je suis en train de réaliser un site de mise en ligne d'information des membre d'une equipe et je voudrais que en cliquant sur la photo de cha


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,780 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales