Ошибка TCPDF: Some data already been output, can't send PDF file


я пытаюсь создать отчет PDF, используя TCPDF, но при запуске моего кода пропускает следующую ошибку:

TCPDF ошибка: Some data already been output, can't send PDF file

пожалуйста, можете ли вы дать мне руку, чтобы определить ошибку, сгенерировать PDF и распечатать его?. С тех пор я был очень благодарен.

код, который я использую, выглядит следующим образом:

Index1.php

<?php  
 function busca_datos()  
 {  
      $output = '';  
      $connect = mysqli_connect("localhost", "usuario", "password", "personal");  
      $sql = "SELECT id_cliente, cedula, nombres, tel, dir FROM clientes ORDER BY id_cliente ASC";  
      $result = mysqli_query($connect, $sql);  
      while($row = mysqli_fetch_array($result))  
      {       
      $output .= '<tr>  
                          <td>'.$row["id_cliente"].'</td>  
                          <td>'.$row["cedula"].'</td>  
                          <td>'.$row["nombres"].'</td>  
                          <td>'.$row["tel"].'</td>  
                          <td>'.$row["dir"].'</td>  
                     </tr>  
                          ';  
      }  
      return $output;  
 }  
 if(isset($_POST["create_pdf"]))  
 {  
      require_once('tcpdf/tcpdf.php');  
      $obj_pdf = new TCPDF('P', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);  
      $obj_pdf->SetCreator(PDF_CREATOR);  
      $obj_pdf->SetTitle("Export HTML Table data to PDF using TCPDF in PHP");  
      $obj_pdf->SetHeaderData('', '', PDF_HEADER_TITLE, PDF_HEADER_STRING);  
      $obj_pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));  
      $obj_pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));  
      $obj_pdf->SetDefaultMonospacedFont('helvetica');  
      $obj_pdf->SetFooterMargin(PDF_MARGIN_FOOTER);  
      $obj_pdf->SetMargins(PDF_MARGIN_LEFT, '5', PDF_MARGIN_RIGHT);  
      $obj_pdf->setPrintHeader(false);  
      $obj_pdf->setPrintFooter(false);  
      $obj_pdf->SetAutoPageBreak(TRUE, 10);  
      $obj_pdf->SetFont('helvetica', '', 12);  
      $obj_pdf->AddPage();  
      $content = '';  
      $content .= '  
      <h3 align="center">Export HTML Table data to PDF using TCPDF in PHP</h3><br /><br />  
      <table border="1" cellspacing="0" cellpadding="5">  
           <tr>  
                <th width="5%">ID</th>  
                <th width="30%">Name</th>  
                <th width="10%">Gender</th>  
                <th width="45%">Designation</th>  
                <th width="10%">Age</th>  
           </tr>  
      ';  
      $content .= busca_datos();  
      $content .= '</table>';  
      $obj_pdf->writeHTML($content);  
      $obj_pdf->Output('reporte.pdf', 'I');  
 }  
 ?>  
 <!DOCTYPE html>  
 <html>  
      <head>  
           <title>Exportando a PDF desde PHP</title>  
           <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">            
      </head>  
      <body>  
           <br /><br />  
           <div class="container" style="width:700px;">  
                <h3 align="center">Exportando a PDF desde PHP usando TCPDF en PHP</h3><br />  
                <div class="table-responsive">  
                     <table class="table table-bordered">  
                          <tr>  
                               <th width="5%">ID</th>  
                               <th width="30%">Name</th>  
                               <th width="10%">Gender</th>  
                               <th width="45%">Designation</th>  
                               <th width="10%">Age</th>  
                          </tr>  
                     <?php  
                     echo busca_datos();  
                     ?>  
                     </table>  
                     <br />  
                     <form method="post">  
                          <input type="submit" name="create_pdf" class="btn btn-danger" value="Crear PDF" />  
                     </form>  
                </div>  
           </div>  
      </body>  
 </html>  
 3
Author: OscarGarcia, 2016-11-30

2 answers

Скорее всего, ваша проблема связана с тем, что перед созданием PDF появляется какое-то предупреждающее сообщение, или перед начальным <?php и т. д.

может быть пробел

Вы можете отключить ошибки с помощью error_reporting(0) и ini_set('display_errors', 0), но я думаю, что вам лучше отправить предупреждающие сообщения в журнал сервера (вместо того, чтобы выводить его на экран), чтобы впоследствии отладить проблему. Мы также будем блокировать вывод данных клиенту до завершения сценарий:

if (isset($_POST["create_pdf"])) {
  ob_start();
  error_reporting(E_ALL & ~E_NOTICE);
  ini_set('display_errors', 0);
  ini_set('log_errors', 1);
  /* ...
   Resto del código que genera el PDF
     ... */
  /* Limpiamos la salida del búfer y lo desactivamos */
  ob_end_clean();
  /* Finalmente generamos el PDF */
  $obj_pdf->Output('reporte.pdf', 'I');
}

Проверьте, работает ли это для вас, но не забудьте проверить журнал вашего сервера, чтобы узнать, в чем была корневая проблема, с которой вы столкнулись (возможно, неназначенная переменная или макрос).

 5
Author: OscarGarcia, 2016-11-30 12:58:19

Напишите это перед созданием pdf, чтобы очистить любой предыдущий текст

ob_end_clean();
$pdf->Output($pdf_name, 'I');
 0
Author: Miguel Angel Orozco López, 2021-02-12 23:31:38