Page 1 sur 1

plusieurs enregistrements sur une page pdf

Posté : 15 juin 2010, 11:05
par Cypher_PHP
Bonjour
Je suis en train de créer un annuaire généré en pdf à partir d'une base de données.

Je constate qu'il y a un seul enregistrement par page alors que je voudrais récupérer plusieurs enregistrements qui appartiennent à une division et qui soient affichés sur une page ou plus selon le nombre d'enregistrements.
j'ai 955 enregistrements donc 955 pages. cela ne me convient pas .
Je vous remercie beaucoup de votre coopération.

voici le code php
<?php
// va chercher le script pdf
require('fpdf16/fpdf.php');

//identifiants de connexion
$host		=	"*****";
$dblogin 	=	"****";
$dbpass		=	"****";
$dbbase		=	"****";


$connect	=	mysql_connect($host,$dblogin,$dbpass);
$select		=	mysql_select_db($dbbase, $connect);
$sql 		= " SELECT annuagent.indnni, civ,ainomu,aipren,tel,mailpro,bureau,division,service,pole,fonction, ordre, ordreser, agstru.stru as ser, agstru.resp as responsable
				FROM annuagent, agstru
				WHERE ordre!='0'
				AND
				annuagent.indnni = agstru.indnni
				ORDER BY ordre ASC, ordreser ASC, division ASC, agstru.stru DESC, agstru.resp DESC,ainomu ASC ";
$req		=	mysql_query($sql)or die (mysql_errno() . " : " .mysql_error());
$list		= 	mysql_fetch_array($req);

	
// cree une classe PDF pour les header et footer
	class PDF extends FPDF
	{
		function Header()
		{
// 	bloc bleu et titre des champs sur toutes les pages
				$this->Image('images/logo_annuaire.jpg',10,8,33);
				$this->SetFillColor(0,81,158);
				$this->SetTextColor(255,255,255);
				$this->SetFont('Arial','B',10);
				$this->SetXY(2,45);
				$this->MultiCell(43,6,'Nom',0,'C',true);
				$this->SetXY(45,45);
				$this->MultiCell(30,6,'Prenom',0,'C',true);
				$this->SetXY(75,45);
				$this->MultiCell(40,6,'Service',0,'C',true);
				$this->SetXY(115,45);
				$this->MultiCell(28,6,'Telephone',0,'C',true);
				$this->SetXY(143,45);
				$this->MultiCell(70,6,'Courriel',0,'C',true);
				$this->SetXY(200,45);
				$this->MultiCell(20,6,'Bureau',0,'C',true);
				$this->SetXY(220,45);
				$this->MultiCell(75,6,'Fonction',0,'C',true);

// deux lignes  au dessus du bloc bleu				
				$y	= 34;
				$this->SetY($y);
				$this->SetLineWidth(0.1);
				$this->SetDrawColor(0,81,158);				
				$this->line(2,36,90,36);
				$this->line(190,36,295,36);
		}
		function Footer()
		{
			if($this->PageNo()>2){
				$this->SetLineWidth(0.1);
				$this->SetDrawColor(0,81,158);				
				$this->line(2,200,295,200);
				$this->SetFont('Arial','',7);
				$this->SetTextColor(0,0,0);
				$this->Text(10,205,'Annuaire des personnels  - Paris 2010');
				$this->SetY(-12);
				$this->Cell(0,10,$this->PageNo().'/{nb}',0,0,'C');
				$now =	date("j/m/Y");
				$this->Text(270,205,$now);
				}
		}
	}
// crée une instance pdf				
				$pdf = new PDF('L','mm','A4');
				$pdf->AliasNbPages();
				$pdf->AddPage();
				$pdf->Image('images/annuaire_couv.png',0,0);
				$pdf->AddPage();
				$pdf->Image('images/organigrame_2010.jpg',0,0,297,210);
				$pdf->AddPage();
