Insérer données PHP dans un PDF

Insérer données PHP dans un PDF - PHP - Programmation

Marsh Posté le 10-02-2009 à 16:48:16    

Bonjour à tous,
 
Je souhaite mettre à jour le contenu d'un fichier pdf avec des données récupérées dans un formulaire html.
 
Comment puis-je faire ?
 
Je dois utiliser php pour la récupération de données et donc mon but serait d'injecter ensuite ces données dans un fichier pdf gabari.
 
Peut-on mettre des variables dans le pdf pour les alimenter ensuite grâce à php.
 
merci pour vos réponses.

Reply

Marsh Posté le 10-02-2009 à 16:48:16   

Reply

Marsh Posté le 10-02-2009 à 17:11:58    

bonjour, tu peux générer un pdf à la volée avec la lib fpdf.

Reply

Marsh Posté le 10-02-2009 à 17:16:45    

J'ai vu l'existance de cette librairie mais il est impossible de créer un pdf comme je l'ai expliqué pour ensuite lui injecter des données aux endroits voulus?

Reply

Marsh Posté le 10-02-2009 à 17:18:15    

apparemment non, tu dois reconstruire ton pdf à chaque fois...

Reply

Marsh Posté le 10-02-2009 à 17:23:01    

ok
 
Et la j'ai commencé à tester la librairie fpdf mais un message d'erreur survient :
 
FPDF error: Some data has already been output, can't send PDF file
 
Ca te dit quelque chose ?
 
J'ai regardé sur plusieurs site et toutes les propositions indiqué ne fonctionnent pas.
 
Voici mon code :
 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>PDF - PHP</title>
</head>
<body>
<?php
require('fpdf.php');
$pdf=new FPDF();
$pdf->Open();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World !');
$pdf->Output();
?>
</body>
</html>


 
Tu vois le problème ?

Reply

Marsh Posté le 10-02-2009 à 17:25:32    

oui, il pète aux yeux.
Ca n'a aucun sens d'envoyer des données au format PDF au beau milieu d'un fichier texte contenant du code HTML.

Reply

Marsh Posté le 10-02-2009 à 17:28:45    

ha ok.
 
Donc il faut que j'enlève le code html ?
 
Alors j'ai enlevé le code html mais maintenant il ne m'affiche pas le pdf mais un texte incompréhensible !
 
merci pour ton aide qui m'est précieuse!
 
Voici ce qu'il m'affiche :
 
