在CI中使用pChart库
本帖最后由 yinzhili 于 2009-8-14 10:57 编辑pChart是一个免费的PHP图表生成库,可以生成多种图表如饼图或者柱状图等等,需要GD库的支持。下面我来简单讲讲如何在CI中方便地使用它。
首先我们要下载pChart。访问http://pchart.sourceforge.net/download.php 就可以下载到最新版的pChart,目前最新的版本是1.27。解压下载到的文件,我们要用到的只是其中的pChart文件夹,里面有pChart.class、pCache.class和pData.class这三个文件。我们把pChart文件夹复制到 application/libraries/ 下面。
然后要准备字体,因为我们做报表很可能要输出中文,所以必须使用一种中文字体,至于选什么字体就看你的喜好了(如果是商业用途的话请注意字体的版权以免引起版权纠纷),把中文字体的ttf文件复制到 application/libraries/pChart 下面即可。
通过库的形式来使用pChart,因此在 application/libraries/ 下面创建一个文件,命名为 Chart.php,代码如下:
<?php
class Chart {
function Chart() {
include(APPPATH."libraries/pChart/pData.class");
include(APPPATH."libraries/pChart/pChart.class");
}
function draw_line_graph($params) {
$DataSet = new pData;
$DataSet->AddPoint($params['data'],"Serie1");//需要显示的数据
$DataSet->AddPoint($params['date'],"Serie2"); //横坐标的数据
$DataSet->AddSerie("Serie1");
$DataSet->SetAbsciseLabelSerie("Serie2");
$DataSet->SetSerieName("订单总金额","Serie1");
$DataSet->SetYAxisName("RMB"); //纵坐标上显示的文字
$DataSet->SetXAxisName('横坐标:日期'); //横坐标上显示的文字
$DataSet->SetXAxisFormat("date"); //横坐标的数据类型
$Test = new pChart($params['height'],$params['width']); //图表文件的高度和宽度
$Test->setDateFormat($params['date_format']); //横坐标显示的日期格式
$Test->setColorPalette(0,255,0,0);
$Test->setFontProperties(APPPATH."libraries/pChart/FZLTXIHK.ttf",12); //设置使用的字体及字号
$Test->setGraphArea(60,60,$params['x_area'],$params['y_area']); //图形区域的高度和宽度
$Test->drawGraphArea(252,252,252); //线的颜色
$Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_NORMAL,150,150,150,TRUE,0,2);
$Test->drawGrid(4,TRUE,230,230,230,255);
$Test->drawLineGraph($DataSet->GetData(),$DataSet->GetDataDescription());
$Test->drawPlotGraph($DataSet->GetData(),$DataSet->GetDataDescription(),3,2,255,255,255);
$Test->setFontProperties(APPPATH."libraries/pChart/FZLTXIHK.ttf",8); //设置数据值所用字体及字号
$Test->writeValues($DataSet->GetData(),$DataSet->GetDataDescription(),"Serie1"); //输出每个点的数据值
$Test->setFontProperties(APPPATH."libraries/pChart/FZLTXIHK.ttf",11); //设置使用的字体及字号
$Test->drawLegend(75,65,$DataSet->GetDataDescription(),255,255,255);
$Test->setFontProperties(APPPATH."libraries/pChart/FZLTXIHK.ttf",12); //设置使用的字体及字号
$Test->drawTitle(60,22,$params['title'],50,50,50,585);
$imagefile='public/temp/'.$params['filename'].'.png'; //设置生成文件的保存路径
$Test->Render($imagefile); //生成文件
return $imagefile;//返回文件名
}
}
控制器:
function test(){
$this->load->library('chart'); //载入pChart库
$params['data']=array(100,200,150,600,230,150,510); //要显示的数据
for($i=0;$i<7;$i++){
$params['date'][$i]=1250217066+$i*86400; //要显示的日期,注意这里是Unix时间戳,pChart会自动传换成你要的格式
}
$params['title']='销售报表'; //图片标题
$params['date_format']='m月j日';//设置日期格式
$params['filename']='test_image';//文件名
$params['height']=600; //高度
$params['width']=300; //宽度
$params['x_area']=560; //图形区域高度
$params['y_area']=280; //图形区域宽度
$data['chart_image']=$this->chart->draw_line_graph($params);//生成图片
$data['baseurl']=site_url();
$this->load->view('test_view.html',$data);
}
视图:test_view.html
<html>
<head><title></title></head>
<body>
<img src="<?php echo $baseurl.$chart_image;?>" />
</body>
</html>
最终生成的图表是这样的:
关于pChart的更多用法,请参考它的在线文档:
http://pchart.sourceforge.net/documentation.php pChart下载不了,能放个附件上不吗? 不错的类库,也准备使用. PCHART不错,做个标记:lol 怎么不好使,好象文件路径有问题,有没有调通的 好文章,收藏一下 老出问题,这个怎么回事呢
A PHP Error was encountered
Severity: Warning
Message: imageftbbox() : Invalid font filename
Filename: pChart/pChart.class
Line Number: 556 mark, thx! 例子测试结果:
报表可以正常生成,
但是有代码错误提示:pData.class 文件 第126行 Uninitialized string offset: 0
解决办法:
修改 pData.class 文件 第126行
修改后代码如下:
for($i=0;$i<=count($this->Data);$i++)
{
if(is_array($this->Data) && isset($this->Data[$i][$Serie]))
{
$ID = $i+1;
}
}
页:
[1]
2