pagina - tcpdf php mysql example
ERROR TCPDF: Algunos datos ya se han enviado, no se puede enviar el archivo PDF (14)
Agregue la función ob_end_clean () antes de llamar a la función de salida.
Sigo recibiendo este error cuando intento agregar mi propia matriz en el código. Aquí está mi matriz;
$array = array();
while (odbc_fetch_row($rs))
{
$array[] = odbc_result($rs,''Product Name'');
}
$test = print_r($array);
El código original está aquí. Estoy usando una página de ejemplo para probarlo porque sé que la página de ejemplo funciona bien.
http://www.tcpdf.org/examples/example_001.phps
Este código es anterior a la variable $ html y cuando se configura, simplemente agrego la variable $ test a la variable $ html. La conexión odbc funciona bien y el ejemplo funciona bien antes de agregar cualquier código, pero cuando ejecuto el script aparece este error;
Array ( [0] => Test1 [1] => Test2 ) TCPDF ERROR: Some data has already been output, can''t send PDF file
Y también hay más de 2 elementos en la matriz. ¿Algunas ideas?
Agregue la función ob_end_clean (); Antes de llamar a la función de salida. Funcionó para mí dentro de una función personalizada de Wordpress!
ob_end_clean();
$pdf->Output($pdf_name, ''I'');
El archivo tcpdf que causa que "los datos ya se hayan enviado" se encuentra en la carpeta tcpdf llamada tcpdf.php. Puedes modificarlo:
agregue la línea ob_end_clean (); como abajo (3ra última línea):
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 '''';
}
Ahora veamos su código.
Veo que tienes $ rs y $ sql mezclados. Estas son 2 cosas diferentes que trabajan juntas.
$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.
y asumo que se está conectando a una base de datos de acceso de MS.
Este problema es cuando apache/php
muestran errores.
Estos datos ( html
) destruyen la salida pdf.
Debe desactivar los errores de visualización en php.ini .
Este problema significa que tienes encabezados. Borra etiquetas
?>
al final de su código y asegúrese de no tener espacios en blanco al principio.
Para aquellos que aún se enfrentan a este problema, intente agregar
libxml_use_internal_errors (true);
antes de la carga loadHtml y agregar
libxml_use_internal_errors (false);
despues de la llamada
Esto lo resolvió para mí.
Solo quiero agregar que estaba recibiendo este error, y nada lo arreglaría hasta que cambiara el parámetro Destino de Output
de F
a FI
. En otras palabras, tengo que dar salida tanto al archivo como al archivo en línea.
Output(''doc.pdf'', ''I'')
a
Output(''doc.pdf'', ''FI'')
No tengo idea de por qué esto hizo la diferencia, pero solucionó el error para mí ...
Solo usa ob_start (); en la parte superior de la página.
Tenía esto, pero a diferencia del OP, no pude ver ningún resultado antes del mensaje de error TCPDF.
Resulta que había una lista de materiales UTF8 (byte-order-mark) al comienzo de mi script, antes de la etiqueta <? Php, así que antes de que tuviera la oportunidad de llamar a ob_start (). Y también hubo una lista de materiales UTF8 antes del mensaje de error TCPDF.
Tuve el mismo error, pero finalmente lo resolví suprimiendo los errores de PHP. Simplemente coloque este código error_reporting(0);
en la parte superior de su página de impresión
<?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
Tuve este error extraño y el culpable es un espacio en blanco al principio de la etiqueta abierta de PHP
incluso sin el ob_flush
y ob_end_clean
Solo asegúrese de que no haya white spaces
en white spaces
adicionales en o después de cualquier bloque <?php ?>
Utilice ob_start (); al comienzo de su código.
para mi caso, el método de pie de página tenía un código html con formato incorrecto (falta td) causando un error en osx.
public function Footer() {
$this->SetY(-40);
$html = <<<EOD
<table>
<tr>
Test Data
</tr>
</table>
EOD;
$this->writeHTML($html);
}
utilizar ob_end_clean ();
$ pdf-> Salida ($ archivo, ''I''); para abrir pdf. Esto funciona para mi