Generar un pdf con ñ y acentos desde base de datos TCPDF

publicado por: Anonymous

Estoy intentando generar un PDF con tcpdf donde se visualizara la lista de una tabla, el pdf se genera pero sale en blanco cuando esa lista contiene al menos una “ñ”,he tenido problemas con los caracteres que ya solucione al insertar y modificar, pero ahora que debo modificar en el PDF?

Código, con este código edito el pdf pero no pude colocarlo completo, el resto es una tabla.

include('../vista/data_pdf18.php'); 

  ob_start();
  ob_clean();


  require_once('../vista/assets/tcpdf/tcpdf.php'); 

  $obj_pdf = new TCPDF('l', 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, '10', PDF_MARGIN_RIGHT);  
  $obj_pdf->setPrintHeader(false);  
  $obj_pdf->setPrintFooter(false);  
  $obj_pdf->SetAutoPageBreak(TRUE, 10);  
  $obj_pdf->SetFont('helvetica', '', 10);  
  $obj_pdf->AddPage('l');  


  $content = '';  
  $content .= '  

código de la conexión a base de datos:

<?php  
function fetch_data()  
{  
  $output = '';  
  $conect = mysqli_connect("localhost","root","","mirenacer");
  $sql= "SELECT * FROM paciente";
  $result = mysqli_query($conect, $sql);
  while($row = mysqli_fetch_array($result))  
  {       
    $output .= '
    <tr> 
    <td width="8%">'.$row['paci_doc'].'</td>  
    <td width="8%">'.$row['paci_nom'].'</td>
    <td width="8%">'.$row['paci_ape'].'</td>
    <td width="8%">'.$row['paci_cel'].'</td>
    <td width="8%">'.$row['paci_tel'].'</td>
    <td width="8%">'.$row['paci_dir'].'</td>
    <td width="5%">'.$row['paci_eps'].'</td>  
    <td width="5%">'.$row['paci_esc'].'</td>
    <td width="5%">'.$row['paci_ocu'].'</td>
    <td width="8%">'.$row['paci_fecha_ing'].'</td>
    <td width="8%">'.$row['paci_fecha_nac'].'</td>
    <td width="5%">'.$row['paci_aco'].'</td>
    <td width="5%">'.$row['paci_rel'].'</td>
    <td width="5%">'.$row['paci_foto'].'</td>
    <td width="5%">'.$row['paci_pro'].'</td>

  </tr>  
  ';  
}  

return $output;  
}  

 ?>

solución

Investigando y probando con la librería encontré la raíz del problema y la solución:

El problema es que la base de datos al contener caracteres especiales (como ‘ñ’ o caracteres con acentos) produce un error en la conversión a html.

Para resolverlo basta agregar la siguiente linea de código:

$conect->set_charset("utf8");

De modo que este segmento queda:

$conect = mysqli_connect("localhost","root","","mirenacer");
$conect->set_charset("utf8");
$sql= "SELECT * FROM paciente";
$result = mysqli_query($conect, $sql);

Lo probé y funciona, espero te sea de ayuda, saludos.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *