Foros del Web » Programando para Internet » PHP »

Crear PDF y guardarlo con posibilidad de imprimir

Estas en el tema de Crear PDF y guardarlo con posibilidad de imprimir en el foro de PHP en Foros del Web. Buenas, estoy realizando una aplicación web en la que tengo un apartado informe y otro recibo, en los cuales me interesaría obtener un archivo PDF ...
  #1 (permalink)  
Antiguo 13/03/2013, 07:01
 
Fecha de Ingreso: noviembre-2012
Mensajes: 184
Antigüedad: 12 años
Puntos: 0
Crear PDF y guardarlo con posibilidad de imprimir

Buenas, estoy realizando una aplicación web en la que tengo un apartado informe y otro recibo, en los cuales me interesaría obtener un archivo PDF para poder guardarlo como copia de seguridad en el servidor y poder imprimirlo para que cada cliente tenga su copia, así como poder realizar lo mismo de los informes de cada mes.
He estado leyendo y se suele usar el htmltopdf, dompdf, fpdf...
La duda es cual me recomendáis para esto, ya que en mi misma aplicación tendría un formato correcto, es decir, que tiene un formato bueno para imprimirlo directamente, ya que le he dado formato con html y css.
Me sería de gran ayuda escuchar vuestras recomendaciones.
Un saludo y gracias de antemano.
  #2 (permalink)  
Antiguo 13/03/2013, 07:47
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Crear PDF y guardarlo con posibilidad de imprimir

Yo hago lo siguiente llamo por ajax un fichero php (marco.php) con un iframe que ocupa todo el div donde se carga por ajax y le paso por paremetro la url que debe cargar el iframe.

Esta url es un php que genera al vuelo un pdf con fpdf, al ser el resultado un pdf automaticamente se carga en el iframe el visor de pdf con lo que el usuario tiene la opción de imprimir o guardar el fichero.

La generacion del pdf al vuelo lo programo puesto que no he encontrado nada que me traduzca del todo bien de html+css a pdf... quizas es que no defino bien yo el css. Especialmente si hay que controlar bien la paginación, por ejemplo una tabla html con filas de distintos altos puede ser un problema si no quieres que se corten celdas o que aparezcan celda vacias entre paginas...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 13/03/2013 a las 07:59
  #3 (permalink)  
Antiguo 13/03/2013, 07:50
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 16 años, 1 mes
Puntos: 175
Respuesta: Crear PDF y guardarlo con posibilidad de imprimir

Tema siempre complicado, sobre todo porque hay que leer bastante... te paso esto... leelo.

http://mpdf1.com/manual/

aqui un ejemplo de uso, espero te sirva:

Código PHP:

<?php 
// se hace el include de la clase que tiene que bajarla
include('../MPDF56/mpdf.php');
include(
'../../link/connect.php');

//esta parte esta toda escrita a mano para que se entienda nada mas, por lo general
//se arman dinamicamente con includes y otras tecnicas

if($_POST){
    
    
    
$sql="SELECT nombre, apellido, trato FROM usuarios WHERE id_usuario=".$_SESSION["k_idcliente"];
    
$querymysql_query($sql$conn) or die(mysql_error());
    
$row mysql_fetch_array($query);
    
    if(
$row["trato"]==""){
        
        
$docente $row["nombre"]." ".$row["apellido"];
    }else{
        
        
$docente $row["trato"]." ".$row["nombre"]." ".$row["apellido"];
    }
    
    
$inst$_POST['institucion'];
    
$secc$_POST['seccion'];
    
$turno$_POST['turno'];

//en esta variable html guardo mi estructura.
$html '<style type="text/css">

p, li{
    font-family:"Times New Roman", Times;
    font-size:12px;
}

h2{
    font-family: "Trebuchet MS";
    font-size:24px;
    color:#333;
    font-weight:normal;
    margin: 0;
}




#cuadro1{
width:30px;
 height:180px; 
 background-color:#423f40; 
 float:left;
}

#cuadro2{
 width:625px;
 height:40px; 
 background-color:#87868a;
 margin-left:10px; 
 padding-top:140px;
 padding-left: 15px;
 float:left;
 font-family:Trebuchet MS;
 font-size: 28px;
 color:#FFF;
}

#contenedor{
    width:700px;
 margin:0 auto;
 padding-left:55px;
}

#datos{
    width:100%;
    font-family: Times New Roman, Times, serif;
    font-size:13px;
}

#datos table{
    width:650px;
}

#competencias{
    width:100%;
    
}


#competencias ul li,#competencias p{
    text-align:justify;
    
}

.titulacion{
    font-weight: bold;
    font-size: 13px;
}

.guia{
    font-family:"Trebuchet MS";
    font-size:10px;
    font-weight: bold;
    color: #666;

}

.materia{
    font-family:"Trebuchet MS";
    font-size:10px;
    color: #999;

}
.data{
    font-family:"Trebuchet MS";
    font-size:13px;

}

.table-line{
    border-bottom:#666666 thin solid;
}

.epigrafe-der{
    font-family:"Trebuchet MS";
    font-size:9px;
    font-style:italic;
    color:#999999;
    
}

#foot{
    position:absolute;
    clear:both;
    top:1000px;
    
}

.obs{
    padding:20px;
    background-color:#999;
}

</style>'
;

 
 
//cuadro1
 
$html .= '<div id="cuadro1">&nbsp;</div>';

 
//cuadro2
 
$html.='<div id="cuadro2">PROYECTO/PLAN ANUAL</div>';
 
 
 
//contenedor INICIO
 
$html.='<div id="contenedor">';
 
 
//encabezado
 
$html .= '<div style="clear:both;"><h2>IDENTIFICACIÓN:</h2></div>';
 
 
//datos docentes
 
$html.='<div id="datos">
 
 <table border="0" cellspacing="0" cellpadding="3">
      <tr>
        <td width="90">Instituci&oacute;n:</td>
        <td width="550" class="table-line"><span class="data">'
.$inst.'</span></td>
      </tr>
      <tr>
        <td>Docente:</td>
        <td class="table-line"><span class="data">'
.$docente.'</span></td>
      </tr>
      <tr>
        <td>Grado:</td>
        <td class="table-line"><span class="data">7.&deg;</span></td>
      </tr>
      <tr>
        <td>Sección:</td>
        <td class="table-line"><span class="data">'
.$secc.'</span></td>
      </tr>
      <tr>
        <td>Turno:</td>
        <td class="table-line"><span class="data">'
.$turno.'</span></td>
      </tr>
    </table>
 
 
 </div>'
;
    
 
//competencias
 
$html.='<div id="competencias">
 
     <p class="titulacion">Competencia del área para el tercer ciclo de la EEB</p>
    
    <p>Formula y resuelve situaciones problemáticas que involucren la utilización de: operaciones matemáticas
con números reales y expresiones algebraicas; unidades de medidas; conceptos, principios y
elementos de la Geometría plana y del espacio; procedimientos básicos de la Estadística descriptiva y
de la Probabilidad, en variados contextos.</p>

    
    <p class="titulacion">Alcance de la competencia en el séptimo grado</p>
    
    <p>En relación con la competencia del ciclo, se espera que el estudiante al término del 7.&deg; grado:
    <ul>
    
    <li>Comprenda conceptos y procedimientos fundamentales del sistema numérico referidos a: conjuntos
de números enteros y racionales y, de la Geometría plana referidos a: ángulos y polígonos de tres
y cuatro lados; y del álgebra relacionados a ecuaciones lineales. Asimismo, se espera que formule y
resuelva situaciones problemáticas que involucren la utilización de algoritmos y propiedades de las
operaciones fundamentales con números enteros y racionales, y resuelva situaciones que involucren
la utilización de: a) la potenciación y la radicación; con números enteros y racionales, b) ecuaciones
lineales con una incógnita y, c) el Teorema de Pitágoras. Se espera también que interprete el comportamiento
de datos y elabore conclusiones a partir de la recolección, la organización, la representación
en tablas de frecuencias y gráficos circulares, y la determinación de la moda para datos no agrupados.</li>

    
    
    </ul>
    </p>
    

    
    
    <div class="obs">
    <p class="titulacion">Para tener en cuenta:</p>
    <p>En el mes de febrero, habitualmente, las instituciones educativas dan orientaciones generales relacionadas con el a&ntilde;o lectivo.</p>
    </div>
    
 
     

 </div>'
