Sv Community El Salvador

Soporte y Tecnología => Tutoriales => Mensaje iniciado por: rdoggsv en octubre 09, 2006, 04:24:56 pm

Título: Creando Pdfs desde PHP para reportes .....
Publicado por: rdoggsv en octubre 09, 2006, 04:24:56 pm
En la gran mayoria de nuestras aplicaciones de PHP llegamos a el punto en donde tenemos que crear reportes , sobre todo ya que PHP es utilizado para aplicaciones de bases de datos son muy pocos los casos en donde no necesitaremos la creacion de reportes...

Hay muchas alternativas para la configuracion de reportes en varios casos la mas utilizada es la creacion de htm sencillo y la impresion desde el navegador.

La alternativa que intento plantearles en esta ocasion es utilizando una libreria de R&OS conocida como pdf-php.

La pagina oficial de este proyecto es http://www.ros.co.nz/pdf/ , y para la fecha de creacion de este tutorial el link de descarga disponible es :

Código: [Seleccionar]
http://www.ros.co.nz/pdf/downloads.php?f=pdfClassesAndFonts_009e.zip
Lo extraeremos en una carpeta llamada pdf-php para este tutorial y posicionaremos la carpeta pdf-php en el interior de la carpeta que contiene nuestro script PHP.

En mi maquina se ve de la siguiente manera:

