php使用Jpgraph创建柱状图展示年度收支表效果示例
应用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的文件时,才将它读进来。这种方式可以把程序执行时的流程简单化。
相关文章
- 有时为了网站安全和版权问题,会对自己写的php源码进行加密,在php加密技术上最常用的是zend公司的zend guard 加密软件,现在我们来图文讲解一下。 下面就简单说说如何...2016-11-25
- ps软件是现在很多人都会使用到的,HSL面板在ps软件中又有着非常独特的作用。这次文章就给大家介绍下ps怎么使用HSL面板,还不知道使用方法的下面一起来看看。  ...2017-07-06
- 许多的朋友对于Plesk控制面板应用不是非常的了解特别是英文版的Plesk控制面板,在这里小编整理了一些关于Plesk控制面板常用的使用方案整理,具体如下。 本文基于Linu...2016-10-10
使用insertAfter()方法在现有元素后添加一个新元素
复制代码 代码如下: //在现有元素后添加一个新元素 function insertAfter(newElement, targetElement){ var parent = targetElement.parentNode; if (parent.lastChild == targetElement){ parent.appendChild(newEl...2014-05-31- 大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
使用percona-toolkit操作MySQL的实用命令小结
1.pt-archiver 功能介绍: 将mysql数据库中表的记录归档到另外一个表或者文件 用法介绍: pt-archiver [OPTION...] --source DSN --where WHERE 这个工具只是归档旧的数据,不会对线上数据的OLTP查询造成太大影响,你可以将...2015-11-24如何使用php脚本给html中引用的js和css路径打上版本号
在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css、js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候,浏览器就可以从浏览器的缓存中获取css、...2015-11-24jQuery 1.9使用$.support替代$.browser的使用方法
jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support 。 在更新的 2.0 版本中,将不再支持 IE 6/7/8。 以后,如果用户需要支持 IE 6/7/8,只能使用 jQuery 1.9。 如果要全面支持 IE,并混合...2014-05-31安装和使用percona-toolkit来辅助操作MySQL的基本教程
一、percona-toolkit简介 percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql和系统任务,这些任务包括: 检查master和slave数据的一致性 有效地对记录进行归档 查找重复的索...2015-11-24- 一、下载 mysqlsla [root@localhost tmp]# wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz--19:45:45-- http://hackmysql.com/scripts/mysqlsla-2.03.tar.gzResolving hackmysql.com... 64.13.232.157Conn...2015-11-24
- 目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它。我写过一篇《数据类型和JSON格式》,探讨它的设计思想。今天,我想总结一下PHP语言对它的支持,这是开发互联网应用程序(特别是编写API)必须了解的知识...2015-10-30
- 无限级分类在开发中经常使用,例如:部门结构、文章分类。无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式; 查找分类A下面所有分类包含的文章。1.实现原理 几种常见的实现方法,各有利弊。其中...2015-10-23
- C#注释的一些使用方法浅谈,需要的朋友可以参考一下...2020-06-25
- php类的使用实例教程 <?php /** * Class program for yinghua05-2 * designer :songsong */ class Template { var $tpl_vars; var $tpl_path; var $_deb...2016-11-25
- 1.创建div元素: Javascript代码 复制代码 代码如下: <scripttypescripttype="text/javascript"> functioncreateElement(){ varcreateDiv=document.createElement("div"); createDiv.innerHTML="Testcreateadiveleme...2013-10-13
- 前几天在百度知道里面看到有人问PHP中双冒号::的用法,当时给他的回答比较简洁因为手机打字不大方便!今天突然想起来,所以在这里总结一下我遇到的双冒号::在PHP中使用的情况!双冒号操作符即作用域限定操作符Scope Resoluti...2015-11-08
- mysqli封装了诸如事务等一些高级操作,同时封装了DB操作过程中的很多可用的方法。应用比较多的地方是 mysqli的事务。...2013-10-02
Postman安装与使用详细教程 附postman离线安装包
这篇文章主要介绍了Postman安装与使用详细教程 附postman离线安装包,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-05- Promise是异步编程的一种解决方案,在ES6中Promise被列为了正式规范,统一了用法,原生提供了Promise对象。接下来通过本文给大家介绍Promise的介绍及基本用法,感兴趣的朋友一起看看吧...2021-10-21
- 基本思路: 通过使用jquery选择器得到对应表单的jquery对象,然后使用attr方法修改对应的action 示例程序一: 默认情况下,该表单会提交到page_one.html 点击button之后,表单的提交地址就会修改为page_two.html 复制...2014-06-07