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.
Escrito por darkvela
Escrito por darkvela