Sv Community El Salvador
Soporte y Tecnología => Tutoriales => Mensaje iniciado 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 :
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.
-- 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
<?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
<?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...
-
hey que chivo esta esto... y se podra desde aqui administrar la seguridad del pdf???
-
jejeje no se por que me suena que eso lo estas ocupando para lo de las horas sociales :p
-
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 ..
-
Hey Gracias Rdoggsv por el tutorial ya lo estoy poniendo en practica para hacer los reportes. :sur: :sur:
Gracias man. :thumbsup:
-
gracias rdoggsv por el tuto, esto me va a servir como no tenes idea, gracias nuevamente
-
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:.
-
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.
-
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.
$table= array(mysql_fetch_assoc($result));
$doc->ezTable($table);
eso es lo unico que cambia.
-
$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.
-
me dice: " unexpected '=' " en la linea que se encuentra while( $table[] = mysql_fetch_assoc($result) ) { 1=1; }
-
$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 :(
-
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:
-
$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.
-
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???
-
lo que dice
$doc =& new Cezpdf( );
ponelo como
$doc =& new Cezpdf([paper='LETTER'],[orientation='landscape']);
Aqui esta el link del manual para que podas leer todas las opciones
http://www.ros.co.nz/pdf/readme.pdf
-
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:
-
es la forma mas facil de como generar un pdf, a probar y a darle con todo, muchas gracias por el dato...eres grande