Partage
  • Partager sur Facebook
  • Partager sur Twitter

Générer un fichier pdf à partir d'un formulaire

    21 mars 2019 à 12:01:08

    Bonjour à tous,

    Je m'explique. J'ai un formulaire classique en html avec un peu d'angular pour pouvoir écrire les données du formulaire en temps réel dans un document qui est a côté du formulaire. Ce document a droite sert a visualiser le document final avec les réponses des utilisateurs. Donc pour le moment j'ai juste ça, un form a étape en html/js et un document html.

    Ce que je souhaiterais, c'est qu'une fois que l'utilisateur a fini de rentrer toutes ces informations dans le formulaire, elle puisse payer pour récupérer le document au format pdf. Ce sont des documents juridique donc il y'aurai 3-4 modèles pré-définis de document pdf différents (je dis bien modèles, les document devront être déjà rempli de texte (par l'huissier) avec des cases vide (info client) qui se remplissent en fonction des réponse du formulaire et ça fait une lettre complète a la fin). Ce n'est pas forcément le document de visualisation a droite de mon form qui faut générer en pdf, mais plutôt avoir des modèles prédéfinis a trou qu'on génère et rempli en fonction des réponses du formulaire. 

    L'idée est que, au lieu de payer des frais d'huissiers pour récupérer des lettres juridique a trou a remplir soit même puis a envoyer soit même, un cabinet d'huissiers a fait appel a moi pour développer cette solution pour que les personne puissent remplir la lettre directement depuis chez eux, payer la lettre depuis chez eux et récupère la lettre au format pdf il ont juste a l'envoyer après sans la modifier.

    Je me suis renseigné un petit peu sur html2pdf, fpdf et tcpdf mais j'y comprend pas grand chose, et surtout est ce possible d'ajouter une étape de paiement entre la validation du formulaire et la génération du pdf, surement en enregistrant les donnée en base de données a la soumission du form et en allant récupérer les infos après le paiements pour générer le pdf. 

    Mon code est juste un formulaire en html avec un peu de js pour dynamiser les bouton suivant et précédent (form à étapes) et un document en html avec un ng-model pour écrire en live les infos du form. Si vous voulez que je poste mon code, dite le moi. 

    Je suis un peu perdu, j'aurai aimé avoir votre aide et surtout qu'on m'éclaire sur la façon de procéder. 

    Merci à vous. 

    • Partager sur Facebook
    • Partager sur Twitter
      21 mars 2019 à 16:14:29

      Bonjour,

      Personnellement j'utilise DomPDF, c'est un peu le même principe que Html2Pdf, tu crées une page html que tu convertis en PDF, rien de bien difficile.

      Quant au paiement, où en es-tu, es-tu en mesure de le traiter ? Si oui, rien de compliqué non plus à y conditionner le PDF.

      • Partager sur Facebook
      • Partager sur Twitter
        21 mars 2019 à 20:10:07

        Bonjour, 

        J'utilise http://www.fpdf.org/ on peut tout personnaliser !

        Bon courage 

        • Partager sur Facebook
        • Partager sur Twitter

        Musaly

          22 mars 2019 à 15:51:43

          Bonjour et merci pour ton retour,

          Je me suis renseigné un peu sur toutes les librairie disponible FPDF, HTML2PDF, mPDF, tcPDF etc mais je suis un peu perdu la, je tes envoyé un message privée pour avoir un peu plus de renseignement si tu accepte d'y répondre. Encore merci à toi pour ton retour. 

          • Partager sur Facebook
          • Partager sur Twitter
            22 mars 2019 à 17:09:27

            Ben bon courage, fpdf demande de tout réécrire (la dernière version date de 2015).

            • Partager sur Facebook
            • Partager sur Twitter
              22 mars 2019 à 18:12:41

              Quand tu dis que fpdf demande de tout réécrire tu parle de quoi concrètement?

              J'ai vu sur leur site qu'il mettait des exemples a disposition 

              • Partager sur Facebook
              • Partager sur Twitter
                22 mars 2019 à 18:52:18

                Et bien tu dois déclarer chaque cellule, chaque bout de texte, chaque mise en forme... c'est quand même fastidieux.

                Avec DomPDF ou TCPDF, tu crées une bête page html, et tu la convertis en PDF. Avec TCPDF tu peux même gérer le PDF-A.

                Je te montre un exemple pour que ce soit plus concret :

                <?php
                include('../connect.php');
                $facture = mysqli_real_escape_string($connect,$_POST['facture']);
                ini_set('display_errors',1);
                error_reporting(E_ALL);
                require_once("dompdf/autoload.inc.php");
                use Dompdf\Dompdf;
                ob_start();
                $req = 'SELECT *,DATE_FORMAT(datefact,"%d/%m/%Y") AS datef FROM facture INNER JOIN clients ON client=clients_id WHERE facture_id='.$facture;
                $query = mysqli_query($connect,$req); 
                $data = mysqli_fetch_array($query);
                
                ?>
                <html>
                <body>
                <img src="../img/logo.png" style="position: absolute; margin-left: -25mm; left: 50%; top: -6mm; width: 50mm" />
                <div style="width:100%">
                <table style="width:100%">
                <tr>
                	<td style="width:70%">
                		<table>
                		<tr>
                			<td>xxxxxxxxxxxxxxxx</td>
                		</tr>
                		<tr>
                			<td>xxxxxxxxxxxx</td>
                		</tr>
                		<tr>
                			<td>xxxxxxxxxxxxx</td>
                		</tr>
                		<tr>
                			<td>Tél : 06 xxxxxxxxxxxxxxxxx</td>
                		</tr>
                		<tr>
                			<td>Siret : xxxxxxxxxxxxxxx </td>
                		</tr>
                		<tr>
                			<td>N de décl. d’activité : xxxxxxxxxxx</td>
                		</tr>
                		<tr>
                			<td>xxxxxxxxxxxx@gmail.com</td>
                		</tr>
                		<tr>
                			<td>www.xxxxxxxxxxxx.com</td>
                		</tr>
                		</table>
                	</td>
                	<td style="width:30%">
                	<div style="border: solid thin #6b7a8f">
                		<div style="color: white; background-color: #6b7a8f; font-weight: bold; padding: 5px; text-align: center" colspan=2>Facture</div>
                		<div style="padding: 3px">N° :  <?php echo $data['num']; ?></div><div style="padding: 3px">Date :  <?php echo $data['datef']; ?></div>
                	</div>
                	</td>
                </tr>
                </table>
                </div>
                <div style="margin-left:350px;border: thin black solid; padding: 6px;">
                <table>
                <tr>
                	<td><?php echo $data['nom']; ?></td>
                </tr>
                <tr>
                	<td><?php echo $data['adresse']; ?></td>
                </tr>
                <tr>
                	<td><?php echo $data['cpt']; ?></td>
                </tr>
                <tr>
                	<td><?php echo $data['cp'].' '.$data['ville']; ?></td>
                </tr>
                <tr>
                	<td><?php echo $data['tva']; ?></td>
                </tr>
                </table>
                </div>
                <table style="width:100%; border-collapse: collapse; margin-top:30px">
                <tr style="color: white; background-color: #6b7a8f; font-weight: bold">
                	<td style="border: thin black solid; text-align: center;padding:5px">Désignation</td>
                	<td style="border: thin black solid;border-right: thin black solid; text-align: center;padding:5px;width:20mm">Prix unitaire HT</td>
                	<td style="border: thin black solid;border-right: thin black solid; text-align: center;padding:5px;width:5mm">Qté</td>
                	<td style="border: thin black solid;border-right: thin black solid; text-align: center;padding:5px;width:20mm">Prix Total HT</td>
                </tr>
                <tr>
                	<td style="border-left: thin black solid; padding:5px"><?php echo $data['entete']; ?></td>
                	<td style="border-right: thin black solid; border-left: thin black solid"></td>
                	<td style="border-right: thin black solid; border-left: thin black solid"></td>
                	<td style="border-right: thin black solid; border-left: thin black solid"></td>
                </tr>
                <?php $req = 'SELECT *,DATE_FORMAT(datefact,"%d/%m/%Y") AS datef FROM prest INNER JOIN facture ON fact=facture_id INNER JOIN clients ON client=clients_id WHERE facture_id='.$facture;
                
                $query = mysqli_query($connect,$req); 
                $totalgen =0;
                while($data2 = mysqli_fetch_array($query))
                {
                	$prixunit = $data2['prixunit']/100;
                	$qte = $data2['qte'];
                	$montant = $prixunit*$qte;
                $totalgen += $montant;
                 ?>
                <tr style="padding: 5px">
                	<td style="vertical-align: top; border-left: thin black solid; text-align: left; padding:5px; height: 15mm"><?php echo $data2['nature']; ?></td>
                	<td style="vertical-align: top; border-right: thin black solid; border-left: thin black solid; text-align: right;padding:5px"><?php echo number_format($prixunit,2,',',' ').'&nbsp;€'; ?></td>
                	<td style="vertical-align: top; border-right: thin black solid; border-left: thin black solid; text-align: right;padding:5px"><?php echo $qte; ?></td>
                	<td style="vertical-align: top; border-right: thin black solid; border-left: thin black solid; text-align: right;padding:5px"><?php echo number_format($montant,2,',',' ').'&nbsp;€'; ?></td>
                </tr>
                <?php } ?>
                <tr style="padding: 5px">
                	<td style="vertical-align: top; border-top: thin black solid; text-align: right; padding:5px"></td>
                	<td colspan=2 style="vertical-align: top; border-top: thin black solid; text -align: right;padding:5px">Total HT : </td>
                	<td style="vertical-align: top; border: thin black solid; border-left: thin black solid; text-align: right;padding:5px"><?php echo number_format($totalgen,2,',',' ').'&nbsp;€'; ?></td>
                </tr>
                <tr style="padding: 5px">
                	<td colspan=2 style="font-style: italic; font-size: smaller; vertical-align: top; text-align: right; padding:5px">(TVA non applicable, art. 293 B du CGI)</td>
                	<td></td>
                	<td style="vertical-align: top; border-top: thin black solid; text-align: right;padding:5px"></td>
                </tr>
                </table>
                <footer style="position: fixed; bottom: 20mm">
                <i>Coordonnées bancaires</i><br>
                Titulaire du compte :XXXXXXXXXXXXXX<br>
                RIB : XXXXXXXXXXXXXX<br>
                IBAN : XXXXXXXXXXXXXXXXXXXXXX
                <br>BIC : BOUS FRPP XXX
                </footer>
                </body></html>
                
                <?php
                $html = ob_get_clean();
                $dompdf = new Dompdf();
                $dompdf->load_html($html);
                $dompdf->render();
                $dompdf->stream($data['num'].".pdf");
                ?>
                <script>self.close();</script>

                C'est un exemple de dév donc avec l'affichage des erreurs.

                • Partager sur Facebook
                • Partager sur Twitter

                Générer un fichier pdf à partir d'un formulaire

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown