pChart 图表中文显示问题

net_php 2014-07-23 05:00:33
项目需要,图表显示数据,个人能力有限,

/* CAT:Bar Chart */
header("content-type:text/html; charset=utf-8");
/* pChart library inclusions */
include("class/pData.class.php");
include("class/pDraw.class.php");
include("class/pImage.class.php");

/* Create and populate the pData object */
$MyData = new pData();
$MyData->addPoints(array(150,220,300,250,420,200,300,200,100),"test");
$MyData->setAxisName(0,"Hits");
$MyData->addPoints(array("1月","2月","3月","4月","5月","6月","7月","8月","9月"),"Months");
$MyData->setSerieDescription("Months","Month");
$MyData->setAbscissa("Months");

/* Create the pChart object */
$myPicture = new pImage(700,230,$MyData);

/* Turn of Antialiasing */
$myPicture->Antialias = FALSE;

/* Add a border to the picture */
$myPicture->drawGradientArea(0,0,700,230,DIRECTION_VERTICAL,array("StartR"=>240,"StartG"=>240,"StartB"=>240,"EndR"=>180,"EndG"=>180,"EndB"=>180,"Alpha"=>100));
$myPicture->drawGradientArea(0,0,700,230,DIRECTION_HORIZONTAL,array("StartR"=>240,"StartG"=>240,"StartB"=>240,"EndR"=>180,"EndG"=>180,"EndB"=>180,"Alpha"=>20));
$myPicture->drawRectangle(0,0,699,229,array("R"=>0,"G"=>0,"B"=>0));

/* Set the default font */
$myPicture->setFontProperties(array("FontName"=>"fonts/pf_arma_five.ttf","FontSize"=>6));

/* Define the chart area */
$myPicture->setGraphArea(60,40,650,200);

/* Draw the scale */
$scaleSettings = array("GridR"=>200,"GridG"=>200,"GridB"=>200,"DrawSubTicks"=>TRUE,"CycleBackground"=>TRUE);
$myPicture->drawScale($scaleSettings);

/* Write the chart legend */
$myPicture->drawLegend(580,12,array("Style"=>LEGEND_NOBORDER,"Mode"=>LEGEND_HORIZONTAL));

/* Turn on shadow computing */
$myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>10));

/* Draw the chart */
$myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>10));
$settings = array("Surrounding"=>-30,"InnerSurrounding"=>30);
$myPicture->drawBarChart($settings);
ob_clean(); //关键代码,防止出现'图像因其本身有错无法显示'的问题。
Header("Content-type: image/PNG");
/* Render the picture (choose the best way) */
$myPicture->autoOutput("examples/pictures/example.drawBarChart.simple.png");

怎么把 $MyData->addPoints(array(150,220,300,250,420,200,300,200,100),"test");的字符串test显示为中文,怎么把 $MyData->setAxisName(0,"Hits");显示中文,比如 $MyData->setAxisName(0,"套");。。
...全文
375 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
黄袍披身 2014-07-29
  • 打赏
  • 举报
回复
输出图表 我还是推荐到JS 那去处理...图表效果 比php的丰富多了.
xuzuning 2014-07-24
  • 打赏
  • 举报
回复
假定你的服务器是 windows 系统,且程序是 gbk 编码的
function bm($ar) {
if(! is_array($ar)) return iconv('gbk', 'utf-8', $ar);
foreach($ar as &$v) $v = iconv('gbk', 'utf-8', $v);
return $ar;
}

/* CAT:Bar Chart */
/* pChart library inclusions */
include("Plugin/pChart2.1.4/class/pData.class.php");
include("Plugin/pChart2.1.4/class/pDraw.class.php");
include("Plugin/pChart2.1.4/class/pImage.class.php");

/* Create and populate the pData object */
$MyData = new pData();
$MyData->addPoints(array(150,220,300,250,420,200,300,200,100), bm("测试"));
$MyData->setAxisName(0, bm("套"));
$MyData->addPoints(bm(array("1月","2月","3月","4月","5月","6月","7月","8月","9月")),"Months");
$MyData->setSerieDescription("Months","Month");
$MyData->setAbscissa("Months");

/* Create the pChart object */
$myPicture = new pImage(700,230,$MyData);

