[RESOLU] [FPDF]Projet, géneration d'un pdf avec récuperation d'informations par un formulaire HTML

Eléphanteau du PHP | 15 Messages

21 oct. 2016, 13:26

Bonjour,

Comme indiqué dans le titre je suis un débutant PHP et j'utilise la classe FPDF : http://www.fpdf.org pour générer un fichier pdf avec des données utilisateur récupérer par un formulaire HTML. Mais j'aimerais pouvoir mettre en valeur des informations par le biais d'un cadre autour de plusieurs cellules de texte le problème étant que le cadre devrais pouvoir s'adapter aux dimension du texte puisque qu'il est dynamique et jusqu’à présent je n'ai pus trouvé aucune réponse à ce problème en parcourant le net.

Voici le code HTML :

Code : Tout sélectionner

<!doctype html> <html lang="fr"> <head> <meta charset="utf-8"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Formulaire d'inventaire</title> <link rel="stylesheet" href="css/style.css"> </head> <body> <form method="post" target="_blank" action="traitement.php"> <p> <label for="DATEINVENTAIRE">Date d'établissement de l'inventaire : </label> <input type="text" name="DATEINVENTAIRE" id="DATEINVENTAIRE" placeholder="Ex: 25/07/1996"/> </p> <p> La personne proteger etais t'elle presente ?</br> <input type="radio" name="PRESENCEINVENTAIRE" value ="1"/> <label for="PRESENCE">Oui</label> <input type="radio" name="PRESENCEINVENTAIRE" value="0"/> <label>Non</label> </p> <p> En présence de deux temoins ou d'un auxiliaire de justice</br> <input type="radio" name="PRESENCEINVENTAIRETEMOIN" value ="0"/> <label for="PRESENCE">Deux témoins</label> <input type="radio" name="PRESENCEINVENTAIRETEMOIN" value="1"/> <label>Un commissaire-priseur</label> <input type="radio" name="PRESENCEINVENTAIRETEMOIN" value="2"/> <label>Un huissier de justice</label> <input type="radio" name="PRESENCEINVENTAIRETEMOIN" checked="checked" value="3"/> <label>Selectionnez</label> </p> <p> <fieldset> <legend>Premier témoin</legend> <p> <label>Nom du premier témoin : </label> <input type="text" name="TEMOIN1NOM"/> </p> <p> <label>Prénom du premier témoin : </label> <input type="text" name="TEMOIN1PRENOM"/> </p> </fieldset> <fieldset> <legend>Deuxième témoin</legend> <p> <label>Nom du deuxième temoin : </label> <input type="text" name="TEMOIN2NOM"/> </p> <p> <label>Prénom du deuxième temoin : </label> <input type="text" name="TEMOIN2PRENOM"/> </p> </fieldset> </p> <p> <fieldset> <legend>HUISSIER</legend> <p> <label>Nom de l'huissier de justice : </label> <input type="text" name="NOMHUISSIER"/> </p> <p> <label>Prénom de l'huissier de justice : </label> <input type="text" name="PRENOMHUISSIER"/> </p> </fieldset> </p> <p> <fieldset> <legend>COMMISSAIRE</legend> <p> <label>Nom du commissaire : </label> <input type="text" name="NOMCOMIS"/> </p> <p> <label>Prénom du commissaire : </label> <input type="text" name="PRENOMCOMIS"/> </p> </fieldset> </p> <p> <label for="RG">Dossier n° : </label> <input type="text" name="RG" id="RG" placeholder="Ex: 32/A/00098"/> </p> <p> Civilité</br> <input type="radio" name="CIVILITER" id="MASCULIN" value="1"/> <label>M.</label> <input type="radio" name="CIVILITER" id="FEMININ" value="0"/> <label>Mme.</label> </p> <p> <label for="NOM">Nom de famille : </label> <input type="text" name="NOM" id="NOM" placeholder="Ex: MACHIN"/> </p> <p> <label for="PRENOM">Prénoms : </label> <input type="text" name="PRENOM" id="PRENOM" placeholder="Ex: Truc, Bidule, lala"/> </p> <p> <label for="NOMUSAGE">Nom d'usage : </label> <input type="text" name="NOMUSAGE" id="NOMUSAGE" placeholder="Ex: Truc"/> </p> <p> <label for="ADRESSE">Adresse : </label> <textarea name="ADRESSE" id="ADRESSE" rows="10" cols="50"></textarea> </p> <p> <label for="pays">Quel est la situation de la personne protégé ?</label><br /> <select name="SITUATION" id="SITUATION"> <option value="CELIBATAIRE">CÉLIBATAIRE</option> <option value="MARIE">MARIÉ</option> <option value="PACS">PACTE CIVIL DE SOLIDARITÉ</option> <option value="VEUF">VEUF</option> <option value="DIVORCE">DIVORCÉ</option> <option value="CORPS">SÉPARÉ DE CORPS</option> <option value="FAIT">SÉPARÉ DE FAIT</option> </select> </p> <p> <label for="REGIME">Quel est le régime matrimoniale en vigeur?</label><br /> <select name="REGIME" id="REGIME"> <option value="AUCUN">AUCUN</option> <option value="ACQUETS">COMMUNAUTÉ RÉDUITE AUX ACQUÊTS</option> <option value="BIENS">SÉPARATION DE BIENS</option> <option value="UNIVERSELLE">COMMUNAUTÉ UNIVERSELLE</option> </select> </p> <p> <input type="submit" value="Envoyer" /> </p> </form> </body> </html>
Et bien sur le PHP :

Code : Tout sélectionner

<?php $NOM = $_POST["NOM"]; $PRENOM = $_POST["PRENOM"]; $NOMUSAGE = $_POST["NOMUSAGE"]; $SITUATION = $_POST["SITUATION"]; $ADRESSE = $_POST["ADRESSE"]; $REGIME = $_POST["REGIME"]; $RG = $_POST["RG"]; $DATEINVENTAIRE = $_POST["DATEINVENTAIRE"]; $TEMOIN1NOM = $_POST["TEMOIN1NOM"]; $TEMOIN1PRENOM = $_POST["TEMOIN1PRENOM"]; $TEMOIN2NOM = $_POST["TEMOIN2NOM"]; $TEMOIN2PRENOM = $_POST["TEMOIN2PRENOM"]; $NOMCOMIS = $_POST["NOMCOMIS"]; $PRENOMCOMIS = $_POST["PRENOMCOMIS"]; $PRENOMHUISSIER = $_POST["PRENOMHUISSIER"]; $NOMHUISSIER = $_POST["NOMHUISSIER"]; $PRESENCEINVENTAIRE = $_POST["PRESENCEINVENTAIRE"]; $PRESENCEINVENTAIRETEMOIN = $_POST["PRESENCEINVENTAIRETEMOIN"]; $CIVILITER = $_POST["CIVILITER"]; require('fpdf.php'); $pdf = new FPDF(); $pdf->SetAuthor('Mme D AQUINO Karine'); $pdf->SetCreator('Mr MURCIA Charly'); $pdf->SetSubject('INVENTAIRE'); $pdf->SetTitle("INVENTAIRE DE DEBUT DE MISSION {$NOM} {PRENOM]"); $pdf->AddPage(); $pdf->SetFont('Times','B',14); $pdf->Image('logo.jpg'); $pdf->Cell(0,15,utf8_decode("INVENTAIRE ÉTABLI LE {$DATEINVENTAIRE}"),0,2,'C'); $pdf->Cell(0,15,utf8_decode("Par Mme D'AQUINO Karine, mandataire judiciaire à la protection des majeurs"),0,2,'C'); $pdf->SetFont('Times','',11); if ($PRESENCEINVENTAIRE == 1 AND $CIVILITER == 1) { // Si le majeur est masculin et présent $pdf->MultiCell(0,5,utf8_decode("En présence de M.{$NOM} {$PRENOM}, le majeur protégé"),0); } elseif ($PRESENCEINVENTAIRE == 1 AND $CIVILITER == 0) { // Si le majeur est féminin et présent $pdf->MultiCell(0,5,utf8_decode("En présence de Mme.{$NOM} {$PRENOM}, la majeur protégée"),0); } elseif ($PRESENCEINVENTAIRE == 0 AND $CIVILITER == 1){ // Si le majeur est absent et masculin $pdf->MultiCell(0,5,utf8_decode("En l'absence de M.{$NOM} {$PRENOM}, le majeur protégé"),0); } elseif ($PRESENCEINVENTAIRE == 0 AND $CIVILITER == 0){ // Si le majeur est absent et féminin $pdf->MultiCell(0,5,utf8_decode("En l'absence de Mme.{$NOM} {$PRENOM}, la majeur protégée"),0); } else { } // Fin de la presence majeur protégé if ($PRESENCEINVENTAIRETEMOIN == 0) { $pdf->MultiCell(0,5,utf8_decode("En présence de deux témoins : {$TEMOIN1NOM} {$TEMOIN1PRENOM} et {$TEMOIN2NOM} {$TEMOIN2PRENOM} proche de {$NOM} {$PRENOM}."),0); } elseif ($PRESENCEINVENTAIRETEMOIN == 1) { $pdf->MultiCell(0,5,utf8_decode("En présence de {$NOMCOMIS} {$PRENOMCOMIS}, commissaire-priseur"),0); } elseif ($PRESENCEINVENTAIRETEMOIN == 2) { $pdf->MultiCell(0,5,utf8_decode("En présence de {$NOMHUISSIER} {$PRENOMHUISSIER}, huissier de justice"),0); } else { } // Fin fr la présence temoin $pdf->MultiCell(0,10,utf8_decode("N° DE RG : {$RG}"),0); $pdf->SetFont('Times','B',14); $pdf->Cell(0,5,utf8_decode("MAJEUR PROTÉGÉ"),0,2,'C'); $pdf->SetFont('Times','',11); if ($NOMUSAGE == '') { } else { $pdf->MultiCell(0,10,utf8_decode("Nom d'usage : {$NOMUSAGE}"),0); } $pdf->MultiCell(0,10,utf8_decode("Nom : {$NOM}"),0); $pdf->MultiCell(0,10,utf8_decode("Prénoms : {$PRENOM}"),0); $pdf->MultiCell(0,10,utf8_decode("Adresse : {$ADRESSE}"),0); if ($SITUATION == 'CELIBATAIRE') { $pdf->MultiCell(0,10,utf8_decode("Situation : Célibataire"),0); } elseif ($SITUATION == 'MARIE') { $pdf->MultiCell(0,10,utf8_decode("Situation : Marié"),0); } elseif ($SITUATION == 'PACS') { $pdf->MultiCell(0,10,utf8_decode("Situation : Pacte civil de solidarité"),0); } elseif ($SITUATION == 'VEUF') { $pdf->MultiCell(0,10,utf8_decode("Situation : Veuf"),0); } elseif ($SITUATION == 'DIVORCE') { $pdf->MultiCell(0,10,utf8_decode("Situation : Divorcé"),0); } elseif ($SITUATION == 'CORPS') { $pdf->MultiCell(0,10,utf8_decode("Situation : Séparé de corps"),0); } elseif ($SITUATION == 'FAIT') { $pdf->MultiCell(0,10,utf8_decode("Situation : Séparé de fait"),0); } else { } // Fin Situation if ($REGIME == 'AUCUN') { } elseif ($REGIME == 'ACQUETS') { $pdf->MultiCell(0,10,utf8_decode("Régime matrimonial institué : Communauté réduite aux acquêts"),0); } elseif ($REGIME == 'BIENS') { $pdf->MultiCell(0,10,utf8_decode("Régime matrimonial institué : Séparation de biens"),0); } else { $pdf->MultiCell(0,10,utf8_decode("Régime matrimonial institué : Communauté universelle"),0); } $pdf->Output('I',"INVENTAIRE DE DEBUT DE MISSION {$NOM} {$PRENOM}"); ?>
En espérant que vous pourrez m'apportez une réponse.

Merci d'avance,

Bernard_2102
Invité n'ayant pas de compte PHPfrance

21 oct. 2016, 18:44

Bonjour,
pour info je suis en plein dedans (création devis, facture), j'utilise une fonction trouvé sur le web.

tu compte ta chaine de caractère x caractères par ligne:

<?php
$str = 'abcdef';
echo strlen($str); // 6

$str = ' ab cd ';
echo strlen($str); // 7
?>

et tu passes les valeurs en variable $w, $h
Fonction à utiliser:

function RoundedRect($x, $y, $w, $h, $r, $corners = '1234', $style = '')
//x, y : coin supérieur gauche du rectangle.
//w, h : largeur et hauteur.
//r : rayon des coins arrondis.
//corners : numéro du ou des angles à arrondir : 1, 2, 3, 4 ou toute combinaison (1=haut gauche, 2=haut droite, 3=bas droite, 4=bas gauche).
//style : comme celui de Rect() : F, D (défaut), FD ou DF.
{
$k = $this->k;
$hp = $this->h;
if($style=='F')
$op='f';
elseif($style=='FD' || $style=='DF')
$op='B';
else
$op='S';
$MyArc = 4/3 * (sqrt(2) - 1);
$this->_out(sprintf('%.2F %.2F m',($x+$r)*$k,($hp-$y)*$k ));

$xc = $x+$w-$r;
$yc = $y+$r;
$this->_out(sprintf('%.2F %.2F l', $xc*$k,($hp-$y)*$k ));
if (strpos($corners, '2')===false)
$this->_out(sprintf('%.2F %.2F l', ($x+$w)*$k,($hp-$y)*$k ));
else
$this->_Arc($xc + $r*$MyArc, $yc - $r, $xc + $r, $yc - $r*$MyArc, $xc + $r, $yc);

$xc = $x+$w-$r;
$yc = $y+$h-$r;
$this->_out(sprintf('%.2F %.2F l',($x+$w)*$k,($hp-$yc)*$k));
if (strpos($corners, '3')===false)
$this->_out(sprintf('%.2F %.2F l',($x+$w)*$k,($hp-($y+$h))*$k));
else
$this->_Arc($xc + $r, $yc + $r*$MyArc, $xc + $r*$MyArc, $yc + $r, $xc, $yc + $r);

$xc = $x+$r;
$yc = $y+$h-$r;
$this->_out(sprintf('%.2F %.2F l',$xc*$k,($hp-($y+$h))*$k));
if (strpos($corners, '4')===false)
$this->_out(sprintf('%.2F %.2F l',($x)*$k,($hp-($y+$h))*$k));
else
$this->_Arc($xc - $r*$MyArc, $yc + $r, $xc - $r, $yc + $r*$MyArc, $xc - $r, $yc);

$xc = $x+$r ;
$yc = $y+$r;
$this->_out(sprintf('%.2F %.2F l',($x)*$k,($hp-$yc)*$k ));
if (strpos($corners, '1')===false)
{
$this->_out(sprintf('%.2F %.2F l',($x)*$k,($hp-$y)*$k ));
$this->_out(sprintf('%.2F %.2F l',($x+$r)*$k,($hp-$y)*$k ));
}
else
$this->_Arc($xc - $r, $yc - $r*$MyArc, $xc - $r*$MyArc, $yc - $r, $xc, $yc - $r);
$this->_out($op);
}

Eléphanteau du PHP | 15 Messages

22 oct. 2016, 01:17

Je vais tester ça, merci

Eléphanteau du PHP | 15 Messages

22 oct. 2016, 18:19

En faite j'ai juste besoin de pouvoir définir la valeur "h" de la fonction "Rect" de "fdpf" selon la taille des Multicellule que j'utilise. Cette fonction qui permet de compter le nombre de caractère pourrait m'aider dans ce sens mais je ne vois pas comment.

Code : Tout sélectionner

$pdf->MultiCell(0,5,utf8_decode('Adresse : '.$_POST['ADRESSE'].''),0);

Code : Tout sélectionner

$pdf->Rect(10,67,190,50);

Eléphanteau du PHP | 22 Messages

22 oct. 2016, 18:47

imaginons ton texte de 200 caractères (trouvé par strlen ) tu décides de créer un cadre de 100mm de large, selon la taille de la police cela correspond à 40 caractères donc 200/40 = 5, soit h = 5x hauteur de la police, si hauteur = 5mm h=5x5=25 sachant que fpdf gère les pages en mm 210 x 297 format A4

Eléphanteau du PHP | 15 Messages

22 oct. 2016, 19:04

D'accord mais comment faire pour déclarer "h" en tant que variable qui soit la résultante de la multiplication du strlen, naivement j'aurais fais comme ça :

Code : Tout sélectionner

$h = (strlen($_POST['ADRESSE']) / 68) x 11 ;
Bien sur rien n'est bon dans cette ligne mais c'est un peu comme ça que je l'imagine je divise la valeur retourné par le strlen par le nombre de caractère possible sur une ligne qui est de 68 dans mon cas puis je le multiplie par la taille de ma police qui de 11 et j'obtiens donc la largeur.

Mais je ne sais pas comment l'éxprimer en php

EDIT :

Code : Tout sélectionner

$COUNTADRESSE = ''. strlen($_POST['ADRESSE']) .'';
ça c'est correct mais quel est la syntaxe pour pouvoir multiplier le tout ?.
Modifié en dernier par LordNetronos le 22 oct. 2016, 20:12, modifié 2 fois.

Eléphanteau du PHP | 22 Messages

22 oct. 2016, 20:05

$h = ceil((strlen($_POST['ADRESSE'])) / 68 * 11) ;
La hauteur et non la largeur.

Eléphanteau du PHP | 15 Messages

22 oct. 2016, 20:13

Je suis vraiment désolé je suis un novice dans un domaine que je connais peu, j'avance a taton, je te remercie de prendre du temps pour m'épauler.

Eléphanteau du PHP | 22 Messages

22 oct. 2016, 20:26

pas de pb.
google est ton ami tu trouves tout en cherchant un peu.

Eléphanteau du PHP | 15 Messages

22 oct. 2016, 21:11

Ok je vois le bout du tunnel, tout marche impec, j'ai du juste adapter quelques petites chose mais en gros c'est bon mais certaines petite chose me chiffonne :

Code : Tout sélectionner

if ($_POST['NOMUSAGE'] == '') { } else { $pdf->MultiCell(0,10,utf8_decode('Nom d\'usage : '.$_POST['NOMUSAGE'].''),0); $h + 10; }
Ce petit bout de code me permettais d'imprimer ou non la ligne si nécessaire mais avec le rectangle dynamique que nous avons mis au point il me faut pouvoir lui rajouter 10 quand la ligne s'imprime afin que le cadre s'adapte. Mais encore une fois je me confronte a des erreurs de syntaxe et je ne sais pas quoi chercher sur google pour trouvé réponse a mes questions.

Une autre chose aussi c'est que j'aurais besoin de pouvoir set la valeur a 5 au minimum, parce que forcément quand j'ai moins de 68 caractère on part dans le négatif. je pourrais le faire avec des conditions mais je me demandais si il y avais plus simple.

EDIT : Alors j'ai résolu mon premier problème ; Les autres cellules qui sont à l'interieur de mon cadre valent 50 donc au lieu de les rajouter dans la déclaration j'ai réussi a les rajouté dans la création du rectangle :

Code : Tout sélectionner

$pdf->Rect(10,67,190,($h)+50);
Ce qui m'as permis simplement du coup :

Code : Tout sélectionner

if ($h >= 5) { $h = 5; } else { }
Ce qui marche très bien mais du coup il ne me manque plus que à trouvé pour rajouter 10 quand le champ "Nom d'usage" apparaît.

Eléphanteau du PHP | 22 Messages

23 oct. 2016, 00:50

si j'ai bien compris il faut remplacer :
if ($_POST['NOMUSAGE'] == '') {
         
   }
   else {
      $pdf->MultiCell(0,10,utf8_decode('Nom d\'usage : '.$_POST['NOMUSAGE'].''),0);
      $h + 10;
   }
Par:
if ($_POST['NOMUSAGE'] == '') {
         
   }
   else {
      $pdf->MultiCell(0,10,utf8_decode('Nom d\'usage : '.$_POST['NOMUSAGE'].''),0);
     $h= $h + 10;
   }

Eléphanteau du PHP | 15 Messages

23 oct. 2016, 01:32

Oui mais ça ne fonctionne pas pour une raison que je ne comprend pas

Eléphanteau du PHP | 22 Messages

23 oct. 2016, 03:12

$h est bien déclaré avant la condition?

Eléphanteau du PHP | 15 Messages

23 oct. 2016, 05:55

Bien sur :

Code : Tout sélectionner

$h = (ceil((strlen($_POST['ADRESSE'])) / 68 * 2.9));

Eléphanteau du PHP | 22 Messages

23 oct. 2016, 11:49

le code est bon tu dois avoir un échappement ou une erreur ailleurs.
Ps abondance de parenthèse ne nuit pas mais inutile.