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 :

Utilisation de Snappy PDF


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 135
    Points : 53
    Points
    53
    Par défaut Utilisation de Snappy PDF
    Bonjour,

    Je souhaiterais utiliser le bundle KnpSnappy mais je bloque sur l'utilisation.

    Pour l'installation j'ai procédé comme indiqué dans le tuto.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    # Install snappy library
    git clone https://github.com/KnpLabs/snappy.git vendor/snappy
     
    # Install bundle
    git clone https://github.com/KnpLabs/KnpSnappyBundle.git vendor/bundles/Knp/Bundle/SnappyBundle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $loader->registerNamespaces(array(
        ...
        'Knp'                        => __DIR__.'/../vendor/bundles',
        'Knp\\Snappy'                => __DIR__.'/../vendor/snappy/src',
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // app/AppKernel.php
    public function registerBundles()
    {
        $bundles = array(
            ...
            new Knp\Bundle\SnappyBundle\KnpSnappyBundle(),
            ...
    Ensuite dans un controller j'ai essayer le code ci-dessous mais j'obtiens le message d'erreur "Call to a member function get() on a non-object in"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $container->get('knp_snappy.pdf')->generate('http://www.google.fr', '/path/to/the/file.pdf');
    J'ai donc l'impression qu'il ne trouve pas mon bundle.

    Avez vous déjà utilisé KnpSnappy?

    Comment l'avez vous installé svp?

    Merci

  2. #2
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 135
    Points : 53
    Points
    53
    Par défaut
    J'avance doucement mais doucement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            $html = $this->renderView('MyApptdbdepBundle:Accueil:Index.html.twig', array('monUser' => $user));
     
              return new Response(
                $this->get('knp_snappy.pdf')->getOutputFromHtml($html),
                200,
                array(
                    'Content-Type'          => 'application/pdf',
                    'Content-Disposition'   => 'attachment; filename="file.pdf"'
                )
             );
    Avec ce code j'arrive à créer le pdf et propose de le télécharger.

    Et sous IE8, cela m'affiche dans la page le contenu cripté du pdf.

    Savez comment faire pour que cela s'affiche correctement sous firefox et IE8?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 60
    Points : 80
    Points
    80
    Par défaut
    Bonjour,

    Je pencherais plutôt pour un problème de configuration de Acrobat Reader. Dans Editios=>Préférences=>Internet (de mémoire...), tu dois avoir une case à cocher "Ouvrir dans le navigateur". Est-elle bien cochée ?

  4. #4
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 135
    Points : 53
    Points
    53
    Par défaut
    Merci frfrance31 pour ta suggestion.
    Je viens de vérifier les options et tout est ok.

    Bref je pense que je vais devoir passer la journée à chercher l'aiguille dans la meule de foin.

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 135
    Points : 53
    Points
    53
    Par défaut
    Bon je ne comprend plus rien.
    Je viens de tester (le premier test de la journée) et ca fonctionne.
    C'est vraiment étrange.

    Par contre savez vous comment supprimer le message qui se génère automatiquement?

    HTTP/1.0 200 OK Cache-Control: no-cache Content-Type: text/html; charset=UTF-8 Date: Thu, 30 May 2013 06:14:40 GMT


  6. #6
    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
    Bonjour,

    Il apparait ou ce message ?

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 135
    Points : 53
    Points
    53
    Par défaut
    Dans le pdf. En haut de la page.

    J'essaye de trouver une doc sur snappy mais tout ce que je trouve est vraiment léger.

  8. #8
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 135
    Points : 53
    Points
    53
    Par défaut
    Bon ca avance.



    Avec le code ci-dessous, j'arrive à faire prendre en compte les options comme le content-type, orientation... Mais lorsque je teste celui de dessus il n'en tien pas compte?



    Une idée svp?



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $html = $this->render('MyApptdbdepBundle:Accueil:Index.html.twig', array('monUser' => $user));
    $response = new Response();
    $response->setContent($this->get('knp_snappy.pdf')->getOutputFromHtml($html,array('orientation' => 'Landscape')));
    $response->headers->set('Content-Type', 'application/pdf');
    //$response->headers->set('Content-Type: application/pdf', 'application/force-download');
    $response->headers->set('Content-disposition', 'filename=1.pdf');
    return $response;

  9. #9
    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
    Je pense que ça vient de la façon dont tu rends ton html.

    Fait un et je pense que tu verras l'entête.

  10. #10
    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,

    consultes la signature des méthodes render (renvoit un objet Response) et renderView (renvoit une chaine de caractere)
    https://github.com/symfony/symfony/b...oller.php#LC82

  11. #11
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 135
    Points : 53
    Points
    53
    Par défaut
    @stephan.78

    En effet à mon avis c'était ma balise Meta qui générait ca.
    J'ai fait un test avec une page html vierge ne contenant qu'un tableau et ca marche.

    @arnooo999, ok merci.

    Par contre avez vous une idée du pourquoi ca fonctionne avec cette méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $html = $this->renderView('MyApptdbdepBundle::test.html.twig');
    $response = new Response();
    $response->setContent($this->get('knp_snappy.pdf')->getOutputFromHtml($html,array('orientation' => 'Landscape')));
    $response->headers->set('Content-Type', 'application/pdf');
    //$response->headers->set('Content-Type: application/pdf', 'application/force-download');
    $response->headers->set('Content-disposition', 'filename=1.pdf');
    return $response;
    Et non avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
           $html = $this->renderView('MyApptdbdepBundle::test.html.twig');
     
              return new Response(
                $this->get('knp_snappy.pdf')->getOutputFromHtml($html),
                200,
                array(
                    'Content-Type' => 'application/pdf',
                    'Content-Disposition' => 'attachment; filename="file1.pdf"',
                    'orientation' => 'Landscape'
                )
             );

  12. #12
    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
    'orientation' => 'Landscape'
    est une option disponible pour wkhtml2pdf et Snappy

    dans le deuxième code tu le passes en option de ton objet Response ( et non au service Snappy) qui le traite comme une instruction http header.
    http://api.symfony.com/2.0/Symfony/C...od___construct

  13. #13
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 135
    Points : 53
    Points
    53
    Par défaut
    @arnooo999

    Ok je comprend mieux.
    Merci pour ton aide.

  14. #14
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 135
    Points : 53
    Points
    53
    Par défaut
    Je souhaiterais maintenant utiliser mes fichiers css avec la méthode ci-dessous mais je ne comprend pas trop le principe.

    Le code du tuto
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Render a pdf document with a relative url inside like css files
     
    $pageUrl = $this->generateUrl('homepage', array(), true); // use absolute path!
     
    return new Response(
        $this->get('knp_snappy.pdf')->getOutput($pageUrl),
        200,
        array(
            'Content-Type'          => 'application/pdf',
            'Content-Disposition'   => 'attachment; filename="file.pdf"'
        )
    );

    Pour générer la page, il me faut indiquer le nom long de ma page.
    Mais qu'est ce qu'il entende par la?

    J'ai bien essayer de mettre MyApp\tdbdepBundle\Resources\views\Impression\Journalieredate.html.twig Mais ca Symfony me dit qu'il ne trouve pas le controler.

  15. #15
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 135
    Points : 53
    Points
    53
    Par défaut
    En exécutant le code ci-dessus j'obtiens le message d'erreur

    The exit status code '-1073741819' says something went wrong:
    stderr: "Loading pages (1/6)
    [> ] 0% [======> ] 10% Error: Authentication Required
    [============================================================] 100% Error: Failed loading page http://127.0.0.1/Symfony2/web/app_dev.php/tdbdep/ (sometimes it will work just to ignore this error with --load-error-handling ignore)
    "
    stdout: ""
    command: C:\wkhtmltopdf\wkhtmltopdf.exe --lowquality "http://127.0.0.1/Symfony2/web/app_dev.php/tdbdep/" "C:\WINNT\TEMP\knp_snappy51ac52a2c0a8e6.34632732.pdf".
    Ca me donne l'impression qu'il attend une authentification.
    A votre avis est ce mon Bundle Security qui bloque?

  16. #16
    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
    Le bundle Snappy permet juste une intégration de l'outil wkhtmltopdf avec php et Symfony.

    En fait c'est un programme installé sur ton serveur qui effectue une requete http vers l'url, donc ce client n'est pas le même que le client que celui de l'utilisateur connecté.
    Bref, pas de cookie, pas de session, pas d'authentification

    Pour mieux voir ce qui se passe, consultes les fichiers temporaires (tu dois y trouver des fichiers du genre knp_snappy{464563415614351}.html et knp_snappy{464563415614351}.pdf )

    cependant comme le dit le message
    sometimes it will work just to ignore this error with --load-error-handling ignore
    ce qui devrait se traduire ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->get('knp_snappy.pdf')->getOutput($pageUrl,array('ignore-load-errors'=>true)
    cf la doc des options: http://madalgo.au.dk/~jakobt/wkhtmlt...0.9.9-doc.html

    Il est vrai qu'avec les css, wkhtml2pdf est assez sourcilleux, notamment lorsqu'il ne trouve pas le chemin vers une image de background.

  17. #17
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Points : 10
    Points
    10
    Par défaut images
    Savez-vous si Knp Snappy est capable de passer des images incluses dans le html vers le Pdf?
    Merci.

  18. #18
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2017
    Messages : 2
    Points : 2
    Points
    2
    Par défaut HTTP/1.0 200 OK Cache-Control: no-cache
    Bonjour,

    Désolé de reprendre un post aussi ancien, mais j'ai aussi le problème de header HTTP qui s'affiche en entete du PDF

    Voir l'exemple ci dessous

    et jai aussi un 2ieme problème de chevauchement du header de la table <thead> sur la 2ieme page, ya moyen de gerer un peu les sauts de page ?

    Nom : knp-snappy-html-table-to-pdf-1.png
Affichages : 2390
Taille : 46,3 Ko

    Symfony 3.1, le html est un twig

    quelqu'un a une idée ? merci d'avance

  19. #19
    Candidat au Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mars 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Mars 2017
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    J'ai trouvé le problème pour le header HTTP, je faisais un appel a $this->render(...) au lieu de $this->renderView()

    Par contre j'ai toujours le problème pour le chevauchement du header avec les données sur la 2ieme page

    Une idée ?

    Merci

Discussions similaires

  1. Aligner 2 div en utilisant HTML to PDF
    Par alfred5 dans le forum Mise en page CSS
    Réponses: 13
    Dernier message: 14/01/2015, 22h25
  2. Utiliser ASP et PDF
    Par tumoo dans le forum ASP
    Réponses: 8
    Dernier message: 26/10/2011, 12h29
  3. [2.x] utilisation de KnpSnappyBundle --> pdf
    Par jherbaux dans le forum Symfony
    Réponses: 1
    Dernier message: 25/08/2011, 14h38
  4. Utilisation de conversion PDF dans un projet web
    Par amnass dans le forum Documents
    Réponses: 3
    Dernier message: 26/05/2009, 16h08
  5. [FPDF] Utiliser variables dans PDF
    Par beegees dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 29/03/2009, 14h26

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