// crée des rows				
				$prevCat = ''; 		
				$ainomu = '';
				while($row = mysql_fetch_array($req))
					{
								if ( $row['division'] != $prevCat)
								{			 
									$pdf->SetFont('Arial','B',16);
									$pdf->SetTextColor(0,81,158);
									$pdf->Text(100,39,substr(stripslashes($row['division']),0,120));
								}
					//couleurs selon responsable
						// chef de division : orange
						if($row['responsable']==5){
						$pdf->SetTextColor(234,103,12);
						// adjoints  chef: vert
						}else if($row['responsable']==4){
						$pdf->SetFont('Arial','B',8);
						$pdf->SetTextColor(0,0,0);
						// chef de département : bleu
						}else if($row['responsable']==3){
						$pdf->SetTextColor(51,102,255);
						// $pdf->Text(10,$y,substr(stripslashes($row[9]),0,100));						
						// chef de service : noir
						}else if($row['responsable']==2){
						$pdf->SetTextColor(0,0,0);
						// agent : noir
						}else {
							$pdf->SetTextColor(0,0,0);
						}	
						$pdf->SetFont('Arial','BI',8);
						$y = 55;
						$y = $y + 4;
						$pdf->Text(5,$y,substr(stripslashes($row['ainomu']),0,45));
						$pdf->Text(45,$y,substr(stripslashes($row['aipren']),0,45));
						$pdf->Text(75,$y,substr(stripslashes($row['service']),0,28));
						$pdf->Text(125,$y,substr(stripslashes($row['tel']),0,15));
						$pdf->Text(155,$y,strtolower($row['mailpro']),0,44);
						$pdf->Text(210,$y,strtolower($row['bureau']),0,44);				
						$pdf->Text(230,$y,strtolower($row['fonction']),0,44);
						// $pdf->Ln(10);
						$prevCat = $row['division'];
						$pdf->AddPage();
					}   
			
// femeture de mysql		
	mysql_close();

// génère un pdf
	$pdf->Output();

?>

Re: plusieurs enregistrements sur une page pdf

Posté : 15 juin 2010, 11:11
par stealth35
c'est parce que a chaque tour de boucle tu fais un
$pdf->AddPage();

Re: plusieurs enregistrements sur une page pdf

Posté : 15 juin 2010, 11:15
par Cypher_PHP
Bien répondu. je savais qu'on allait me dire ça.
une fois enlevé cette fonction, il me fait une boucle d'enregistrements qui se superposent dessus.
donc c'est pas bon...

Re: plusieurs enregistrements sur une page pdf

Posté : 15 juin 2010, 11:17
par stealth35
Bien répondu. je savais qu'on allait me dire ça.
une fois enlevé cette fonction, il me fait une boucle d'enregistrements qui se superposent dessus.
donc c'est pas bon...
suffis de l'appeler 1 fois sur 4 par exemple

Re: plusieurs enregistrements sur une page pdf

Posté : 15 juin 2010, 11:20
par Cypher_PHP
les premières concernent les images
la 3ème concerne enfin les enregistrements
donc j'utilise une fois à la 3ème

Re: plusieurs enregistrements sur une page pdf

Posté : 15 juin 2010, 11:24
par stealth35
tu l'utilises a chaque tout de boucle dans ton while

tu peux faire un compteur
$count = 0;

while()
{
    //blabla
    ++$count;
    if(($count % 4) === 0)
    {
        $pdf->AddPage();
    }
    
}

Re: plusieurs enregistrements sur une page pdf

Posté : 15 juin 2010, 11:27
par Cypher_PHP
ok je vais étudier

Re: plusieurs enregistrements sur une page pdf

Posté : 15 juin 2010, 12:38
par Cypher_PHP
je m'y perds car soit ils se superposent soit ils soient sur chaque page soit un seul enregistrement par page

Re: plusieurs enregistrements sur une page pdf

Posté : 15 juin 2010, 13:18
par stealth35
je m'y perds car soit ils se superposent soit ils soient sur chaque page soit un seul enregistrement par page
parce que y'a les mêmes coordonnées

Re: plusieurs enregistrements sur une page pdf

Posté : 15 juin 2010, 15:48
par Cypher_PHP
rien à faire
je me casse la tête

Re: plusieurs enregistrements sur une page pdf

Posté : 15 juin 2010, 15:50
par stealth35
rien à faire
je me casse la tête
pour tester fais juste une page, avec des données bidons et essaye de bien aligné tes coordonnées

Re: plusieurs enregistrements sur une page pdf

Posté : 15 juin 2010, 15:57
par Cypher_PHP
ce que j'ai fait avec une division comme pour titre, c'est correct (il me semble, puisque j'ai au moins 40 divisions, il m'affiche au moins 40 pages)

puis j'insère une donnée bidon à l'intérieur d'une division. ok mais quand j'insère plusieurs enregistrements, ca saute sur chaque page ou ils se superposent

Re: plusieurs enregistrements sur une page pdf

Posté : 15 juin 2010, 16:07
par stealth35
si ca saute une page c'est dû au $pdf->AddPage();
si ca se chevauche c'est dû au coordonnée (qui sont les même pour chaque entrée)

Re: plusieurs enregistrements sur une page pdf

Posté : 16 juin 2010, 15:00
par Cypher_PHP
Bon, je remets à plat le code
pour l'instant, j'ai mis uniquement des divisions
maintenant, je vais essayer d'insérer des enregistrements appartenant à une division

voici le code php
<?php
// va chercher le script pdf
require('fpdf16/fpdf.php');

//identifiants de connexion
$host		=	"************";
$dblogin 	=	"************";
$dbpass		=	"**************";
$dbbase		=	"***********";


$connect	=	mysql_connect($host,$dblogin,$dbpass);
$select		=	mysql_select_db($dbbase, $connect);
$sql 		= " SELECT annuagent.indnni, civ,ainomu,aipren,tel,mailpro,bureau,division,service,pole,fonction, ordre, ordreser, agstru.stru as ser, agstru.resp as responsable
				FROM annuagent, agstru
				WHERE ordre!='0'
				AND
				annuagent.indnni = agstru.indnni
				ORDER BY ordre ASC, ordreser ASC, division ASC, agstru.stru DESC, agstru.resp DESC,ainomu ASC ";
$req		=	mysql_query($sql)or die (mysql_errno() . " : " .mysql_error());
$list		= 	mysql_fetch_array($req);

	
// cree une classe PDF pour les header et footer
	class PDF extends FPDF
	{
		function Header()
		{
// 	bloc bleu et titre des champs sur toutes les pages
				$this->Image('images/logo_annuaire.jpg',10,8,33);
				$this->SetFillColor(0,81,158);
				$this->SetTextColor(255,255,255);
				$this->SetFont('Arial','B',10);
				$this->SetXY(2,45);
				$this->MultiCell(43,6,'Nom',0,'C',true);
				$this->SetXY(45,45);
				$this->MultiCell(30,6,'Prenom',0,'C',true);
				$this->SetXY(75,45);
				$this->MultiCell(40,6,'Service',0,'C',true);
				$this->SetXY(115,45);
				$this->MultiCell(28,6,'Telephone',0,'C',true);
				$this->SetXY(143,45);
				$this->MultiCell(70,6,'Courriel',0,'C',true);
				$this->SetXY(200,45);
				$this->MultiCell(20,6,'Bureau',0,'C',true);
				$this->SetXY(220,45);
				$this->MultiCell(75,6,'Fonction',0,'C',true);

// deux lignes  au dessus du bloc bleu				
				$y	= 34;
				$this->SetY($y);
				$this->SetLineWidth(0.1);
				$this->SetDrawColor(0,81,158);				
				$this->line(2,36,90,36);
				$this->line(190,36,295,36);
		}
		function Footer()
		{
			if($this->PageNo()>2){
				$this->SetLineWidth(0.1);
				$this->SetDrawColor(0,81,158);				
				$this->line(2,200,295,200);
				$this->SetFont('Arial','',7);
				$this->SetTextColor(0,0,0);
				$this->Text(10,205,'Annuaire des personnels 2010');
				$this->SetY(-12);
				$this->Cell(0,10,$this->PageNo().'/{nb}',0,0,'C');
				$now =	date("j/m/Y");
				$this->Text(270,205,$now);
				}
		}
	}
// crée une instance pdf				
				$pdf = new PDF('L','mm','A4');
				$pdf->AliasNbPages();
				$pdf->AddPage();
				$pdf->Image('images/annuaire_couv.png',0,0);
				$pdf->AddPage();
				$pdf->Image('images/organigrame_2010.jpg',0,0,297,210);
				$pdf->AddPage();
// crée des rows				
				$prevCat = ''; 		
				$ainomu = '';
				$i = 0;
				while($row = mysql_fetch_array($req))
					{
								if ( $row['division'] != $prevCat)
								{			 
									$pdf->SetFont('Arial','B',16);
									$pdf->SetTextColor(0,81,158);
									$pdf->Text(100,39,substr(stripslashes($row['division']),0,120));
									$pdf->AddPage();

								}
											
						$prevCat = $row['division'];
					}   
			
// femeture de mysql		
	mysql_close();

// génère un pdf
	$pdf->Output();

?>