Home > desarrollo, Spanish, técnico > Usando ezPDF + pChart

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.

Advertisements
  1. skillone
    February 11, 2009 at 1:44 am

    Buena interesante tu aporte…pero crees que podrias brindar a la comunidad tus archivos para ver mejor tu ejemplo?

    Un Saludo y gracias

  2. Oscar
    July 23, 2009 at 1:00 am

    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

  3. Oscar
    July 30, 2009 at 11:49 pm

    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

  4. Oscar
    August 3, 2009 at 9:42 pm

    vuelvo de nuevo xD… me da el siguiente error

    Fatal error: Call to a member function AddPoint() on a non-object in …..

    ayuda porfa

  5. Eder
    September 16, 2009 at 2:10 pm

    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…

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: