Autor Tema: Creando Pdfs desde PHP para reportes .....  (Leído 18687 veces)

0 Usuarios y 4 Visitantes están viendo este tema.

Desconectado rdoggsv

  • Administrator
  • The Communiter-
  • *
  • Mensajes: 6530
  • "Once you go arch , u never go back"
    • SV CommunitY
Creando Pdfs desde PHP para reportes .....
« : 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:



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:




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...


Desconectado salvadoresc

  • Global Moderator
  • The Communiter-
  • *
  • Mensajes: 11652
  • Adobe Certified Expert en ACISEAPRENDE
    • Foro de Diseno - Pixeles al Desnudo
Re: Creando Pdfs desde PHP para reportes .....
« Respuesta #1 : octubre 09, 2006, 04:32:47 pm »
hey que chivo esta esto... y se podra desde aqui administrar la seguridad del pdf???
Awaken my child, and embrace the glory that is your birthright. Know that I am the Overmind; the eternal will of the Swarm.

haycoctelesamor.com

Desconectado Ra!

  • The Communiter-
  • *
  • Mensajes: 1025
Re: Creando Pdfs desde PHP para reportes .....
« Respuesta #2 : 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
"Solo una cosa vuelve un sueño imposible, el miedo a fracasar"

Desconectado rdoggsv

  • Administrator
  • The Communiter-
  • *
  • Mensajes: 6530
  • "Once you go arch , u never go back"
    • SV CommunitY
Re: Creando Pdfs desde PHP para reportes .....
« Respuesta #3 : 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 ..

Desconectado Lucho

  • Sv Member
  • ***
  • Mensajes: 145
Re: Creando Pdfs desde PHP para reportes .....
« Respuesta #4 : 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:

Desconectado gordoalbo

  • Sv Member
  • ***
  • Mensajes: 316
  • -----------
Re: Creando Pdfs desde PHP para reportes .....
« Respuesta #5 : octubre 10, 2006, 08:28:05 am »
gracias rdoggsv por el tuto, esto me va a servir como no tenes idea, gracias nuevamente
Dios es la clave del éxito

Desconectado Maitro...

  • The Communiter-
  • *
  • Mensajes: 2996
  • Maitrosoft ©®™
Re: Creando Pdfs desde PHP para reportes .....
« Respuesta #6 : 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  :-/ .


Espero que alguien me pueda ayudar porque no soy muy bueno con eso de los array  :phew:.

Desconectado rdoggsv

  • Administrator
  • The Communiter-
  • *
  • Mensajes: 6530
  • "Once you go arch , u never go back"
    • SV CommunitY
Re: Creando Pdfs desde PHP para reportes .....
« Respuesta #7 : 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.

Desconectado Maitro...

  • The Communiter-
  • *
  • Mensajes: 2996
  • Maitrosoft ©®™
Re: Creando Pdfs desde PHP para reportes .....
« Respuesta #8 : 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.

Desconectado rdoggsv

  • Administrator
  • The Communiter-
  • *
  • Mensajes: 6530
  • "Once you go arch , u never go back"
    • SV CommunitY
Re: Creando Pdfs desde PHP para reportes .....
« Respuesta #9 : diciembre 12, 2006, 08:48:01 am »
$result mysql_query("SELECT id, name FROM mytable");

while (
$row mysql_fetch_array($resultMYSQL_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.


Desconectado Maitro...

  • The Communiter-
  • *
  • Mensajes: 2996
  • Maitrosoft ©®™
Re: Creando Pdfs desde PHP para reportes .....
« Respuesta #10 : diciembre 12, 2006, 08:59:06 am »
me dice: " unexpected '=' " en la linea que se encuentra while( $table[] = mysql_fetch_assoc($result) ) { 1=1; }

Desconectado rdoggsv

  • Administrator
  • The Communiter-
  • *
  • Mensajes: 6530
  • "Once you go arch , u never go back"
    • SV CommunitY
Re: Creando Pdfs desde PHP para reportes .....
« Respuesta #11 : 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 :(
« Última Modificación: diciembre 12, 2006, 09:25:58 am por rdoggsv »

Desconectado Maitro...

  • The Communiter-
  • *
  • Mensajes: 2996
  • Maitrosoft ©®™
Re: Creando Pdfs desde PHP para reportes .....
« Respuesta #12 : 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:

Desconectado rdoggsv

  • Administrator
  • The Communiter-
  • *
  • Mensajes: 6530
  • "Once you go arch , u never go back"
    • SV CommunitY
Re: Creando Pdfs desde PHP para reportes .....
« Respuesta #13 : 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.

Desconectado Maitro...

  • The Communiter-
  • *
  • Mensajes: 2996
  • Maitrosoft ©®™
Re: Creando Pdfs desde PHP para reportes .....
« Respuesta #14 : 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???