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

Symfony PHP Discussion :

[KnpSnappyBundle] Créer un PDF [2.x]


Sujet :

Symfony PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Points : 33
    Points
    33
    Par défaut [KnpSnappyBundle] Créer un PDF
    Bonjour à tous,

    Je dois créer des fichiers pdf à partir de pages HTML, j'ai donc utilisé KnpSnappyBundle. J'ai aussi installé wkhtmltopdf.

    J'arrive bien à transformer une page HTML en fichier PDF, mais j'aurais aimé avoir quelques précisions.

    En effet sur l'exemple sur git on nous explique comment générer un pdf et l'envoyé comme réponse, or j'aurais aimé que ce fichier soit crée dans un dossier et qu'il ne s'ouvre pas lorsque l'utilisateur décide d'éditer son fichier PDF.

    sur GIT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $html = $this->renderView('MyBundle:Foo:bar.html.twig', array(
        'some'  => $vars
    ));
     
    return new Response(
        $this->get('knp_snappy.pdf')->getOutputFromHtml($html),
        200,
        array(
            'Content-Type'          => 'application/pdf',
            'Content-Disposition'   => 'attachment; filename="file.pdf"'
        )
    );
    moi j'aurais voulu un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $pdf = $this->get('knp_snappy.pdf')->getOutputFromHtml($html);
    // puis créer un fichier à partir de ce $pdf ...
    Ensuite j'ai un deuxième problème, c'est que je n'arrive pas à insérer d'image dans mon pdf. Lorsque j'affiche ma page HTML pas de soucis l'image s'affiche bien, par contre lorsque je converti au format PDF, là l'image disparaît. J'ai essayé avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    background-image: url('../../../../../images/back/logo.png');
    <img src="{{asset ('images/front/logo_neo10.jpg')}}" style="width:300px; height: 100px;"/>
    voilà, j’espère avoir été assez clair, n'hésitez surtout pas à me demander des précisions, ou si vous voulez voir mon code ...

    Bonne journée à tous !

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Bonjour,

    S'il s'agit de sauvegarder le pdf sur ton serveur, as tu essayé ceci (cela devrait créer le fichier dans le répertoire web)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $pdf = $this->get('knp_snappy.pdf')->getOutputFromHtml($html);
    file_put_content($pdf,'mon_fichier.pdf');

    background-image: url('../../../../../images/back/logo.png');
    <img src="{{asset ('images/front/logo_neo10.jpg')}}" style="width:300px; height: 100px;"/>
    je pense qu'il faut éviter les chemins relatifs lorsque l'on utilise ce bundle, consulte la source html que tu generes pour voir si c'est le cas.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Points : 33
    Points
    33
    Par défaut
    Bonjour arnooo999,

    Tout d'abord merci pour ta réponse, ça m'a bien aidé surtout pour le :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    file_put_content($pdf,'mon_fichier.pdf');
    qui s'écrit comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    file_put_contents('mon_fichier.pdf',$pdf);
    Par contre pour le problème de l'image, je ne l'ai toujours pas réglé, j'ai tenté ça : (que j'ai trouvé sur un forum, mais ça ne fonctionne pas non plus)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img src="{{ app.request.uriForPath('/images/front/logo_neo10.jpg') }}"/>
    ça me donne ça comme path : ttp://localhost/Symfony/web/app_dev.php/images/front/logo_neo10.jpg

    le :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img src="{{asset ('images/front/logo_neo10.jpg')}}"/>
    me donne Symfony/web/images/front/logo_neo10.jpg

    Voilà, où j'en suis. J'attends ta réponse avec impatience !

    Sur ce, bonne journée de pacques à tous ceux qui seront passé par ici aujoud'hui !

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Points : 33
    Points
    33
    Par défaut
    Bonjour à tous,

    Je commence à avancer, j'ai réussi à afficher mon image en mettant le chemin en dur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img src="http://localhost/Symfony/web/images/front/logo_mini_neo10.png" />
    Seulement voilà, j'aimerais bien que ce chemin ne soit pas en dur! Si quelqu'un a sous le coude une petite fonction qui va bien, je suis preneur!

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2012
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Salut,

    Depuis hier je suis confronté a ce même problème.

    Pour le contourner, j'ai encodé les quelques images dont j'avais besoin en base64 dans mon template qui va être généré.

    ...Et banco gagnant !

    En espérant t'avoir aidé

  6. #6
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Il y a à lire sur le bug tracker de Symfony concernant une fonctionalité qui serait un raccourci de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {{ app.request.scheme ~ '://' ~ app.request.host }}{{ asset('images/front/logo_neo10.jpg) }}
    https://github.com/symfony/symfony/issues/3056
    https://github.com/symfony/symfony/pull/3416
    https://github.com/symfony/symfony/pull/4312
    (mais j'avoue que je ne sais pas trop au final si la fonction a été ajoutée et si oui sur quel version !!)


    Néammoins on pourrait aussi ajouter un paramètre accessible dans twig
    dans app/config/parameters.yml ( à redéfinir pour l'install de prod )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    parameters:
      base_url: http://localhost/Symfony/web/
    dans app/config/config.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    twig
      globals:
         base_url: %base_url% /**on rend notre paramètre "base_url" accessible dans toutes les templates twig (sans avoir à l'injecter depuis un controller)**/
    dans le template twig
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <img src="{{base_url}}images/front/logo_mini_neo10.png" />

  7. #7
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Points : 677
    Points
    677
    Par défaut
    Salut, à la suite du Symfony_live

    Voila ce que j'ai trouvé et qui réponds à ta demande
    http://symfony.com/doc/current/refer...sets-base-urls

    Ou du moins j'espère

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 45
    Points : 33
    Points
    33
    Par défaut
    Merci à vous, j'ai utilisé le paramètre twig et ça fonctionne très bien.

    Le sujet est donc résolu, j’espère qu'il pourra servir à d'autres personnes, en tout cas je vous suis très reconnaissant! Encore merci à la communauté de developpez qui est toujours aussi efficace!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. créer un pdf à partir d'un formulaire
    Par PrinceMaster77 dans le forum ASP
    Réponses: 4
    Dernier message: 04/05/2006, 22h38
  2. Pour créer des pdf : meilleur logiciel ?
    Par calogerogigante dans le forum Autres Logiciels
    Réponses: 11
    Dernier message: 22/04/2006, 17h54
  3. [FPDF] Créer un PDF et l'envoyer par email avec PHPMailer
    Par nico33307 dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 12/12/2005, 22h49
  4. Liens pour apprendre à créer des PDF
    Par pmboutteau dans le forum Autres langages
    Réponses: 6
    Dernier message: 20/09/2005, 18h16
  5. [VB6] Créer un .PDF avec VB ?
    Par Vince dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/07/2005, 14h27

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