plusieurs enregistrements sur une page pdf

Eléphant du PHP | 258 Messages

15 juin 2010, 11:05

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();

?>
Cordialement
---------------------------------------------------------
Cyphos utilise
- Firefox et Google Chrome dernière version
- Windows Seven ou Windows XP SP3,
- Wampserver

ViPHP
ViPHP | 5462 Messages

15 juin 2010, 11:11

c'est parce que a chaque tour de boucle tu fais un
$pdf->AddPage();

Eléphant du PHP | 258 Messages

15 juin 2010, 11:15

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...
Cordialement
---------------------------------------------------------
Cyphos utilise
- Firefox et Google Chrome dernière version
- Windows Seven ou Windows XP SP3,
- Wampserver

ViPHP
ViPHP | 5462 Messages

15 juin 2010, 11:17

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

Eléphant du PHP | 258 Messages

15 juin 2010, 11:20

les premières concernent les images
la 3ème concerne enfin les enregistrements
donc j'utilise une fois à la 3ème
Cordialement
---------------------------------------------------------
Cyphos utilise
- Firefox et Google Chrome dernière version
- Windows Seven ou Windows XP SP3,
- Wampserver

ViPHP
ViPHP | 5462 Messages

15 juin 2010, 11:24

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();
    }
    
}

Eléphant du PHP | 258 Messages

15 juin 2010, 11:27

ok je vais étudier
Cordialement
---------------------------------------------------------
Cyphos utilise
- Firefox et Google Chrome dernière version
- Windows Seven ou Windows XP SP3,
- Wampserver

Eléphant du PHP | 258 Messages

15 juin 2010, 12:38

je m'y perds car soit ils se superposent soit ils soient sur chaque page soit un seul enregistrement par page
Cordialement
---------------------------------------------------------
Cyphos utilise
- Firefox et Google Chrome dernière version
- Windows Seven ou Windows XP SP3,
- Wampserver

ViPHP
ViPHP | 5462 Messages

15 juin 2010, 13:18

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

Eléphant du PHP | 258 Messages

15 juin 2010, 15:48

rien à faire
je me casse la tête
Cordialement
---------------------------------------------------------
Cyphos utilise
- Firefox et Google Chrome dernière version
- Windows Seven ou Windows XP SP3,
- Wampserver

ViPHP
ViPHP | 5462 Messages

15 juin 2010, 15:50

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

Eléphant du PHP | 258 Messages

15 juin 2010, 15:57

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
Cordialement
---------------------------------------------------------
Cyphos utilise
- Firefox et Google Chrome dernière version
- Windows Seven ou Windows XP SP3,
- Wampserver

ViPHP
ViPHP | 5462 Messages

15 juin 2010, 16:07

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)

Eléphant du PHP | 258 Messages

16 juin 2010, 15:00

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();

?>
Cordialement
---------------------------------------------------------
Cyphos utilise
- Firefox et Google Chrome dernière version
- Windows Seven ou Windows XP SP3,
- Wampserver