;
 
 
 
 
 
 
 
//contenedor FINAL
  
$html.='</div>';
  
  
  

//llamamos a la clase mPDF
$mpdf=new mPDF();

//creamos una nueva pagina por defecto A4, con 2cm de left, 1cm de right
//0,8cm de top y 2 cm de bot en margenes de hoja.. 
$mpdf->AddPage('P','','','','',20,10,8,20,'','');

//habilito para que me lea html
$mpdf->WriteHTML($html);

//le creo un pie de pagina
//tambien puedes poner un encabezado con setHeader, hay que leer el manual
$mpdf->SetFooter('Guía didáctica / Matemática 7');
//personalizo mi footer con el tamaño de letra, estilo BI = Bold Italic
$mpdf->defaultfooterfontsize=9;
$mpdf->defaultfooterfontstyle='BI';
$mpdf->defaultfooterline=0;

//esta parte es muy importante, ya que el Output sin parametros solo te mostrará
//el archivo en el navegador
//EN este caso le pongo parámetros para que cuando se genere el pdf, automáticamente
//me lo renombre como "matematica 7.pdf" el segundo parámetro es una D que indica DOWNLOAD
// es decir, que no se abrirá el archivo en el navegador, sino que se descargará cuando se genere
//puedes cambiar los parametros
//aqui tienes mas detalles http://mpdf1.com/manual/index.php?tid=125&searchstring=Output
$mpdf->Output('Matematica 7.pdf','D');

}


?>
Tambien existe otra clase llamada FPDF pero me cuesta trabajarlo con HTML y CSS
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #4 (permalink)  
Antiguo 14/03/2013, 10:38
 
Fecha de Ingreso: noviembre-2012
Mensajes: 184
Antigüedad: 12 años
Puntos: 0
Respuesta: Crear PDF y guardarlo con posibilidad de imprimir

Buenas, se me olvidó añadir que los datos son obtenidos mediante consultas mysql y estoy probando pero ninguna me funciona si alguien puede explicarme un poco as se lo agradeceria.
Un saludo.
  #5 (permalink)  
Antiguo 14/03/2013, 10:55
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 16 años, 1 mes
Puntos: 175
Respuesta: Crear PDF y guardarlo con posibilidad de imprimir

Explicarte que cosa?
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #6 (permalink)  
Antiguo 14/03/2013, 10:58
 
Fecha de Ingreso: noviembre-2012
Mensajes: 184
Antigüedad: 12 años
Puntos: 0
Respuesta: Crear PDF y guardarlo con posibilidad de imprimir

Es que no entiendo muy bien como se hace eso que me dices... porque yo tengo consultas en mysql de la base de datos para obtener los datos de los informes...
  #7 (permalink)  
Antiguo 14/03/2013, 11:02
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 16 años, 1 mes
Puntos: 175
Respuesta: Crear PDF y guardarlo con posibilidad de imprimir

Te puse un ejemplo que es real y te comenté el código, lo acabo de usar... te pase el link del manual de uso de la clase MPDF, lo único que tienes que hacer es bajar la clase MPDF de internet y arreglar el include de las primeras lineas, incluyendo la conexión, por eso me extraña tu pregunta...

Ahora te pregunto yo, sabes de PHP?
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #8 (permalink)  
Antiguo 14/03/2013, 11:06
 
Fecha de Ingreso: noviembre-2012
Mensajes: 184
Antigüedad: 12 años
Puntos: 0
Respuesta: Crear PDF y guardarlo con posibilidad de imprimir

Sisi, estoy empezando pero más o menos... es que no entiendo muy bien si hay que copiar el mismo código html 2 veces?? o ponerlo en otro archivo.php para que cuando le de al boton de generar PDF mande por pOST al otro y sea este el que genere?
En el caso ultimo este, entonces como le pasaría todos los datos o cmo se llevaría a cabo eso??

Última edición por Cota_Isla; 14/03/2013 a las 11:32

Etiquetas: html, pdf
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:40.