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?
Utilisez simplement ob_start (); en haut de la page.
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');
Ajoutez la fonction ob_end_clean () avant d'appeler la fonction Output.
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.
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 ...
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.
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 ?>
utilisez ob_end_clean ();
$ pdf-> Output ($ fichier, 'I'); pour ouvrir pdf . Cela fonctionne pour moi
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.
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.
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 .
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);
}
Utilisez ob_start (); au début de votre code.
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