Bonjour,
Je sais, ce problème a été questionné et résolu moult reprises, mais j'ai essayé toutes les solutions et aucune ne fonctionne dans mon cas.
Je bosse sur un projet pour générer un livret d'instruction PDF et j'ai donc créé un programme en local. Jusque ici tout va bien. Au moment de le mettre en ligne et d'essayer de générer un nouveau PDF, il affiche l'erreur suivante:
FPDF error: Some data has already been output, can't send PDF file (output started at /chemin/vers/serveur/creation_livret.php:39)
En voyant cette erreur, j'ai essayé de me documenter en trouvant de l'aide sur Internet et suren allant dans des
, rajouter dans le code le fameux
, modifier les droits des fichiers, refaire le fichier complet en pensant qu'il y aurait des espaces ou caractères, séparer les deux fichiers puisque le fichier principal contient de l'HTML, enfin j'ai tout essayé mais rien n'a été résolu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ob_end_clear();
Voici le code du fichier principal (creation_livret.php):
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
92
93
94
95
96 <?php session_start(); try { $bdd = mysqli_connect('server', 'user', 'mdp', 'db'); mysqli_set_charset($bdd, "utf8"); } catch(Exception $e) { die('Erreur : '. mysqli_connect_error()); } if(empty($_SESSION['user'])) { echo '<script>document.location.href = "connexion_pibobook.php"</script>'; } ?> <!DOCTYPE html> <html> <head> <title>Création des livrets d'instructions</title> <link rel="stylesheet" type="text/css" href="accueil_interface.css" /> </head> <body> <div id="contenu"> <form method="post" action="" enctype="multipart/form-data" name="f1"> <fieldset> <h3>Livret d'instructions - Formulaire</h3> <p><select name="produits" onchange="document.f1.submit();"> <option>Choisir un produit</option> <?php $req_liste = 'SELECT * FROM produits'; $reponse_liste = mysqli_query($bdd,$req_liste); while($datas_liste = mysqli_fetch_assoc($reponse_liste)) { ?> <option value='<?php echo $datas_liste['id']; ?>' <?php if(isset($_POST['produits']) AND $_POST['produits'] == $datas_liste['id']){ echo "selected"; } ?>><?php echo $datas_liste['type_produit']; ?></option> <?php } mysqli_free_result($reponse_liste); ?> </select></p> <p><label>Nom du document final : </label><input type="text" name="nom_doc_final" value="<?php if(isset($_POST['nom_doc_final'])){ echo $_POST['nom_doc_final']; }?>"/></p> <?php if(isset($_POST['produits'])) { $id_outil = $_POST['produits']; ?> <p><select name="documents[]" multiple="multiple" size="10"> <?php $req_liste2 = 'SELECT * FROM num_produits_docs INNER JOIN documents ON documents.id = num_produits_docs.num_id_docs WHERE num_id_produits = '.$id_outil.' ORDER BY id_cat ASC'; $reponse_req_liste2 = mysqli_query($bdd,$req_liste2); while($datas_liste2 = mysqli_fetch_assoc($reponse_req_liste2)) { echo '<option value='.$datas_liste2['id'].' selected="selected">'.$datas_liste2['nom_doc'].'</option>'; } mysqli_free_result($reponse_req_liste2); ?> </select></p> <?php $req_produits = 'SELECT * FROM produits WHERE id='.$id_outil.''; $reponse_produits = mysqli_query($bdd,$req_produits); while($datas_produits = mysqli_fetch_assoc($reponse_produits)) { $type_produit = utf8_decode($datas_produits['type_produit']); $nom_type = utf8_decode($datas_produits['nom_type']); $n_serie_produit = utf8_decode($datas_produits['n_serie_produit']); } } if(isset($_POST['create'])) { include('genere_livret_pdf.php'); } mysqli_close($bdd); function Footer() { //Position at 1.5 cm from bottom $this->SetY(-15); //Arial italic 8 $this->SetFont('Arial','I',8); //Page number $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C'); } ?> <p><input type="submit" name="create" value="Créer" /></p> </fieldset> </form> <?php include('RetourAccueil.php'); ?> </div> </body> </html>
Le code du fichier pour générer un nouveau PDF :
Je n'ai aucune suggestion.
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127 <?php $nbPremPages = array(); $nom_doc_final = $_POST['nom_doc_final']; $id_documents = $_POST['documents']; $chemin2 = "livrets/".$nom_doc_final.".pdf"; $nom_doc_final2 = $nom_doc_final.".pdf"; $req_pre_insertion_livret = mysqli_prepare($bdd,'INSERT INTO livrets(nom_livret,chemin) VALUES(?,?)'); //pr걡rer la requ뵥 pour ins곥r le nouveau livret mysqli_stmt_bind_param($req_pre_insertion_livret,"ss",$nom_doc_final2,$chemin2); //param굲er la requ뵥 avec les variables if(mysqli_stmt_execute($req_pre_insertion_livret)) //exꤵter la requ뵥 { $id_livret = mysqli_insert_id($bdd); //rꤵp곥r le dernier id inser鍊 } } //inclure ces fichiers pour la crꢴion des PDF require_once('fpdf.php'); require_once('fpdi.php'); require_once('fpdf_tpl.php'); require_once('tables_matieres_class.php'); require_once('footer_livret_final.php'); $pdf = new PDF(); $iChapitres = 1; foreach($id_documents as $valeur) { $req_document = 'SELECT * FROM documents WHERE id='.$valeur.''; if($reponse_document = mysqli_query($bdd,$req_document)) { while($datas_document = mysqli_fetch_assoc($reponse_document)) { $nom_doc = $datas_document['nom_doc']; //rꤵp곥r le nom du document $chemin = $datas_document['chemin']; //rꤵp곥r le chemin du document $id_doc = $datas_document['id']; //rꤵp鳥 l'dentificateur unique du document $titre = $datas_document['titre']; //rꤵp곥r le titre } } else { echo "Erreur : ".mysqli_error($bdd); } $NbPage = $pdf->setSourceFile($chemin); for($i = 1; $i <= $NbPage; $i++) { if($i == 1) { $titre_final = $iChapitres.".".utf8_decode($titre); //concatꯥr num곯 chapitres et titre $pdf -> AddPage(); //rajouter une page $nbPremPages[$pdf->PageNo()] = $titre_final; $pdf->SetFont('Arial','','48'); //param굲er le titre $pdf->Cell(100,30,$titre_final); //ꤲire le titre final $tplIdx = $pdf->importPage($i); //importer la page $pdf->useTemplate($tplIdx, 0,0,0,0,true); //utiliser le mod魥 } else { $tplIdx = $pdf->importPage($i); $pdf->AddPage(); $pdf->useTemplate($tplIdx,0,0,0,0,true); } } $req_pre_insertion_num_docs_livrets = mysqli_prepare($bdd,'INSERT INTO num_livrets_docs(num_id_docs,num_id_livrets) VALUES(?,?)'); //pr걡rer la requ뵥 pour ins곥r le nouveau livret mysqli_stmt_bind_param($req_pre_insertion_num_docs_livrets,"ii",$id_doc,$id_livret); //param굲er la requ뵥 if(!mysqli_stmt_execute($req_pre_insertion_num_docs_livrets)) //exꤵter la requ뵥 { echo "Erreur : ".mysqli_error($bdd); } $iChapitres++; } $pdf->Output('./livrets/'.$nom_doc_final2.''); $pdf2 = new FPDI(); $pdf2->AddPage(); $pdf2->SetFont('Arial','B',20); $pdf2->MultiCell(100,10,$type_produit); $pdf2->SetFont('Arial','B',16); $pdf2->MultiCell(100,10,$nom_type); $pdf2->SetFont('Arial','B',16); $pdf2->MultiCell(100,10,$n_serie_produit); $pdf2->AddPage(); $pdf2->SetFont('Arial','B',20); $pdf2->MultiCell(100,30,utf8_decode('Tables des matières')); foreach($nbPremPages as $key => $value) { $ligne = $value.str_repeat('...',30).$key; $pdf2->SetFont('Arial','B',16); $pdf2->MultiCell(200,10,$ligne); } $req_livret = 'SELECT * FROM livrets WHERE id='.$id_livret.''; $reponse_livret = mysqli_query($bdd,$req_livret); while($datas_livrets = mysqli_fetch_assoc($reponse_livret)) { $chemin_livret = $datas_livrets['chemin']; } mysqli_free_result($reponse_livret); $NbPageLivret = $pdf2->setSourceFile($chemin_livret); for($i2 = 1; $i2 <= $NbPageLivret; $i2++) { if($i2 == 1) { $pdf2 -> AddPage(); //rajouter une page $tplIdx2 = $pdf2->importPage($i2); //importer la page $pdf2->useTemplate($tplIdx2, 0,0,0,0,true); //utiliser le mod魥 } else { $tplIdx2 = $pdf2->importPage($i2); $pdf2->AddPage(); $pdf2->useTemplate($tplIdx2,0,0,0,0,true); } } $pdf2->Output(); ?>
Pouvez-vous, s'il vous plaît, m'éclaircir sur l'erreur ?
Merci de vos réponses et de votre attention sur ce message.
Partager