%PDF-1.3 3 0 obj <> endobj 4 0 obj <> stream xœ3Rðâ2Ð35W(çr QÐw3T04Ó30PISp  êZ*˜[š€…¤(hx¤æää+„çå¤((j*„d&ãw endstream endobj 1 0 obj <> endobj 5 0 obj <> endobj 2 0 obj << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI] /Font << /F1 5 0 R >> /XObject << >> >> endobj 6 0 obj << /Producer (FPDF 1.53) /CreationDate (D:20090210172655) >> endobj 7 0 obj << /Type /Catalog /Pages 1 0 R /OpenAction [3 0 R /FitH null] /PageLayout /OneColumn >> endobj xref 0 8 0000000000 65535 f 0000000229 00000 n 0000000417 00000 n 0000000009 00000 n 0000000087 00000 n 0000000316 00000 n 0000000521 00000 n 0000000597 00000 n trailer << /Size 8 /Root 7 0 R /Info 6 0 R >> startxref 700 %%EOF  
 
Ca te parle ?

Reply

Marsh Posté le 10-02-2009 à 17:34:26    

C'est le problème classique du header.
 
Cette question fait d'ailleurs l'objet du 9eme point du FAQ squi se trouve sur le site de fpdf, http://www.fpdf.org/

Citation :

Il ne faut rien envoyer d'autre au navigateur que le PDF lui-même : pas d'HTML, pas d'espace, pas de retour-chariot. Un cas fréquent est d'avoir des lignes vides à la fin d'un fichier inclus.

Donc, il faut enelever doctype, html, head, etc.
Le principe est qu'une page qui contient un document PDF ne contient que du PDF (généré par le fpdf et PHP) et un header special (généré par fpdf), mais pas de HTML ordinaire. On ne peut pas faire un panachage avec une partie HTML ordinaire et une partie PDF, sauf si on utilise l'astuce d'avoir des frames comme sur le site de la Bibliothèque Nationale.

Reply

Marsh Posté le 10-02-2009 à 17:34:56    

là encore, réfléchis... Il faut que tu indiques au navigateur (client) que tu lui envoies du PDF et pas du texte simple. Pour çà tu lui renseignes le type mime à l'aide de la fonction header (appelle là en haut du script)

Code :
  1. header('Content-Type: application/pdf'); //le mime type qui correspond au pdf est
  2. // application/pdf

Reply

Marsh Posté le 10-02-2009 à 17:36:55    

J'ai été grillé, trop lent à répondre. Je vais esayer d'aller plus vite pour répondre à la question "Ca te parle ?". La réponse est "oui, c'est un fichier PDF". Pour plus d'infos, voir le tutoriel sur le site http://www.fpdf.org/.
 
Edit : Encore grillé, C'est pas grave.
Ce n'est pas obligatoirement un problème de header. Lire le point 2 du FAQ sur le site qui dit qu'il faut fermer IE et le réouvir.


Message édité par olivthill le 10-02-2009 à 17:41:45
Reply

Marsh Posté le 10-02-2009 à 17:36:55   

Reply

Marsh Posté le 10-02-2009 à 17:41:02    

Désolé pour mon ignorance mais ça ne fonctionne pas.
 
Le header je l'ai mis dans les balises php après l'appel du fichier "fpdf.php" et rien ne change, il me sort toujours les lignes que j'ai mentionnées plus haut!
 
Sur les tutoriel du site, ils indiquent le même code que j'ai présenté et cela ne fonctionne pas... je suis désemparé!

Reply

Marsh Posté le 10-02-2009 à 17:43:39    

fais voir ton code s'il te plait.

Reply

Marsh Posté le 10-02-2009 à 17:45:06    

Le voici :  
 

Code :
  1. <?php
  2. header('Content-Type: application/pdf'); //le mime type qui correspond au pdf est// application/pdf
  3. require('fpdf.php');
  4. $pdf=new FPDF();
  5. $pdf->Open();
  6. $pdf->AddPage();
  7. $pdf->SetFont('Arial','B',16);
  8. $pdf->Cell(40,10,'Hello World !');
  9. $pdf->Output();
  10. ?>


 
Merci beaucoup pour votre patience et pour vos explications qui m'éclaircisse

Reply

Marsh Posté le 10-02-2009 à 17:50:15    

Essaye çà (juste pour tester) :
 

Code :
  1. <?php
  2. header('Content-Type: application/pdf'); //le mime type qui correspond au pdf est// application/pdf
  3. require('fpdf.php');
  4. $pdf=new FPDF();
  5. $pdf->Open();
  6. $pdf->AddPage();
  7. $pdf->SetFont('Arial','B',16);
  8. $pdf->Cell(40,10,'Hello World !');
  9. $pdf->Output('tmp.pdf');
  10. readfile('tmp.pdf');
  11. ?>


Que se passe-t-il ?

Reply

Marsh Posté le 10-02-2009 à 17:52:58    

Ca ne change rien, j'ai toujours les lignes incompréhensibles qui s'affiche sur mon navigateur!

Reply

Marsh Posté le 10-02-2009 à 17:57:35    

C'est bon!
 
j'ai ouvert une autre fenetre et est renseigne le chemin vers le fichier qui génère le pdf et ca me l'a affiché!
 
C'est parce que je rafraichissais la page alors qu'il faut en fait la fermer et en réouvrir une autre!
Enfin.
 
mais du coup est-il possible d'ouvrir le fichier pdf dans une nouvelle fenetre ?
 
Merci pour votre aide.

Reply

Marsh Posté le 10-02-2009 à 22:08:53    

j'arrive après la bataille mais il est possible en php de modifier un pdf existant avec FPDI qui est une extention de FPDF


---------------
Du tofu en Alsace : www.tofuhong.com
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed