Usando ezPDF + pChart

Enero 21, 2009

Bueno, anteriormente publiqué como generar reportes PDF usando ezPDF, ahora vamos a seguir con esa inspiración y vamos a crear un gráfico estadístico y a combinarlo con nuestro documento.

Primero lo que vamos hacer es generar el gráfico (para este ejemplo usaré uno circular), con la librería pChart:

// Incluimos las clases a nuestra aplicación, puedes usar include o require_once como lo hice con el ezPDF

include(“pChart/pData.class”);
include(“pChart/pChart.class”);

// Ahora vamos a definir los datos

$DataSet = new pData; // Inicializamos el objeto de la clase

$valores = array(10,2,3,5,3);
// Los valores siempre deben estar dentro de un array (mmmmmm, esto se ve muy sencillo, para hacerlo interesante los datos vamos a recogerlos de Base de Datos …

/*
$sql = “select s.name,s.total from tabla_1 t inner join tabla_2 s on t.site_id = s.id where t.id = $variable;
$rs = mysql_query($sql)or die(”Could not able table1”);

// Vamos a suponer que la consulta nos devuelve 10 registros, es por eso que hacemos previamente un while()

while($Rows = mysql_fetch_object($rs)){
$data [] = $Rows -> name; // a las variables les colocamos “[]“ para pasarlas como arrays
$name [] = $Rows -> total;
}

// Ahora entoces la variable quedaría así:

$valores = $data;

*/

// A la variable texto vamos a pasarle los nombres que hemos recogido de las columnas para que sirvan como leyenda del gráfico

$texto = $name;

$DataSet->AddPoint($valores,”Serie1″);
$DataSet->AddPoint($texto,”Serie2″);
$DataSet->AddAllSeries();
$DataSet->SetAbsciseLabelSerie(“Serie2″);

// Inicializamos el gráfico

$Test = new pChart(390,200); // los parámetros son ancho y alto – ojo : se miden en pixeles

// Finalmente dibujamos el gráfico

$Test->setGraphArea(50,30,585,200);

$Test->setFontProperties(“Fonts/tahoma.ttf”,10); // incluimos las fuentes
$Test->drawTitle(10,10,”Titulo del grafico”,28,117,34,380);
$Test->drawPieGraph($DataSet->GetData(),$DataSet->GetDataDescription(),150,90,110,PIE_PERCENTAGE,TRUE,50,20,0);
$Test->drawPieLegend(310,25,$DataSet->GetData(),$DataSet->GetDataDescription(),242,242,242);
$Test->Render(“imagen.png”); // generamos la imagen y la guardamos temporalmente

Hasta aquí hemos creado satisfactoriamente nuestro grafico ahora lo insertaremos a nuestro PDF usando ezPDF

$pdf= new Cezpdf(‘A4′);
$pdf->selectFont(‘fonts/Helvetica.afm’);
$pdf->ezSetMargins(30, 30, 50, 30);
$pdf->ezSetY(810);
$pdf->ezText(‘Titulo del PDF‘,14,array(‘justification’=>’left’));
$img_graph = ImageCreatefrompng(‘imagen.png’); // aqui llamamos a la imagen generada por pChart
$pdf->addImage($img_graph,75,500,450,300);
$pdf->ezStream();

Y listo como resultado obtenemos nuestro documento PDF + un pequeño gráfico generado por pChart.

Nota: Algo que descubrí usando pchart fue que cuando generamos gráficos cuyos datos sobrepasan los 8, nos genera error offset o sea problema con un array, pero no se preocupen no son los datos de su arrya sino es un problema con el archivo pChart.class, lo solucionamos así:

Generalmente tenemos esto en la línea 35:

var $Palette = array(“0″=>array(“R”=>188,”G”=>224,”B”=>46),

“1″=>array(“R”=>224,”G”=>100,”B”=>46),

“2″=>array(“R”=>224,”G”=>214,”B”=>46),

“3″=>array(“R”=>46,”G”=>151,”B”=>224),

“4″=>array(“R”=>176,”G”=>46,”B”=>224),

“5″=>array(“R”=>224,”G”=>46,”B”=>117),

“6″=>array(“R”=>92,”G”=>224,”B”=>46),

“7″=>array(“R”=>224,”G”=>176,”B”=>46));

