plusieurs enregistrements sur une page pdf

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : plusieurs enregistrements sur une page pdf

Re: plusieurs enregistrements sur une page pdf

par Cypher_PHP » 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();

?>

Re: plusieurs enregistrements sur une page pdf

par stealth35 » 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)

Re: plusieurs enregistrements sur une page pdf

par Cypher_PHP » 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

Re: plusieurs enregistrements sur une page pdf

par stealth35 » 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

Re: plusieurs enregistrements sur une page pdf

par Cypher_PHP » 15 juin 2010, 15:48

rien à faire
je me casse la tête

Re: plusieurs enregistrements sur une page pdf

par stealth35 » 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

Re: plusieurs enregistrements sur une page pdf

par Cypher_PHP » 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

Re: plusieurs enregistrements sur une page pdf

par Cypher_PHP » 15 juin 2010, 11:27

ok je vais étudier

Re: plusieurs enregistrements sur une page pdf

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

Re: plusieurs enregistrements sur une page pdf

par Cypher_PHP » 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

Re: plusieurs enregistrements sur une page pdf

par stealth35 » 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

Re: plusieurs enregistrements sur une page pdf

par Cypher_PHP » 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...

Re: plusieurs enregistrements sur une page pdf

par stealth35 » 15 juin 2010, 11:11

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

plusieurs enregistrements sur une page pdf

par Cypher_PHP » 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();

?>