/* Turn of Antialiasing */
$myPicture->Antialias = FALSE;

/* Add a border to the picture */
$myPicture->drawGradientArea(0,0,700,230,DIRECTION_VERTICAL,array("StartR"=>240,"StartG"=>240,"StartB"=>240,"EndR"=>180,"EndG"=>180,"EndB"=>180,"Alpha"=>100));
$myPicture->drawGradientArea(0,0,700,230,DIRECTION_HORIZONTAL,array("StartR"=>240,"StartG"=>240,"StartB"=>240,"EndR"=>180,"EndG"=>180,"EndB"=>180,"Alpha"=>20));
$myPicture->drawRectangle(0,0,699,229,array("R"=>0,"G"=>0,"B"=>0));

/* Set the default font */
$myPicture->setFontProperties(array("FontName"=>"c:/windows/fonts/simhei.ttf","FontSize"=>6));

/* Define the chart area */
$myPicture->setGraphArea(60,40,650,200);

/* Draw the scale */
$scaleSettings = array("GridR"=>200,"GridG"=>200,"GridB"=>200,"DrawSubTicks"=>TRUE,"CycleBackground"=>TRUE);
$myPicture->drawScale($scaleSettings);

/* Write the chart legend */
$myPicture->drawLegend(580,12,array("Style"=>LEGEND_NOBORDER,"Mode"=>LEGEND_HORIZONTAL));

/* Turn on shadow computing */
$myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>10));

/* Draw the chart */
$myPicture->setShadow(TRUE,array("X"=>1,"Y"=>1,"R"=>0,"G"=>0,"B"=>0,"Alpha"=>10));
$settings = array("Surrounding"=>-30,"InnerSurrounding"=>30);
$myPicture->drawBarChart($settings);
ob_clean(); //关键代码,防止出现'图像因其本身有错无法显示'的问题。
Header("Content-type: image/PNG");
/* Render the picture (choose the best way) */
$myPicture->autoOutput("examples/pictures/example.drawBarChart.simple.png");
net_php 2014-07-24
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
1、header 是不要的,因为你是以图片方式输出
2、你选用的字体是西文字体,没有汉字当然不能显示,你需要选一款中文字体
3、如果你的程序不是utf-8的,那么所有要输出的汉字都必须转成utf-8的
该用哪种字体呢?我用其他字体文件就是显示乱码,我定义了文体编码,没用,然后也用转码函数,也没用,怎么回事呢!?
net_php 2014-07-23
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
1、header 是不要的,因为你是以图片方式输出 2、你选用的字体是西文字体,没有汉字当然不能显示,你需要选一款中文字体 3、如果你的程序不是utf-8的,那么所有要输出的汉字都必须转成utf-8的
你选用的字体是西文字体,没有汉字当然不能显示,你需要选一款中文字体,就是我这个选错啦?$myPicture->setFontProperties(array("FontName"=>"fonts/pf_arma_five.ttf","FontSize"=>6));我改改去。。
net_php 2014-07-23
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
是最新版的吗? 待会下一个看看
是啊,是最新的,老版本也是这个问题,所以我索性用最新版本的了。谢谢老徐。。我在跟源码,慢慢研究。。求点拨
xuzuning 2014-07-23
  • 打赏
  • 举报
回复
1、header 是不要的,因为你是以图片方式输出 2、你选用的字体是西文字体,没有汉字当然不能显示,你需要选一款中文字体 3、如果你的程序不是utf-8的,那么所有要输出的汉字都必须转成utf-8的
xuzuning 2014-07-23
  • 打赏
  • 举报
回复
是最新版的吗? 待会下一个看看
net_php 2014-07-23
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
注释掉 header("content-type:text/html; charset=utf-8");
我开始没有的,然后后面加上去的,也没用啊,这不是乱码,只是不显示啊。。
xuzuning 2014-07-23
  • 打赏
  • 举报
回复
注释掉 header("content-type:text/html; charset=utf-8");
net_php 2014-07-23
  • 打赏
  • 举报
回复
引用 1 楼 Novolee 的回复:
直接中文写上去不行吗?
不行啊,直接什么都没有。
李睿_Lee 2014-07-23
  • 打赏
  • 举报
回复
直接中文写上去不行吗?

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