lo reemplazamos por:

// la función genera aleatoriamente codigos de colores y listo solucionado el problema.

function colores(){
$this->colores=(array(“r”=>rand(0,255),”g”=>rand(0,255),”b”=>rand(0,255)));
return $this->colores;
}

Obviamnte van a tener que reemplazar todo lo que tiene $this->Palette[$ID]["R"] , por :
$colores = $this->colores(); // llamamos a la funcion
$Palette[$ID]["R"] // ya no usamos “$this”

Espero que este post les haya sido de ayuda, y que viva Dokeos , el software libre y toda su comunidad ….
No se pierdan mi siguiente artículo sobre el uso de phplot.


Generar reportes PDF con PHP usando la librería ezPDF

Enero 19, 2009

Este artículo es para aquellos desarrolladores PHP que quieren además de generar un reporte en html crear dinámicamente documentos PDF con PHP. Hoy por hoy existen diversas librerías que están disponibles para este objetivo, sin embargo el uso del ezPDF es de lo mas sencillo, solo se necesita incluir una librería a nuestro script y hacer uso de la clase ezPDF para crear nuestro archivo PDF.

Para nuestro ejemplo vamos a crear una primera función en la cual almacenaremos todos los valores en un array que luego lo pasaremos a otra función la cual se encargará de imprimir el documento PDF.

function reporte(){

// realizamos una consulta rapidamente – ojo : se está obviando la conexión puesto que no es el objetivo de este post

$sql = “select s.name,s.apellido,s.fecha from tabla_1 t inner join tabla_2 s on t.site_id = s.id where t.id = $variable;
$rs  = mysql_query($sql)or die(“Could not able site”);
$row = mysql_fetch_object($rs);

// llamamos al archivo donde se va a crear la segunda funcion

require_once(‘imprime.php’);

// inicializamos el objeto pdf

$this->pdf = new imprime();

// los resultados del query los colocamos dentro de un array

$data_info = array(‘name’   => $row->name,
‘apellido’ => $row->apellido,
‘fecha’ => $row->fecha
);

// llamamos a la segunda funcion y le pasamos el parametro – ojo :se puede pasar mas de un parametro separado por comas

$this->pdf->imprime($data_info);

}

// aqui la segunda funcion, la cual se encarga de diseñar el documento, recoge los parametros

function imprime($data_info){

// nuevo documento pdf – ojo: dentro del parentesis pueden colocar el tipo de hoja como A4, A3, etc

$pdf= new Cezpdf();

// utilizamos la fuente Helvetica.afm

$pdf->selectFont(‘fonts/Helvetica.afm’);

// margenes de la hoja

$pdf->ezSetMargins(30, 30, 50, 30);
$pdf->ezSetY(810);
$pdf->ezText(‘<b>Titulo Principal</b>’,14,array(‘justification’=>’left’));

// aqui colocamos una imagen que va a actuar como fondo de la hoja – ojo: esta librería solo acepta extensiones jpg y png

$img = ImageCreatefromjpeg(PUBLIC_IMAGES.’imagen.jpg’);
$pdf-> addImage($img,120,300,400,400);

// insertamos una linea para comenzar con el contenido

$pdf->line(50,790,550,790);
$pdf->ezSetY(780);

// ingresamos los datos que hemos obtenido del array – ojo: se usa $nombre_variable['indices']

$pdf->ezText(‘/’.’‘.$data_info['name'].’‘.’ con ‘.’‘.$data_info['apellido'].’‘.’ en la fecha’.’‘.$data_info['fecha'].’ ‘.’de ejemplo’,12,array(‘justification’=>’left’));
$pdf->ezSetY(50);

// insertamos para nuestro ejemplo la fecha actual del sistema y un pie alineado a la izquierda

$pdf->ezText(‘(c)’.date(‘Y’).’Pie Principal’,12,array(‘justification’=>’left’));
$pdf->ezSetY(50);
$pdf->ezText(date(‘j/n/Y g:i’),12,array(‘justification’=>’center’));
$pdf->ezStream();

}

Espero que con este artículo les haya ayudado un poco, el link para descargar la librería es ezPDF.

Nota: Para mi próximo artículo voy a combinar esta librería con PChart, cuyo producto final me origina un documento PDF mas un grafico estadístico.