Comment ne pas générer: TCPDF ERROR: Some data has already open [Résolu/Fermé]

Signaler
Messages postés
51
Date d'inscription
mercredi 16 juillet 2014
Statut
Membre
Dernière intervention
29 août 2014
-
Xavierdu34
Messages postés
220
Date d'inscription
lundi 2 décembre 2013
Statut
Membre
Dernière intervention
10 octobre 2016
-
Bonjour,
comme hier(pour ceux qui s'en souvienne) j'essaye toujours de créer un PDF.

J'aimerais faire des "includes" de ".php" que j'ai déjà crée afin de récupérer des données traitée de ma base de données et faire des affichages sur mon PDF: voici un bout de mon code:

<?php
include('open.php');
include('fonctions.php');
$date1 = $_POST['date'];
$date = dateT($date1);
// pas de ligne vide avant la balise php
// on désactive l'affichage des erreurs
//$data = serialize(file_get_contents('datas.txt'));
ini_set('display_errors', TRUE);
ob_start();
?>
<style type="text/css">
table{ width:100% }
table{ border-collapse: collapse; color:#000000 }
strong{ color:#21177D }
tr.colonne{ color:#1E7FCB; width:100% }
table.border td{ border:1px solid #CFD1D2; }
table.border th{ border:1px solid #CFD1D2; background:#717375 }
</style>
<page backtop = "10mm" backleft="10mm" backright="10mm" backbottom="10mm">
<hr />
<table>
<tr>
<strong><td style="width:50%; ">Etat de contrôle de synthèse</td></strong>
<td style="width:50%; ">Date de pointage:<?php echo $data ?></td>
</tr>
</table>
<hr />

<table class="border">
<thead>
<tr>
<th style="width:10%; ">Matricule</th>
<th style="width:10%; ">Nom</th>
<th style="width:10%; ">Prénom</th>
<th style="width:10%; ">HP</th>
<th style="width:10%; ">HNuit</th>
<th style="width:10%; ">HDJF</th>
<th style="width:10%; ">HSOC</th>
<th style="width:10%; ">Primes</th>
<th style="width:10%; ">Paniers</th>
<th style="width:10%; ">TOTAL HV</th>
</tr>
</thead>
<tbody>
<tr>
<td>blaba </td>
<td> blaba</td>
<td>blaba </td>
<td> blaba</td>
<td> blaba</td>
<td> blaba</td>
<td>blaba </td>
<td>blaba </td>
<td>blaba </td>
<td>blaba</td>
</tr>
</tbody>
</table>
</page>
<?php
$content = ob_get_clean();
require('html2pdf/html2pdf.class.php');
try
{
$pdf = new HTML2PDF('L','A4','fr');
$pdf->pdf->SetDisplayMode('fullpage');
$pdf->WriteHTML($content); // in $content you put your content to have in pdf
$pdf->Output('exemple.pdf');
}
catch(HTML2PDF_exception $e)
{
die ($e);
}



Les fonctions marchent très bien ailleurs mais quand je veux générer le PDF ça me fait l'erreur :
TCPDF ERROR: Some data has already been output, can't send PDF file

NB: c'est quand je rajoute les includes et les deux lignes qui suivent ainsi que le <?php echo $date> que j'ai cette erreur sinon le reste fonctionnen bien.


Est-ce-que quelqu'un peut m'aider SVP SVP??


3 réponses

Bonjour à tous,

Souci également, j'étais en mode UTF8, passage en ASCII ..
Le souci a été réglé.
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 83317 internautes nous ont dit merci ce mois-ci

Xavierdu34
Messages postés
220
Date d'inscription
lundi 2 décembre 2013
Statut
Membre
Dernière intervention
10 octobre 2016
21
Aie !
Je te conseille de revenir en UTF-8, c'est une habitude à prendre, mais il faut tout encoder en UTF-8 (international), si tu avais un caractère en début de page quand tu était en UTF-8, c'est en réalité que tu était en encodage UTF-8 avec BOM, il te faut encoder tes pages en UTF-8 sans BOM mais pas revenir à l'ASCII qui rique de te poser bcp de problème ailleurs.

Cdlt.
Messages postés
3553
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
23 janvier 2020
925
Bonjour,

À mon avis, le problème est que dans tes includes tu envoie des données en sortie (via des echo, ou du texte en dehors des balises <?php ?>).

En effet, il me semble que la fonction ->Output va changer les en-têtes http pour dire que le contenu sera du PDF.

Bref, pour corriger le problème, si c'est bien celui-là, c'est extrêmement simple : déplace la ligne
ob_start()
pour la placer avant les include.

Xavier
F2C
Messages postés
51
Date d'inscription
mercredi 16 juillet 2014
Statut
Membre
Dernière intervention
29 août 2014

Merci;
je ferais ça ce soir; je suis déjà fatiguée.
je te fais signe pour te dire ce que ça donne
Reivax962
Messages postés
3553
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
23 janvier 2020
925
S'il y a rien de confidentiel, tu peux quand même me copier-coller le résultat du message #10 (echo $content;), là : http://www.commentcamarche.net/forum/affich-30627316-comment-ne-pas-generer-tcpdf-error-some-data-has-already-open#10
F2C
Messages postés
51
Date d'inscription
mercredi 16 juillet 2014
Statut
Membre
Dernière intervention
29 août 2014

--------------------------------------------------------------------------------
Etat de contrôle de synthèse Date de pointage: 23/06/2013

--------------------------------------------------------------------------------
Matricule Nom Prénom HP HNuit HDJF HSOC Primes Paniers TOTAL HV

TCPDF ERROR: Some data has already been output, can't send PDF file
F2C
Messages postés
51
Date d'inscription
mercredi 16 juillet 2014
Statut
Membre
Dernière intervention
29 août 2014

Bonjour Xavier,
désolée de ne repondre que maintenant;
je n'ai toujours pas trouvé la solution à mon problème. :(
Reivax962
Messages postés
3553
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
23 janvier 2020
925
Bon, on va faire un dernier petit test.
Repasse en mode HTML :
- Fais
echo $content;
juste avant ton
require(...);

- Commente la ligne
$pdf->Output('exemple.pdf'); 


Ouvre ta page dans ton navigateur.
Affiche le code source de ta page, depuis le navigateur.
Copie tout le code source.

Donne le ici.

Crée une nouvelle page, qui contient :
<?php
    require('html2pdf/html2pdf.class.php');
    $content = '#COLLE-ICI LE CODE SOURCE COPIÉ JUSTE AVANT#';
    try
    {
        $pdf = new HTML2PDF('L','A4','fr');
        $pdf->pdf->SetDisplayMode('fullpage');
        $pdf->WriteHTML($content);
        $pdf->Output('exemple.pdf');
    }
    catch(HTML2PDF_exception $e)
    {
        die ($e);
    }

Appelle cette nouvelle page, et dis-moi ce qui se passe...
Messages postés
220
Date d'inscription
lundi 2 décembre 2013
Statut
Membre
Dernière intervention
10 octobre 2016
21
je crois que c'est assez parlant :

--------------------------------------------------------------------------------
Etat de contrôle de synthèse Date de pointage: 23/06/2013

--------------------------------------------------------------------------------
Matricule Nom Prénom HP HNuit HDJF HSOC Primes Paniers TOTAL HV

TCPDF ERROR: Some data has already been output, can't send PDF file

Il y a une sortie bien avant que la fonction pdf ne soit appelée et comme elle doit modifier les headers ben ça passe pas.

Il ne suffit pas d'include un php standalone pour qu'il s'intègre, il y a des règles à respecter comme dans ton cas je pense, celle qui dis que tu ne peux rien sortir avant d'envoyer les headers (echo, print, var_dump, html ...) . rien ne doit s'afficher sur la page, et on voit clairement qu'il y a au moins 5 lignes qui s'affiche avant ton erreur. Donc cherche par la le soucis, tu ne doit rien afficher avant ton ob_start() et je me demande si tu n'as pas une autre fonction qui modifie les headers dans tes fichiers includes. Je ne pense pas qu'ob_start() retourne une erreur de ce type.
F2C
Messages postés
51
Date d'inscription
mercredi 16 juillet 2014
Statut
Membre
Dernière intervention
29 août 2014

Bonsoir Xavier,

j'ai été tellement occupée par les autres parties de mon projet que le pdf a été le dernier de mes soucis; mais maintenant que j'ai fini les autres parties je suis bien obligée de régler le problème du pdf ;

je ne comprends pas ce que tu veux que je fasses.
F2C
Messages postés
51
Date d'inscription
mercredi 16 juillet 2014
Statut
Membre
Dernière intervention
29 août 2014

Bonjour, j'ai trouvé la solution à mon énorme problème :)

En fait comme tu l'as dit Xavier c'était les "include" qui posaient problème du coup je les ai supprimés et tout ce donc j'avais besoins dans ces "include" je les ai copié-collé directement dans ma page web qui génère le PDF et ça fonctionne bien.

Merci pour ton aide Xavier