(http://img146.imageshack.us/img146/73/deletemeig8.jpg) (http://imageshack.us)

Aqui les dejo un sql para crear una tabla temporal de este ejemplo pueden usar el .sql o crear manualmente la tabla.

Código: [Seleccionar]
-- MySQL Administrator dump 1.4
--
-- ------------------------------------------------------
-- Server version 5.0.24a-community-nt
--
-- Create schema pdf_php
--

CREATE DATABASE IF NOT EXISTS pdf_php;
USE pdf_php;

--
-- Definition of table `pdf_php`.`usuario`
--

DROP TABLE IF EXISTS `pdf_php`.`usuario`;
CREATE TABLE  `pdf_php`.`usuario` (
  `id_usuario` int(5) NOT NULL,
  `nombres_usuario` varchar(50) default NULL,
  `apellidos_usuario` varchar(50) default NULL,
  `direccion` varchar(50) default NULL,
  `ciudad` varchar(50) default NULL,
  `phone` varchar(8) default NULL,
  PRIMARY KEY  (`id_usuario`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Dumping data for table `pdf_php`.`usuario`
--

INSERT INTO `pdf_php`.`usuario` (`id_usuario`,`nombres_usuario`,`apellidos_usuario`,`direccion`,`ciudad`,`phone`) VALUES
 (1,'rdogg','sv','svcommunity.org','san salvador','33334444');


La base de datos se llama pdf_php y la tabla se llama pdf_php

Crearemos un archivo llamado conexion.php

Contenidos de conexion.php
Código: [Seleccionar]
<?php

   $hostName 
"localhost";
   
$databaseName "pdf-php";
   
$username "usuario";
   
$password "contrasenia";

   function 
showerror()
   {
      die(
"Error " mysql_errno() . " : " mysql_error());
   }

   function 
mysqlclean($array$index$maxlength$connection)
   {
     if (isset(
$array["{$index}"]))
     {
        
$input substr($array["{$index}"], 0$maxlength);
        
$input mysql_real_escape_string($input$connection);
        return (
$input);
     }
     return 
NULL;
   }

   function 
shellclean($array$index$maxlength)
   {
     if (isset(
$array["{$index}"]))
     {
       
$input substr($array["{$index}"], 0$maxlength);
       
$input EscapeShellArg($input);
       return (
$input);
     }
     return 
NULL;
   }
?>


Contenido del archivo index.php que crea el pdf
Código: [Seleccionar]
<?php

  
require "./pdf-php/class.ezpdf.php";

  require 
"conexion.php";



  
$query "SELECT * FROM usuario WHERE id_usuario = 1";


  if (!(
$connection = @mysql_connect($hostName$username$password))){
      die(
"Could not connect to database");
  }



  if (!(
mysql_selectdb($databaseName$connection)))

    
showerror( );

  if (!(
$result = @ mysql_query($query$connection)))

    
showerror( );



  
$row mysql_fetch_array($result);



  
// Creamos el nombre y el apellido

  
$name "{$row["nombres_usuario"]} {$row["apellidos_usuario"]}";


  
// Creamnos un nuevo documento PDF

  
$doc =& new Cezpdf( );



  
// Usaremos la letra incluida en el paquete llamada Helvetica

  
$doc->selectFont('./pdf-php/fonts/Helvetica.afm');



  
// Creamos un encabezado

  
$doc->ezText("<u>Detalles de usuario para {$name}</u>",

                
14, array("justification"=>"left"));


  
// Creamos un espacio para separar

  
$doc->ezSetDy(-15);



  
// Hacemos un arreglo con la informacion del usuario

  
$table = array(

    array(
"Campo"=>"Nombre",

          
"Valor"=>$name),

    array(
"Campo"=>"Direccion",

          
"Valor"=>"{$row["direccion"]} {$row["ciudad"]} "),

    array(
"Campo"=>"Pais",

          
"Valor"=>"El Salvador"),

    array(
"Campo"=>"Telefono",

          
"Valor"=>$row["phone"]));



  
$doc->ezTable($table);



  
// Procesar el Documento

  
$doc->ezStream( );

?>


Obtenemos lo siguiente al ejecutarlo:

(http://img181.imageshack.us/img181/6391/deletemexc8.jpg) (http://imageshack.us)


Espero les sea de utilidad es un documento basico y el readme con el que viene el pdf-php trae otros ejemplos y se pueden crear pdfs muy avanzados con esta herramienta,  con imagenes y muchas cosas mas...

Título: Re: Creando Pdfs desde PHP para reportes .....
Publicado por: salvadoresc en octubre 09, 2006, 04:32:47 pm
hey que chivo esta esto... y se podra desde aqui administrar la seguridad del pdf???
Título: Re: Creando Pdfs desde PHP para reportes .....
Publicado por: Ra! en octubre 09, 2006, 04:33:56 pm
jejeje no se por que me suena que eso lo estas ocupando para lo de las horas sociales :p
Título: Re: Creando Pdfs desde PHP para reportes .....
Publicado por: rdoggsv en octubre 09, 2006, 04:55:16 pm
jejeje no se por que me suena que eso lo estas ocupando para lo de las horas sociales :p

No man un usuario de aqui del foro me pidio un poco de ayuda en esto y por eso he creado el tutillo

hey que chivo esta esto... y se podra desde aqui administrar la seguridad del pdf???

No he investigado con respecto a las cosas de password y otros de esos pero supongo que se ha de poder ..
Título: Re: Creando Pdfs desde PHP para reportes .....
Publicado por: Lucho en octubre 10, 2006, 07:48:30 am
Hey Gracias  Rdoggsv por el tutorial ya  lo estoy poniendo en practica para  hacer los reportes. :sur: :sur:




Gracias man. :thumbsup:
Título: Re: Creando Pdfs desde PHP para reportes .....
Publicado por: gordoalbo en octubre 10, 2006, 08:28:05 am
gracias rdoggsv por el tuto, esto me va a servir como no tenes idea, gracias nuevamente
Título: Re: Creando Pdfs desde PHP para reportes .....
Publicado por: Maitro... en diciembre 11, 2006, 08:46:42 pm
Una pregunta… como puedo hacer para mostrar varios registros de una tabla en el mismo archivo pdf, yo estaba intentando pasando la variable $result a mysql_fetch_assoc pero solo me devuelve un registro  :-/ .

(http://img141.imageshack.us/img141/8048/dibujogb0.jpg)
Espero que alguien me pueda ayudar porque no soy muy bueno con eso de los array  :phew:.
Título: Re: Creando Pdfs desde PHP para reportes .....
Publicado por: rdoggsv en diciembre 11, 2006, 10:36:46 pm
pone un poco del codigo de como lo estas haciendo para poder ayudarte mas, porque mysql_fetch_assoc , es algo equivalente a que uses mysql_fetch_array , porque el valor por defecto del segundo parametro de la funcion mysql_fetch_array es MYSQL_BOTH que te devuelve los valores asociados por indice y por nombre.
Título: Re: Creando Pdfs desde PHP para reportes .....
Publicado por: Maitro... en diciembre 12, 2006, 08:22:42 am
OK rdoggsv me fusile por completo tu código , lo único que cambia es que yo no construyo el arreglo sino que tomo la variable que me devuelve la consulta sql y el resultado es lo que esta en la imagen anterior.
Código: [Seleccionar]
$table= array(mysql_fetch_assoc($result));
$doc->ezTable($table);
eso es lo unico que cambia.
Título: Re: Creando Pdfs desde PHP para reportes .....
Publicado por: rdoggsv en diciembre 12, 2006, 08:48:01 am
$result = mysql_query("SELECT id, name FROM mytable");

while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
   printf("ID: %s  Name: %s", $row[0], $row[1]);
}

Mira este ejemplo de mysql_fetch_array , aplica igual para mysql_fetch_assoc , lo que te quiero mostrar es que cuando no es un solo registro el que tenes de la tabla , en el momento que aplicas mysql_fetch_array te devuelve un arreglo de el "record" en el que se encuentra en ese momento.

Por eso en ese ejemplo podes ver que dice while( $row = mysql...) que va a recorrer todo el $result y lo va almacenar en $row.

Por eso a vos solo te sale 1 record porque se lo aplicas en el momento y mysql_fetch_assoc te devuelve solo el primer record.

Ahorita no le puedo dar un test pero creo que deberia de funcionarte asi

$table = array();
while( $table[] = mysql_fetch_assoc($result) ) { 1=1; }
$doc->ezTable($table);

Proba eso y avisame , si no funciona lo voy a ejecutar para asegurarme.

Título: Re: Creando Pdfs desde PHP para reportes .....
Publicado por: Maitro... en diciembre 12, 2006, 08:59:06 am
me dice: " unexpected '=' " en la linea que se encuentra while( $table[] = mysql_fetch_assoc($result) ) { 1=1; }
Título: Re: Creando Pdfs desde PHP para reportes .....
Publicado por: rdoggsv en diciembre 12, 2006, 09:20:58 am
$table = array();
while( $table[] = mysql_fetch_assoc($result) ) {
 
  }
$doc->ezTable($table);

probalo sin el 1=1 , no me acuerdo enb que lenguaje usas 1=1; como para decirle que no haga nada :S
ahorita no tengo php aqui instalado para ejecutar los codigos :(
Título: Re: Creando Pdfs desde PHP para reportes .....
Publicado por: Maitro... en diciembre 12, 2006, 09:35:10 am
Me imprime los registros de la consulta en una sola linea y mas abajo imprime varias lineas que creo que son de la creacion del pdf.
Pero todo lo imprime en formato HTML :unsure:
Título: Re: Creando Pdfs desde PHP para reportes .....
Publicado por: rdoggsv en diciembre 12, 2006, 10:02:52 am

$table = array();
    while( $row = mysql_fetch_assoc($result)) $table[] = $row;
    //print_r($table);
    $doc->ezTable($table);



Vaya man ahi esta, ya lo ejecute y si funciona me crea la tabla perfectamente el ejemplo que habia puesto al inicio de este thread lo modifique todo para ejecutarlo de esta manera y crea la tabla perfectamente.

El error era que tenia en el while $table[] = mysql_fetch_assoc($result) y como esa comparacion siempre la hace aunque no hubiera otro registro se estaba creando un espacio ne lbanco.
Título: Re: Creando Pdfs desde PHP para reportes .....
Publicado por: Maitro... en diciembre 12, 2006, 10:12:09 am
Gracias rdoggsv  :thumbsup: Funciona como lo quiero  :thumbsup: , solo que como son varias las columnas que quiero mostrar no caben, como puedo hacer para que la pagina se muestre de forma horizontal???
Título: Re: Creando Pdfs desde PHP para reportes .....
Publicado por: rdoggsv en diciembre 12, 2006, 10:21:01 am
lo que dice

Código: [Seleccionar]
$doc =& new Cezpdf( );
ponelo como

Código: [Seleccionar]
$doc =& new Cezpdf([paper='LETTER'],[orientation='landscape']);
Aqui esta el link del manual para que podas leer todas las opciones

Código: [Seleccionar]
http://www.ros.co.nz/pdf/readme.pdf
Título: Re: Creando Pdfs desde PHP para reportes .....
Publicado por: Maitro... en diciembre 12, 2006, 03:06:14 pm
No me funciono la línea para pasar la pagina a horizontal, leí en el manual que  no siempre funciona esa línea así fui directamente al archivo class.ezpdf.php y modifique  directamente las variables del papel y la orientación para que parezca como yo lo quiero  :yahoo:.
 
rdoggsv, nuevamente gracias por tu ayuda  :thumbsup: :thumbsup: :thumbsup:
Título: Re:Creando Pdfs desde PHP para reportes .....
Publicado por: darkbeats en septiembre 17, 2013, 09:48:15 pm
es la forma mas facil de como generar un pdf, a probar y a darle con todo, muchas gracias por el dato...eres grande