应用GD2库可以创建各式各样的图像,但是制作复杂的统计图形,仅通过GD2函数库来实现,则显得非常繁琐。PHP从诞生走向成熟经历了多次变革,在这期间,许多组织机构都开发了PHP的框架和类库。Jpgraph图形类库就是其中非常实用、流行的代表,不仅功能强大,而且操作简单。
例如:应用Jpgraph创建柱状图展示年度收支情况。
(1)将Jpgraph类库,首相应该,下载该类库的压缩包,下载完毕后解压到项目所在目录。
配置方式有两种,
(1)打开PHP的安装目录,编辑php.ini文件并修改其中的include_path参数,在其后增加文件夹名,如include_path = ".;D:\wampserver\www\jpgraph"
(2)重启Apache服务器即可生效
如果只想在本站点使用Jpgraph,则直接解压到项目的工程目录下即可。
需要用require_once等语句将所有文件导入到项目中。
例如建立index.php页面
代码如下 | 复制代码 |
<?php require_once'jpgraph/src/jpgraph.php';//导入Jpgraph类库 require_once'jpgraph/src/jpgraph_bar.php';//导入Jpgraph类库的柱状图功能 $data=array(80, 73, 89, 43, 56, 76, 89, 96, 93, 30, 98, 78);//设置统计数据 $xdata=array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); $graph=newGraph(600, 300);//设置画布大小 $graph->SetScale('textlin');//设置坐标刻度类型 $graph->SetShadow();//设置画布阴影 $graph->img->SetMargin(40, 30, 20, 40);//设置统计图边距 $barplot=newBarPlot($data);//实例化BarPlot对象 $barplot->SetFillColor('blue');//设置柱状图前景色 $barplot->value->Show();//显示 $graph->Add($barplot); $graph->title->Set(iconv('utf-8','GB2312//IGNORE','***科技有限公司年度收支')); //设置标题iconv防止中文乱码 $graph->xaxis->title->Set(iconv('utf-8','GB2312//IGNORE','月份')); //设置X轴名称 $graph->xaxis->SetTickLabels($xdata);//设置x轴标注 $graph->yaxis->title->Set(iconv('utf-8','GB2312//IGNORE','总金额(万元)')); //设置y轴名称 $graph->title->SetFont(FF_SIMSUN, FS_BOLD);//设置标题字体 $graph->xaxis->title->SetFont(FF_SIMSUN, FS_BOLD);//设置x轴字体 $graph->yaxis->title->SetFont(FF_SIMSUN, FS_BOLD);//设置y轴字体 $graph->Stroke();//输出图像 |
运行结果为:
小编给大家推荐的这篇文章介绍了thinkphp3.2中实现phpexcel导出带生成图片示例,非常实用,有兴趣的同学快来看看吧。首先下载PHPEXCEL 下载地址:http://phpexcel.codeplex.com/ https://github.com/PHPOffice/PHPExcel
把Classes目录下的文件(PHPExcel.php和PHPExcel文件夹),放到ThinkPHP\Library\Org\Util目录下
PHPExcel.php 改名为 :PHPExcel.class.php
代码如下 | 复制代码 |
// 导出exl
publicfunctionlook_down(){
$id= I('get.id');
$m= M ('offer_goods');
$where['offer_id'] =$id;
$data=$m->field('goods_id,goods_sn,goods_name,barcode,goods_type,price')->select();
// 导出Exl
import("Org.Util.PHPExcel");
import("Org.Util.PHPExcel.Worksheet.Drawing");
import("Org.Util.PHPExcel.Writer.Excel2007");
$objPHPExcel=new\PHPExcel();
$objWriter=new\PHPExcel_Writer_Excel2007($objPHPExcel);
$objActSheet=$objPHPExcel->getActiveSheet();
// 水平居中(位置很重要,建议在最初始位置)
$objPHPExcel->setActiveSheetIndex(0)->getStyle('A')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->setActiveSheetIndex(0)->getStyle('B1')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->setActiveSheetIndex(0)->getStyle('C')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->setActiveSheetIndex(0)->getStyle('D')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->setActiveSheetIndex(0)->getStyle('E')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objPHPExcel->setActiveSheetIndex(0)->getStyle('F')->getAlignment()->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
$objActSheet->setCellValue('A1','商品货号');
$objActSheet->setCellValue('B1','商品名称');
$objActSheet->setCellValue('C1','商品图');
$objActSheet->setCellValue('D1','商品条码');
$objActSheet->setCellValue('E1','商品属性');
$objActSheet->setCellValue('F1','报价(港币)');
// 设置个表格宽度
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(16);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(80);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(15);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(12);
$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(12);
// 垂直居中
$objPHPExcel->getActiveSheet()->getStyle('A')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('B')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('D')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('E')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
$objPHPExcel->getActiveSheet()->getStyle('F')->getAlignment()->setVertical(\PHPExcel_Style_Alignment::VERTICAL_CENTER);
foreach($dataas$k=>$v){
$k+=2;
$objActSheet->setCellValue('A'.$k,$v['goods_sn']);
$objActSheet->setCellValue('B'.$k,$v['goods_name']);
$img= M('goods')->where('goods_id = '.$v['goods_id'])->field('goods_thumb')->find();
// 图片生成
$objDrawing[$k] =new\PHPExcel_Worksheet_Drawing();
$objDrawing[$k]->setPath('./Upload/'.$img['goods_thumb']);
// 设置宽度高度
$objDrawing[$k]->setHeight(80);//照片高度
$objDrawing[$k]->setWidth(80);//照片宽度
/*设置图片要插入的单元格*/
$objDrawing[$k]->setCoordinates('C'.$k);
// 图片偏移距离
$objDrawing[$k]->setOffsetX(12);
$objDrawing[$k]->setOffsetY(12);
$objDrawing[$k]->setWorksheet($objPHPExcel->getActiveSheet());
// 表格内容
$objActSheet->setCellValue('D'.$k,$v['barcode']);
$objActSheet->setCellValue('E'.$k,$v['goods_type']);
$objActSheet->setCellValue('F'.$k,$v['price']);
// 表格高度
$objActSheet->getRowDimension($k)->setRowHeight(80);
}
$fileName='报价表'
$date=date("Y-m-d",time());
$fileName.="_{$date}.xls";
$fileName= iconv("utf-8","gb2312",$fileName);
//重命名表
// $objPHPExcel->getActiveSheet()->setTitle('test');
//设置活动单指数到第一个表,所以Excel打开这是第一个表
$objPHPExcel->setActiveSheetIndex(0);
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment;filename=\"$fileName\"");
header('Cache-Control: max-age=0');
$objWriter= \PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel5');
$objWriter->save('php://output'); //文件通过浏览器下载
// END
} |
水平居中,垂直居中,高度 等设置。注意放的位置,如果你放在末尾,那么是下一样生效。放到头部,第一行生效(上面代码是第一行生效,如果放到foreach里面就是下一行生效)。
import介绍。import("Org.Util.PHPExcel.Writer.Excel2007"); 文件位置:Org\Util\PHPExcel\Writer\Excel2007.class.php
图片地址一定要是本地。objDrawing[ objDrawing[k]->setPath('./Upload/'.$img['goods_thumb']); 图片位置:安装目录/Upload/xxx
php数组指针操作怎么用?本文详细解析了php数组指针操作,初学php的同学可以参考一下,非常有用。
数组指针的操作:
移动数组指针的操作:
Next() 向下 同时会获得当前元素的值。
Prev() 向上同时会获得当前元素的值。
End() 移动到最后一个元素单元 获得最后一个元素的值
Reset() 移动到第一个单元 获得第一个元素的值。
如果移动不成功,返回false。
参数都为需要操作的数组,并且是引用传递。
获得指针指向的元素的信息:
Key();//获得当前数组指针指向的元素下标
Current();//获得当前数组指针指向的元素
只获取数据 不移动指针
还有一个混合的操作:
即可以获得当前指针元素的信息(键值) 也 可以同时移动指针。
Each(); 获得当前元素的信息(键和值的信息),
移动指针:
我们有时可以利用each的特性,来达到遍历数组的目的:
应该利用循环结构 配合each完成。
配合条件:each到最后一个元素时,就会返回false。
List 函数:
List的限制:只针对索引数组起作用。
利用list 和each 完成遍历
但是使用完each遍历后 数组指针是不会reset的重置的,需要手动重置。
小编推荐的这篇文章介绍了PHP中include()与require()的区别说明,非常实用,有兴趣的同学快来看看吧。require 的使用方法如 require("MyRequireFile.php"); 。这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。
include 使用方法如 include("MyIncludeFile.php"); 。这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。
他们两个的用途是完全一样的,不一定非得哪个放在最前面哪个放在中间。他们最根本的区别在于错误处理的方式不一样。
require一个文件存在错误的话,那么程序就会中断执行了,并显示致命错误
include一个文件存在错误的话,那么程序不会中端,而是继续执行,并显示一个警告错误。
以下为补充:
1. include有返回值,而require没有。
2. include()包括并运行指定文件 在处理失败时include() 产生一个警告,被导入的程序代码都会被执行,而且这些程序在执行的时候会拥有和源文件中呼叫到include()语句的位置相同的变量范围。你可以导入同一个服务器中的静态页面。
3. include_once()的作用和include()是几乎相同的
唯一的差别在于include_once()会先检查要导入的档案是不是已经在该程序中的其它地方被导入过了,如果有的话就不会再次重复导入(这项功能有时候是很重要的,比方说要导入的里面宣告了一些你自行定义好的函数,那么如果在同一个程序重复导入这个文件,在第二次导入的时候便会发生错误讯息,因为PHP不允许相同名称的函数被重复宣告第二次)。
4. require()会将目标文件的内容读入,并且把自己本身代换成这些读入的内容 在处理失败时require() 则导致一个致命错。
这个读入并且代换的动作是在PHP引擎编译你的程序代码的时候发生的,而不是发生在PHP引擎开始执行编译好的程序代码的时候(PHP 3.0引擎的工作方式是编译一行执行一行,但是到了PHP 4.0以后就有所改变了,PHP 4.0是先把整个程序代码全部编译完成后,再将这些编译好的程序代码一次执行完毕,在编译的过程中不会执行任何程序代码)。require()通常来导入静态的内容,而include()则适合用导入动态的程序代码。
5. 如同include_once(),require_once()会先检查目标文件的内容是不是在之前就已经导入过了,如果是的话,便不会再次重复导入同样的内容。
6. require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行require。
7. require通常放在PHP程序的最前面,PHP程序在执行前,就会先读入require所指定引入的文件,使它变成PHP程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。
8. include一般是放在流程控制的处理部分中PHP程序网页在读到include的文件时,才将它读进来。这种方式可以把程序执行时的流程简单化。