IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez / Téléchargez Sources et Outils PHP Discussion :

Comment générer un pdf a partir d'une page HTML ?


Sujet :

Contribuez / Téléchargez Sources et Outils PHP

  1. #1
    Membre du Club
    Inscrit en
    Août 2004
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 254
    Points : 69
    Points
    69
    Par défaut Comment générer un pdf a partir d'une page HTML ?
    Bonjour,

    J'utilise Wampserver pour développer un projet en php.

    je veux quand je produits un état HTML et PHP pouvoir le générer sous forme de fichier pdf.

    Si vous avez une solution ?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Par exemple :
    http://html2pdf.fr/
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Salut,

    Une autre possibilité est dompdf

    Cettre lib est plus souple que html2pdf (tu peux l'utiliser sur une page html complète), par contre il peut y avoir des problèmes pour des tableaux complexes et il gère parfois mal les positions float. Tu peux l'essayer si ton html est prévisible (pour éviter ces problèmes) car il a l'avantage d'être très simple et pratique d'utilisation.

  4. #4
    Membre du Club
    Inscrit en
    Août 2004
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 254
    Points : 69
    Points
    69
    Par défaut
    Bonjour,

    Pour dire, je vais devoir gérer en Html de véritables tableaux. On m'a conseille Fpdf aussi.
    Je sais pas parmi eux, lequel est le plus simple et apte a gérer les tableaux HTML ?

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Salut,

    Avec fpdf on ne crée pas de pdf à partir de html mais en utilisant les fonctions de la lib fpdf. C'est souvent plus robuste mais aussi beaucoup plus laborieux puisque tu vas devoir créer du code spécifique pour créer ta page.

    Avec dompdf et dans une moindre mesure avec html2pdf tu peux utiliser directement du html et tu n'as rien d'autre à faire que de paramétrer le format de sortie.

    Par exemple j'ai utilisé ce système avec dompdf pour ce site de poêles-cheminées. Si tu ouvres une page produit (après avoir cliqué sur un produit dans une rubrique de produits) tu trouves en bas de chaque page un symbol "pdf" et un autre symbol "imprimante". Le premier va générer un pdf et le second la même chose en html pour ceux qui voudraient imprimer directement sans passer par du pdf. Je me sert du même html dans les trois cas (seuls les liens internes sont modifiés) : pour faire ma page produit, pour celle qui sert à imprimer via le navigateur et pour celle qui génère le pdf. Pratique

  6. #6
    Membre du Club
    Inscrit en
    Août 2004
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 254
    Points : 69
    Points
    69
    Par défaut
    Merci pour les reponsess

    Que voulez-vous dire tableaux html complexes ? Car moi je vais devoir utiliser pour mes états en html beaucoup de tableaux html

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Salut,

    Justement je t'ai donné un lien pour te donner une idée. En regardant le html de la fiche d'impression - le html qui sert pour dompdf est identique - tu pourras voir que l'on peut faire des tableaux un peu complexes.

    Mais il y a des limites : par exemple si je met un "margin-top:1em" sur un tableau pour l'espacer du div précédent, le résultat n'est pas conforme, de même si j'utilise un padding-top en pourcentage sur une cellule de tableau (néanmoins les pourcentages sont correctement pris en compte pour les dimensions, c'est juste au niveau des padding dans les tableaux que ça cloche).

    Il y a quasiment toujours moyen de contourner ces problèmes, dans le premier cas j'ai inclus mon tableau dans un div et appliqué le margin-top sur le div, et dans le second cas j'ai utilisé des em plutôt que des pourcentages pour faire mon padding-top.

    C'est pour cela que je dis que dompdf est utilisable si c'est toi qui gère le html car tu pourras le faire en conséquence en corrigeant éventuellement les petits problèmes. Ce serait plus délicat en cas d'utilisation sur n'importe quel html, une page web prise au hasard par exemple.

    Un exemple de code à partir de ma fiche d'impression html que je récupère pour générer et enregistrer le pdf dans un dossier et le faire afficher par le navigateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    require_once 'dompdf/autoload.inc.php';
    use Dompdf\Dompdf;
     
    // Données récupérées en bdd pour alimenter le html
    require 'Impression/produit_impr_php.php';
     
    // Déclenche la temporisation de sortie (syntaxe >= php 5.4)
    ob_start(null, 0, PHP_OUTPUT_HANDLER_REMOVABLE);
     
    // Html complet avec doctype (strictement identique à la fiche d'impression html)
    require 'Impression/produit_impr_html.php';
     
    // Récupère le tampon
    $content_html = ob_get_contents();
     
    // Efface le tampon
    ob_end_clean();
     
     
    // Instantiate and use the dompdf class
    $dompdf = new Dompdf();
    $dompdf->loadHtml($content_html);
     
    $dompdf->set_paper("a4", "portrait"); 
    // Render the HTML as PDF
    $dompdf->render();
     
    //$nom_fichier_pdf est défini plus haut dans "Impression/produit_impr_php.php"
    $adresse_pdf = 'PDF_PRODUITS/'.$nom_fichier_pdf;
     
    // Enregistre le fichier pdf dans un dossier	
    file_put_contents($adresse_pdf,$dompdf->output());
     
    // Output the generated PDF to Browser
    $dompdf->stream("$nom_fichier_pdf", array("Attachment" => false));
    ?>
    pour dire que c'est assez facile de générer un pdf à la volée à partir d'un document html complet donc il te faudra peu de temps pour essayer

    EDIT: A noter qu'il y a un problème avec wampserver pour générer des grosses images (redimensionnées dans mon exemple pour fournir une bonne qualité d'impression). C'est lent, parfois il faut attendre une bonne vingtaine de seconde pour la génération du pdf. Mais ça s'arrange sur le serveur distant (ovh) puisque le même fichier ne met plus que quelques secondes à se générer, 5 secondes maximum en fonction du nombre et de la dimension des images.

    Cela dit si tu rencontre des problèmes, sabotage t'a donné une autre solution... J'ai utilisé dompdf parce que ça a fonctionné assez vite et qu'on peut prendre un html complet, mais html2pdf est peut-être plus robuste.

  8. #8
    Membre du Club
    Inscrit en
    Août 2004
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 254
    Points : 69
    Points
    69
    Par défaut
    Bonjour,

    je vois bien les aspects expliques. j'ai même une fois utilisé html2pdf mais l’inconvénient est qu'il ne prends pas tout le code html complet, tu es obligé de réécrire ton code html que tu dois générer dans un autre fichier a part en n’omettant certaines balises Html. ce qui augmente ta quantité de fichiers php.

    Sinon j'ai bien lu que html2pdf est pus adapte ux tableaux complexe. Maintenant avec cet inconvénient sur html2pdf que je viens de relater, c'est un peu décourageant de ce cote la

    voila

Discussions similaires

  1. Comment créer un fichier TEXT à partir d'une page HTML ?
    Par Zebulon777 dans le forum VBScript
    Réponses: 0
    Dernier message: 17/09/2010, 14h23
  2. générer un pdf a partir d'une cutom datasource
    Par maria1985 dans le forum Jasper
    Réponses: 0
    Dernier message: 30/07/2010, 15h15
  3. Réponses: 6
    Dernier message: 27/06/2007, 10h33
  4. Réponses: 1
    Dernier message: 02/04/2007, 11h23
  5. [WebForms]Comment générer dynamiquement tout ou partie d'une page html
    Par skywaukers dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 02/01/2007, 11h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo