fusioncharts Y轴不显示中文的解决方法(转载)
2014-02-26 14:01
337 查看
使用fusionChart主要是被其界面吸引了,各类图表都很好看,下载以后文档也很周全,支持的语言也很多种 ,容易上手。fusionChart工作原理主要是通过后台传xml数据源给报表前台flash flash复杂接收数据并渲染成最终的图表。
至于好不好用,仁者见仁了。我用起来感觉还是很舒服的,暂时还没做比较复杂的图表,目前的功能是够用的。这里主要说说使用中碰到的问题,和我的解决办法
第一 用过的人肯定都有会碰到,就是中文支持,按照默认的输出,肯定最后数据无法渲染。 fusionChart 有两种调用xml数据方法 setDataURL 和setDataXml方法。现就两种方式中文支持方法一一描述一下
1 先说 setDataXml吧,这个好解决,只要输出是response.setCaractEncoding("utf-8")即可,我的系统统一都是 utf-8编码,其它我没试。由于配置时已经加过编码过滤器了,所以这部也可省略。这样做的缺点就是输出xml过长可能会有问题。
2 setDataURL方法,我之前上网查过很多网站,说法都是fusionChart free版本的这个有bug,用这个不能支持中文。我试了很多方法也确实都不行,后翻到官方文档中带的例子中输出日语的一个,恍然大悟
Java代码
byte[] utf8Bom = new byte[]{(byte) 0xef, (byte)
0xbb, (byte)
0xbf};
String utf8BomStr = new
String(utf8Bom,"UTF-8");
byte[] utf8Bom = new byte[]{(byte) 0xef, (byte) 0xbb, (byte)
0xbf};String utf8BomStr = new String(utf8Bom,"UTF-8");
这一段是关键,就是需要在你输出的xml字符串之前加上utf-8
bom技术标示,这样前台就可以读出中文了。还有一点需要注意,就是url是带参数的如下
/statistics/chartData.do?name=${searchName}${urlParam}“&”符号fusionChart是不认的,也需要URLEncoder.encoding转换中文的支持就先说到这了,我用的
setDataURL 中文显示现在已经没什么问题了
第二 就是比较头疼的 柱状图中横坐标
标题中文不显示的问题,主要因为fusionChart强行旋转了y轴标题的文字,汉字是不支持的 网上的解决办法是加上xml根结点加属性
rotateYAxisName=‘0’ 我试过不起作用
后来才知道是 fusionChart
free版本是不支持这个属性,fusionChart
v3版本支持这个,我下载过破解的v3版试过,确实好用,但我不喜欢v3的默认风格,所以还是想从free版上解决问题。我的解决办法就是sothink
swf decompiler工具把相应的swf破解了,直接改源代码
既然是yAxisName出了问题当然就是从这下手,找到yAxisName的相关代码,很快找到生成的那段AS
Js代码
if (this.Params.xAxisName !=
"")
{
createText(this.getLevel(), this.Params.xAxisName,
this.Objects.Canvas.xPos + this.Objects.Canvas.width / 2,
this.Objects.Canvas.height + this.Objects.xAxisName.yPos,
this.Params.outCnvBaseFont, this.Params.outCnvBaseFontSize,
this.Params.outCnvBaseFontColor, true, "center", "center", null,
true);
} // end
if
if
(this.Params.yAxisName !=
"")
{
createText(this.getLevel(), this.Params.yAxisName,
this.Objects.yAxisName.xPos, this.Objects.Canvas.yPos +
this.Objects.Canvas.height / 2, "Verdana",
Number(this.Params.outCnvBaseFontSize) + 1,
this.Params.outCnvBaseFontColor, false, "center", "center", 270,
true);
} // end
if
if (this.Params.xAxisName != "") { createText(this.getLevel(),
this.Params.xAxisName, this.Objects.Canvas.xPos +
this.Objects.Canvas.width / 2, this.Objects.Canvas.height +
this.Objects.xAxisName.yPos, this.Params.outCnvBaseFont,
this.Params.outCnvBaseFontSize, this.Params.outCnvBaseFontColor,
true, "center", "center", null, true); } // end if if
(this.Params.yAxisName != "") { createText(this.getLevel(),
this.Params.yAxisName, this.Objects.yAxisName.xPos,
this.Objects.Canvas.yPos + this.Objects.Canvas.height / 2,
"Verdana", Number(this.Params.outCnvBaseFontSize) + 1,
this.Params.outCnvBaseFontColor, false, "center", "center", 270,
true); } // end if
注意看倒数第五 和倒数第二个参数 输出x轴和y轴有什么不同,改成一样就可以了,编译好把flash替换了刷新页面
横向输出的y轴坐标已经出来了。还有点不完美的就是第一个字显示了一半被截掉了一样,看着不舒服,解决办法: 输出的xml根节点加上
chartLeftMargin=‘30’属性。ok大功告成
至于好不好用,仁者见仁了。我用起来感觉还是很舒服的,暂时还没做比较复杂的图表,目前的功能是够用的。这里主要说说使用中碰到的问题,和我的解决办法
第一 用过的人肯定都有会碰到,就是中文支持,按照默认的输出,肯定最后数据无法渲染。 fusionChart 有两种调用xml数据方法 setDataURL 和setDataXml方法。现就两种方式中文支持方法一一描述一下
1 先说 setDataXml吧,这个好解决,只要输出是response.setCaractEncoding("utf-8")即可,我的系统统一都是 utf-8编码,其它我没试。由于配置时已经加过编码过滤器了,所以这部也可省略。这样做的缺点就是输出xml过长可能会有问题。
2 setDataURL方法,我之前上网查过很多网站,说法都是fusionChart free版本的这个有bug,用这个不能支持中文。我试了很多方法也确实都不行,后翻到官方文档中带的例子中输出日语的一个,恍然大悟
Java代码
byte[] utf8Bom = new byte[]{(byte) 0xef, (byte)
0xbb, (byte)
0xbf};
String utf8BomStr = new
String(utf8Bom,"UTF-8");
byte[] utf8Bom = new byte[]{(byte) 0xef, (byte) 0xbb, (byte)
0xbf};String utf8BomStr = new String(utf8Bom,"UTF-8");
这一段是关键,就是需要在你输出的xml字符串之前加上utf-8
bom技术标示,这样前台就可以读出中文了。还有一点需要注意,就是url是带参数的如下
/statistics/chartData.do?name=${searchName}${urlParam}“&”符号fusionChart是不认的,也需要URLEncoder.encoding转换中文的支持就先说到这了,我用的
setDataURL 中文显示现在已经没什么问题了
第二 就是比较头疼的 柱状图中横坐标
标题中文不显示的问题,主要因为fusionChart强行旋转了y轴标题的文字,汉字是不支持的 网上的解决办法是加上xml根结点加属性
rotateYAxisName=‘0’ 我试过不起作用
后来才知道是 fusionChart
free版本是不支持这个属性,fusionChart
v3版本支持这个,我下载过破解的v3版试过,确实好用,但我不喜欢v3的默认风格,所以还是想从free版上解决问题。我的解决办法就是sothink
swf decompiler工具把相应的swf破解了,直接改源代码
既然是yAxisName出了问题当然就是从这下手,找到yAxisName的相关代码,很快找到生成的那段AS
Js代码
if (this.Params.xAxisName !=
"")
{
createText(this.getLevel(), this.Params.xAxisName,
this.Objects.Canvas.xPos + this.Objects.Canvas.width / 2,
this.Objects.Canvas.height + this.Objects.xAxisName.yPos,
this.Params.outCnvBaseFont, this.Params.outCnvBaseFontSize,
this.Params.outCnvBaseFontColor, true, "center", "center", null,
true);
} // end
if
if
(this.Params.yAxisName !=
"")
{
createText(this.getLevel(), this.Params.yAxisName,
this.Objects.yAxisName.xPos, this.Objects.Canvas.yPos +
this.Objects.Canvas.height / 2, "Verdana",
Number(this.Params.outCnvBaseFontSize) + 1,
this.Params.outCnvBaseFontColor, false, "center", "center", 270,
true);
} // end
if
if (this.Params.xAxisName != "") { createText(this.getLevel(),
this.Params.xAxisName, this.Objects.Canvas.xPos +
this.Objects.Canvas.width / 2, this.Objects.Canvas.height +
this.Objects.xAxisName.yPos, this.Params.outCnvBaseFont,
this.Params.outCnvBaseFontSize, this.Params.outCnvBaseFontColor,
true, "center", "center", null, true); } // end if if
(this.Params.yAxisName != "") { createText(this.getLevel(),
this.Params.yAxisName, this.Objects.yAxisName.xPos,
this.Objects.Canvas.yPos + this.Objects.Canvas.height / 2,
"Verdana", Number(this.Params.outCnvBaseFontSize) + 1,
this.Params.outCnvBaseFontColor, false, "center", "center", 270,
true); } // end if
注意看倒数第五 和倒数第二个参数 输出x轴和y轴有什么不同,改成一样就可以了,编译好把flash替换了刷新页面
横向输出的y轴坐标已经出来了。还有点不完美的就是第一个字显示了一半被截掉了一样,看着不舒服,解决办法: 输出的xml根节点加上
chartLeftMargin=‘30’属性。ok大功告成
相关文章推荐
- fusioncharts Y轴不显示中文的解决方法
- 【转载】RHEL5显示中文乱码解决方法
- Windows XP英文版安装中文语言包来解决无法显示中文的方法(转载)
- (转载)Ubuntu Document viewer 中文显示乱码解决方法
- 【转】Ubuntu Document viewer 中文显示乱码解决方法
- window系统mysql无法输入和无法显示中文的解决方法
- FusionCharts通过属性link向JavaScript函数传递中文参数导致乱码的解决方法
- 解决centos/redhat英文版显示中文乱码的有效方法
- 验证码图片中文不显示解决方法!!!
- IIS无法显示中文名称图片问题的解决方法
- FtpClient在创建中文目录文件名中的中文显示乱码解决方法
- MySQL中文常见乱码问题解决方法其一,可以解决觉大多是乱码问题。如果你的中文显示为?的时候一般都有效。
- 【cocos2dx】rapidjson使用方法以及中文显示的解决方法
- Debian下NetBeans中文字体显示为方块的解决方法
- vs2005调试时无法显示网页的解决方法(转载+自己的体验(代理问题))
- (转载)SQL Server2008附加数据库之后显示为只读时解决方法
- Ubantu12.04中文显示乱码解决方法
- 英文版windows xp 里面中文显示乱码的解决方法
- SQLServer乱码问题的分析及解决方法(中文字符被存入数据库后,显示为乱码)
- SecureCRT中文显示乱码的解决方法