web-dev-qa-db-fra.com

TCPDF ERROR: Certaines données ont déjà été sorties, impossible d'envoi PDF fichier

Je continue à recevoir cette erreur en essayant d'ajouter mon propre tableau dans le code . Voici mon tableau;

$array = array();

while (odbc_fetch_row($rs))
{
$array[] = odbc_result($rs,'Product Name');
} 
$test = print_r($array);

Le code original est ici. J'utilise une page d'exemple pour l'essayer car je sais que la page d'exemple fonctionne bien.

http://www.tcpdf.org/examples/example_001.phps

Ce code est avant la variable $ html et lorsqu'il est défini, je viens d'ajouter la variable $ test dans la variable $ html. La connexion odbc fonctionne bien et l'exemple fonctionne bien avant d'ajouter un code, mais lorsque j'exécute le script, l'erreur se produit.

Array ( [0] => Test1 [1] => Test2 ) TCPDF ERROR: Some data has already been output, can't send PDF file

Et il y a aussi plus de 2 éléments dans le tableau. Des idées?

16
Alex

Utilisez simplement ob_start (); en haut de la page.

29
vishal jaura

Ajoutez la fonction ob_end_clean (); avant d'appeler la fonction de sortie . Cela a fonctionné pour moi dans une fonction Wordpress personnalisée!

ob_end_clean();
$pdf->Output($pdf_name, 'I');
21
fmarrot

Ajoutez la fonction ob_end_clean () avant d'appeler la fonction Output.

9
user2928471

Ce problème signifie que vous avez des en-têtes. Supprime les tags 

?>

à la fin de votre code et assurez-vous de ne pas avoir d'espace au début.

5
xavit

Je veux juste ajouter que cette erreur me causait et que rien ne serait corrigé tant que je n'aurais pas changé le paramètre de destination Output de F à FI.

Output('doc.pdf', 'I')

à

Output('doc.pdf', 'FI')

Je ne sais pas pourquoi cela a fait la différence, mais cela a corrigé l'erreur pour moi ...

4
Black

Le fichier tcpdf à l'origine des "données déjà sorties" se trouve dans le dossier tcpdf appelé tcpdf.php. Vous pouvez le modifier:

ajoutez la ligne ob_end_clean (); comme ci-dessous (3ème dernière ligne):

public function Output($name='doc.pdf', $dest='I') {
    //LOTS OF CODE HERE....}
    switch($dest) {
        case 'I': {
        // Send PDF to the standard output
        if (ob_get_contents()) {
        $this->Error('Some data has already been output, can\'t send PDF file');}
        //some code here....}
            case 'D': {         // download PDF as file
        if (ob_get_contents()) {
    $this->Error('Some data has already been output, can\'t send PDF file');}
            break;}
        case 'F':
        case 'FI':
        case 'FD': {
            // save PDF to a local file
                 //LOTS OF CODE HERE.....       break;}
        case 'E': {
            // return PDF as base64 mime email attachment)
        case 'S': {
            // returns PDF as a string
            return $this->getBuffer();
        }
        default: {
            $this->Error('Incorrect output destination: '.$dest);
        }
    }
           ob_end_clean(); //add this line here 
    return '';
}

Regardons maintenant votre code.
Je vois que vous avez mélangé $ rs et $ sql. Ce sont 2 choses différentes qui travaillent ensemble. 

$conn=odbc_connect('northwind','****','*****');
if (!$conn) {
   exit("Connection Failed: " . $conn);
 }

$sql="SELECT * FROM products"; //is products your table name?
$rs=odbc_exec($conn,$sql);
if (!$rs) {
  exit("Error in SQL");
}

while (odbc_fetch_row($rs)) {
  $prodname=odbc_result($rs,"Product Name"); //but preferably never use spaces for table names.
 $prodid=odbc_result($rs,"ProdID");  //prodID is assumed attribute
  echo "$prodname";
  echo "$prodid";
}
odbc_close($conn);

now you can use the $prodname and output it to the TCPDF output.  

et je suppose que vous vous connectez à une base de données MS Access. 

3
Clark Superman

J'ai eu cette erreur bizarre Et le coupable est un espace blanc au début de la balise ouverte PHP

même sans les ob_flush et ob_end_clean

Assurez-vous simplement qu'il n'y a pas de white spaces supplémentaire sur ou après un bloc <?php ?>

1
tomexsans

utilisez ob_end_clean ();

$ pdf-> Output ($ fichier, 'I'); pour ouvrir pdf . Cela fonctionne pour moi

1
him

J'avais ceci, mais contrairement à l'OP, je ne pouvais voir aucune sortie avant le message d'erreur TCPDF.

Il s'est avéré qu'il y avait une nomenclature UTF8 au tout début de mon script, avant la balise <? Php, donc avant d'avoir eu la possibilité d'appeler ob_start (). Et il y avait aussi une nomenclature UTF8 avant le message d'erreur TCPDF.

1
Syboor

Pour ceux qui sont toujours confrontés à ce problème, essayez d'ajouter 

libxml_use_internal_errors (true);

avant l'appel loadHtml et ajouter 

libxml_use_internal_errors (false);

après l'appel. 

Cela a résolu le problème pour moi.

1
S.Simkhada

Ce problème survient lorsque Apache/php affiche des erreurs. 

Ces données (html) détruisent la sortie pdf. 

Vous devez désactiver les erreurs d'affichage dans php.ini

1
Maykel

pour mon cas, la méthode Footer avait un code HTML malformé (td manquant) provoquant une erreur sur osx.

public function Footer() {
$this->SetY(-40);
$html = <<<EOD
<table>
<tr>
 Test Data
</tr>
</table>
EOD;
$this->writeHTML($html);
}
1
ranjeetcao

Utilisez ob_start (); au début de votre code.

0
Dipanshu Chaubey

J'ai eu la même erreur mais finalement je l'ai résolue en supprimant les erreurs PHP Il suffit de mettre ce code error_reporting(0); en haut de votre page d'impression 

    <?php 
    error_reporting(0); //hide php errors
    if( ! defined('BASEPATH')) exit('No direct script access allowed');
    require_once dirname(__FILE__) . '/tohtml/tcpdf/tcpdf.php';
    .... //continue
0
JOB