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

Bibliothèques et frameworks PHP Discussion :

[FPDF] afficher un pdf à la volée


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 107
    Par défaut [FPDF] afficher un pdf à la volée
    Salut,

    Voici un script qui crée un pdf avec la bibliothèque pdflib.
    Un fois le fichier créé sur le disque dur, j'affiche un lien vers le fichier pdf.

    Ce que je voudrais c'est que le fichier pdf ne soit pas ecrit sur le disque mais directement affiché dans le navigateur. Comment dois-je m'y prendre ?

    voici le code php de mon script actuel:

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    $pdf = pdf_new();
    pdf_open_file($pdf, "test.pdf");
     
     
    pdf_set_info($pdf, "Author", "reventlov");
    pdf_set_info($pdf, "Title", "pages de test");
    pdf_set_info($pdf, "Creator", "See Author");
    pdf_set_info($pdf, "Subject", "Testing");
     
    //image_01
    pdf_begin_page($pdf, 842, 595);
    pdf_add_outline($pdf, "Page 1");
    pdf_set_font($pdf, "Times-Roman", 12, "host");
    pdf_set_value($pdf, "textrendering", 1);
    $images_01=pdf_open_image_file($pdf,"jpeg","1.jpg","","");
    pdf_place_image ($pdf,$images_01,0,0,0.36);
    pdf_show_xy($pdf, "Times Roman", 120, 405);
    pdf_show_xy($pdf, "tagadatsointsoin12356", 150, 390);
    pdf_moveto($pdf, 50, 740);
    pdf_lineto($pdf, 330, 740);
    pdf_stroke($pdf);
    pdf_end_page($pdf);
     
    //image_02
    pdf_begin_page($pdf, 842, 595);
    pdf_add_outline($pdf, "Page 2");
    pdf_set_font($pdf, "Times-Roman", 30, "host");
    pdf_set_value($pdf, "textrendering", 1);
    $images_02=pdf_open_image_file($pdf,"jpeg","2.jpg","","");
    pdf_place_image ($pdf,$images_02,0,0,0.36);
    pdf_show_xy($pdf, "Times Roman", 50, 400);
    pdf_moveto($pdf, 50, 740);
    pdf_lineto($pdf, 330, 740);
    pdf_stroke($pdf);
    pdf_end_page($pdf);
     
    //image_03
    pdf_begin_page($pdf, 842, 595);
    pdf_add_outline($pdf, "Page 3");
    pdf_set_font($pdf, "Times-Roman", 30, "host");
    pdf_set_value($pdf, "textrendering", 1);
    $images_03=pdf_open_image_file($pdf,"jpeg","3.jpg","","");
    pdf_place_image ($pdf,$images_03,0,0,0.36);
    pdf_show_xy($pdf, "Times Roman outlined", 50, 750);
    pdf_moveto($pdf, 50, 740);
    pdf_lineto($pdf, 330, 740);
    pdf_stroke($pdf);
    pdf_end_page($pdf);
     
    //image_04
    pdf_begin_page($pdf, 842, 595);
    pdf_add_outline($pdf, "Page 4");
    pdf_set_font($pdf, "Times-Roman", 30, "host");
    pdf_set_value($pdf, "textrendering", 1);
    $images_04=pdf_open_image_file($pdf,"jpeg","4.jpg","","");
    pdf_place_image ($pdf,$images_04,0,0,0.36);
    pdf_show_xy($pdf, "Times Roman outlined", 50, 750);
    pdf_moveto($pdf, 50, 740);
    pdf_lineto($pdf, 330, 740);
    pdf_stroke($pdf);
    pdf_end_page($pdf);
     
    //image_05
    pdf_begin_page($pdf, 842, 595);
    pdf_add_outline($pdf, "Page 5");
    pdf_set_font($pdf, "Times-Roman", 30, "host");
    pdf_set_value($pdf, "textrendering", 1);
    $images_05=pdf_open_image_file($pdf,"jpeg","5.jpg","","");
    pdf_place_image ($pdf,$images_05,0,0,0.36);
    pdf_show_xy($pdf, "Times Roman outlined", 50, 750);
    pdf_moveto($pdf, 50, 740);
    pdf_lineto($pdf, 330, 740);
    pdf_stroke($pdf);
    pdf_end_page($pdf);
     
    //image_06
    pdf_begin_page($pdf, 842, 595);
    pdf_add_outline($pdf, "Page 6");
    pdf_set_font($pdf, "Times-Roman", 30, "host");
    pdf_set_value($pdf, "textrendering", 1);
    $images_06=pdf_open_image_file($pdf,"jpeg","6.jpg","","");
    pdf_place_image ($pdf,$images_06,0,0,0.36);
    pdf_show_xy($pdf, "Times Roman outlined", 50, 750);
    pdf_moveto($pdf, 50, 740);
    pdf_lineto($pdf, 330, 740);
    pdf_stroke($pdf);
    pdf_end_page($pdf);
     
    pdf_close($pdf);
    pdf_delete($pdf);
    echo "<A HREF=test.pdf>finished</A>";

  2. #2
    Membre émérite Avatar de Yobs
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    675
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 675
    Par défaut
    Pour le lien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<A HREF="test.pdf">finished</A>';
    et si tu as le plugin adobe reader, sa devrait normalement lancé ton plugin et afficher le pdf dans le navigateur. Sinon tu peux aussi définir les header avec la fonction header().

  3. #3
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    Il te faudra demander à pdflib de ne pas écrire le fichier mais plutôt de l'envoyer au navigateur. En parallèle, tu devras utiliser la fonction header() avec le content-type correspondant aux fichiers PDF.

    Exemple similaire avec Flash :
    http://www.thisisnotawebsite.com/forumrnz/ming/index.php

    Je n'écris pas le fichier SWF, je l'envoie directement au navigateur.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 107
    Par défaut
    Merci pour les reponse !

    J'ai trouvé un bout de code qui est sensé faire cela et je l'ai adapté à mon script. Seulement dans le meilleur des cas, le navigateur n'ouvre pas un pdf mais affiche le contenu brut du buffer. Voici mon nouveau code, ce sont les dernières lignes qui posent problème (j'ai reduit le script a une page pour faire plus court):

    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
    $pdf = pdf_new();
    pdf_open_file($pdf);
     
    pdf_set_info($pdf, "Author", "Uwe Steinmann");
    pdf_set_info($pdf, "Title", "Test for PHP wrapper of PDFLib 2.0");
    pdf_set_info($pdf, "Creator", "See Author");
    pdf_set_info($pdf, "Subject", "Testing");
     
    //image_01
    pdf_begin_page($pdf, 842, 595);
    pdf_add_outline($pdf, "Page 1");
    pdf_set_font($pdf, "Times-Roman", 12, "host");
    pdf_set_value($pdf, "textrendering", 1);
    $images_01=pdf_open_image_file($pdf,"jpeg","1.jpg","","");
    pdf_place_image ($pdf,$images_01,0,0,0.36);
    pdf_moveto($pdf, 50, 740);
    pdf_lineto($pdf, 330, 740);
    pdf_stroke($pdf);
    pdf_end_page($pdf);
     
    pdf_close($pdf);
     
    //la fameuse mise en buffer
    $buffer = PDF_get_buffer($pdf);
     
    header("Content-type: application/pdf");
    header("Content-Length: ".strlen($buffer));
    header("Content-Disposition: inline; filename=essai.pdf");
    echo $buffer ;
     
    pdf_delete($pdf);
    Je sent bien que je touche au but mais je patauge...

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    J'ai copié tel quel ton code dans un fichier sur mon ordi, j'ai mis un fichier .jpg dans le répertoire et j'ai testé : ça marche.
    Je suppose que tu n'as pas de plugin PDF qui va avec ton navigateur.
    Pense à la balise [code] stp.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 107
    Par défaut
    Bin là je pige pas... Mon fichier s'appelle index.php, il est seul dans son repertoire et je le lance avec le chemin direct dans la barre d'adresse du navigateur... J'ai fait comme toi un simple copier/coller du code... J'ai bien le plugin pdf puisque j'arrive à lire mon pdf dans le cas ou c'est un lien qui pointe sur un fichier réel... Le résultat le voici: des erreurs de header et le contenu brut du buffer... ???

    Warning: Cannot modify header information - headers already sent by (output started at /home.2/reventlo/www/testpdf/index.php:2) in /home.2/reventlo/www/testpdf/index.php on line 89

    Warning: Cannot modify header information - headers already sent by (output started at /home.2/reventlo/www/testpdf/index.php:2) in /home.2/reventlo/www/testpdf/index.php on line 90

    Warning: Cannot modify header information - headers already sent by (output started at /home.2/reventlo/www/testpdf/index.php:2) in /home.2/reventlo/www/testpdf/index.php on line 91
    %PDF-1.3 %äãÏÒ 5 0 obj <> stream xœs áÒw3P04RIã2T)âr á0Žqendstream endobj 6 0 obj 29 endobj 10 0 obj <>] /Length 11 0 R >> stream ÿØÿàJFIFÈÈÿáExifMM*bj(1r2†‡iœÈÈÈAdobe Photoshop 7.02006:03:09 10:45:00   " k(&ñHHÿØÿàJFIFHHÿí Adobe_CMÿîAdobed€ÿÛ„            ÿÀZ€"ÿÝÿÄ?   3!1AQa"q2‘¡±B#$RÁb34r‚ÑC%’Sðáñcs5¢²ƒ&D“TdE£t6ÒUâeò³„ÃÓuãóF'”¤…´•ÄÔäô¥µÅÕåõVfv†–¦¶ÆÖæö7GWgw‡—§·

    etc... etc...

  7. #7
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    À tout hasard : est-ce un vrai jpeg, pas un autre format camouflé ?

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 107
    Par défaut
    Je suis une grosse cougourde... Mon script entier fait dans les 500 lignes... En vérifiant si je ne m'était pas planté sur le type de fichier image dans mes fonctions pdflib, je suis remonté en haut de mes lignes de code... Il y avait un retour chariot juste avant la balise de code php... Donc forcément header envoyait un message d'erreur et ne remplissait pas son office...

    Désolé pour le dérangement et merci encore pour l'aide, même si la piste était tout autre, ça m'a fait regarder par hasard au bon endroit

    Je suis tout honteux...

  9. #9
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Je suis un boulet aujourd'hui : c'était indiqué en clair dans le message d'erreur, j'aurais dû le voir...
    output started at /home.2/reventlo/www/testpdf/index.php:2

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 107
    Par défaut
    Ouaiiii ! Je suis plus seul dans la bande !!!

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

Discussions similaires

  1. [FPDF] Afficher un fichier pdf existant
    Par zetta dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 16/07/2015, 13h57
  2. [FPDF] Afficher plusieurs tableaux dans un fichier PDF
    Par Pakman80 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 30/07/2007, 15h19
  3. [FPDF] Générer un pdf à la volée
    Par HwRZxLc4 dans le forum Bibliothèques et frameworks
    Réponses: 16
    Dernier message: 14/03/2007, 17h03
  4. [FPDF] générer du PDF à la volée
    Par jibouze dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 04/04/2006, 12h27
  5. Comment afficher une image à la volée via http ?
    Par reg11 dans le forum Web & réseau
    Réponses: 4
    Dernier message: 30/06/2005, 09h44

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