Usando ezPDF + pChart

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.

Comments

Muchas gracias por la informacion, el post anterior me sirvio bastante, pero me llama la atencion esto, podrias publicar los arhivos? de tadas maneras muchas gracias

porfavor, necesito que me ayuden, no puedo hacer funcionar pchart, he buscado, pero no pillo ejemplos concretos con mysql o postgres, podrias subir los archivos por favor, gracias

Fue excelente, me ha ayudado un resto yo manejo php y mysql, estaba un poco confundido pero el ejemplo de seleccion de la base de datos me ha ayudado con todo…. Grax, muchas Grax ….

Espero sigas ayudado a las personas…