没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论












SVG 生成饼图,虽然代码实现,但是感觉太复杂,太耗费时间,还不如用 JFreeChart,
但是听同事说,JfreeChart 很多 Bug,有时候还需要修改它的源代码,哎.网上找打了
JfreeChart 生成 SVG 图形方法,当然也作出了个 Demo.我对 JfreeChart 研究不深,同事说道:
这个东西,不是一会就能研究出来的,要学好,嘿嘿,也得 2 年吧.呜呜..
自我感觉没那么难吧,不就是学个他的 API 呀.慢慢摸索呗.况且开源的这东西,网上资源很多
相关的.
网上看到有用 JAVA 生成 SVG 线条图的,还有一个是柱状图的.
自己写了个饼图的,感觉实在是麻烦.尤其我在生成饼图的立体效果时候,郁闷了好久.
Jfreechart 本身不能生成 SVG 图形,但是可以借助另外一个东西,辅助生成.好像是这个:batik
,不会用网上用它做关键词,搜下即可
下面分别贴出一些代码:
一、java 生成 svg 饼图.平面的.
Java 代码ˆˆ
1. packagecom.xj.svg;
2.
3. importjava.io.File;
4. importjava.io.FileOutputStream;
5.
6.
7. publicclassCakySvg{
8. staticString[]colors={"#f2e692","#fef195","#ce9a31",
9. "#22FF22","#aaffaa","green",
10. "#799AE1","#9aabEe","#3e941b",
11. "#f2e692","#66cc00","#297110",
12. "#d6a97b","#82522b","#aaaaff",
13. "#ff2222","#ffaaaa","#aa1111"};
14. staticStringinitialize(double[]fenshu){
15. StringBuffersfile=newStringBuffer();
16. sfile.append("<?xmlversion='1.0'encoding='UTF-8'?>");
17. sfile.append("");
18. sfile.append("<svgxmlns:svg='http://www.w3.org/2000/svg'");
19. sfile.append("");
20. sfile.append("xmlns='http://www.w3.org/2000/svg'");
21. sfile.append("");
22. sfile.append("xmlns:xlink='http://www.w3.org/1999/xlink'");
23. sfile.append("");
24. sfile.append("xml:space='default'");
25. sfile.append("");
26. sfile.append("version='1.1'width='100%'height='100%'viewBo
x='002024570'>");
27. sfile.append("");
28. sfile.append("<defs></defs>");

29. sfile.append("\n");
30. sfile.append("<gstroke-width='1'stroke='#FFFFFF'transform='
matrix(1,0,0,1,16.384,-9.83)'xmlns='http://www.w3.org/2000/svg'>");
31. sfile.append("\n");
32. //循环创造 path 标签.
33. Stringpath=creatPath(502,300,300,fenshu);
34. sfile.append(path);
35. sfile.append("</g>");
36. sfile.append("\n");
37. sfile.append("</svg>");
38. returnsfile.toString();
39. }
40.
41. publicstaticStringcreatPath(doublex0,doubley0,doubler,double
[]fenshu){
42. StringBuffersfile=newStringBuffer();
43. doublex1=0;
44. doubley1=0;
45. doublemiddleX=0;
46. doublemiddleY=0;
47. doubleradian=0;
48. doubletextRadian=0;
49. doublek=0;
50. for(inti=0;i<fenshu.length;i++){
51. if(i==0){
52. radian=getRadian(fenshu[0]);
53. textRadian=radian/2;
54. x1=(x0+getCos(radian)*r);
55. y1=(y0-getSin(radian)*r);
56. middleX=(x0+getCos(textRadian)*r);
57. middleY=(y0-getSin(textRadian)*r);
58. doublepercent=Math.round(fenshu[0]*100)/100.0;
59. k=Math.abs((middleY-y0)/(middleX-x0));
60. doublesita=Math.atan(k);
61. doublelineLen=50;
62. doubletextLen=70;
63. if(radian<6){
64. lineLen=90;
65. textLen=110;
66. }
67. if((textRadian<(Math.PI/2))){

68. sfile.append("<linex1='"+middleX+"'y1='"+middleY+"
'x2='"+(middleX+Math.cos(sita)*lineLen)+"'y2='"+(middleY-
(Math.sin(sita)*lineLen))+"'stroke='#000000'/>");
69. sfile.append("\n");
70. sfile.append("<textx='"+
(middleX+Math.cos(sita)*textLen)+"'y='"+(middleY-
(Math.sin(sita)*textLen))+"'space='preserve'font-family='Tahoma'fon
t-size='21'fill='red'stroke='red'baseline-shift='baseline'>
"+percent+"%</text>");
71. }elseif((textRadian>(Math.PI/
2)&&textRadian<Math.PI)){
72. sfile.append("<linex1='"+middleX+"'y1='"+middleY+"
'x2='"+(middleX-Math.cos(sita)*lineLen)+"'y2='"+(middleY-
(Math.sin(sita)*lineLen))+"'stroke='#000000'/>");
73. sfile.append("\n");
74. sfile.append("<textx='"+(middleX-
Math.cos(sita)*textLen)+"'y='"+(middleY-(Math.sin(sita)*textLen))+"'
space='preserve'font-family='Tahoma'font-size='21'fill='red'stroke
='red'baseline-shift='baseline'>"+percent+"%</text>");
75. }elseif((textRadian>(Math.PI)&&textRadian<(Math.PI*3
/2))){
76. sfile.append("<linex1='"+middleX+"'y1='"+middleY+"
'x2='"+(middleX-Math.cos(sita)*lineLen)+"'y2='"+(middleY+
(Math.sin(sita)*lineLen))+"'stroke='#000000'/>");
77. sfile.append("\n");
78. sfile.append("<textx='"+(middleX-
Math.cos(sita)*textLen)+"'y='"+(middleY+(Math.sin(sita)*textLen))+"'
space='preserve'font-family='Tahoma'font-size='21'fill='red'stroke
='red'baseline-shift='baseline'>"+percent+"%</text>");
79. }elseif((textRadian>(Math.PI*3/2)&&textRadian<(Math.P
I*2))){
80. sfile.append("<linex1='"+middleX+"'y1='"+middleY+"
'x2='"+(middleX+Math.cos(sita)*lineLen)+"'y2='"+
(middleY+Math.sin(sita)*lineLen)+"'stroke='#000000'/>");
81. sfile.append("\n");
82. sfile.append("<textx='"+
(middleX+Math.cos(sita)*textLen)+"'y='"+(middleY+
(Math.sin(sita)*textLen))+"'space='preserve'font-family='Tahoma'fon
t-size='21'fill='red'stroke='red'baseline-shift='baseline'>
"+percent+"%</text>");
83. }
84. sfile.append("\n");
85. if(getRadian(fenshu[0])>Math.PI){

86. sfile.append("<pathd='M"+x0+""+y0+"L"+(x0+r)
+""+r+"A"+r+""+r+"010"+x1+""+y1+"L"+x0+""+y0+"z'fill='"+
colors[0]+"'/>");
87. }else{
88. sfile.append("<pathd='M"+x0+""+y0+"L"+(x0+r)
+""+r+"A"+r+""+r+"000"+x1+""+y1+"L"+x0+""+y0+"z'fill='"+
colors[0]+"'/>");
89. }
90. sfile.append("\n");
91. }else{
92. textRadian=radian+(getRadian(fenshu[i])/2);
93. radian=radian+getRadian(fenshu[i]);//弧度.
94. System.out.println("弧度:"+radian);
95. middleX=(x0+getCos(textRadian)*r);
96. middleY=(y0-getSin(textRadian)*r);
97. doublepercent=Math.round(fenshu[i]*100)/100.0;
98. k=Math.abs((middleY-y0)/(middleX-x0));
99. doublelineLen=50;
100. doubletextLen=70;
101. if(radian<6){
102. lineLen=90;
103. textLen=110;
104. }
105. doublesita=Math.atan(k);
106. if((textRadian<(Math.PI/2))){
107. sfile.append("<linex1='"+middleX+"'y1='"+middleY
+"'x2='"+(middleX+Math.cos(sita)*lineLen)+"'y2='"+(middleY-
(Math.sin(sita)*lineLen))+"'stroke='#000000'/>");
108. sfile.append("\n");
109. sfile.append("<textx='"+
(middleX+Math.cos(sita)*textLen)+"'y='"+(middleY-
(Math.sin(sita)*textLen))+"'space='preserve'font-family='Tahoma'fon
t-size='21'fill='red'stroke='red'baseline-shift='baseline'>
"+percent+"%</text>");
110. }elseif((textRadian>(Math.PI/
2)&&textRadian<Math.PI)){
111. sfile.append("<linex1='"+middleX+"'y1='"+middleY
+"'x2='"+(middleX-Math.cos(sita)*lineLen)+"'y2='"+(middleY-
(Math.sin(sita)*lineLen))+"'stroke='#000000'/>");
112. sfile.append("\n");
113. sfile.append("<textx='"+(middleX-
Math.cos(sita)*textLen)+"'y='"+(middleY-(Math.sin(sita)*textLen))+"'

space='preserve'font-family='Tahoma'font-size='21'fill='red'stroke
='red'baseline-shift='baseline'>"+percent+"%</text>");
114. }elseif((textRadian>(Math.PI)&&textRadian<(Math.PI
*3/2))){
115. sfile.append("<linex1='"+middleX+"'y1='"+middleY
+"'x2='"+(middleX-Math.cos(sita)*lineLen)+"'y2='"+(middleY+
(Math.sin(sita)*lineLen))+"'stroke='#000000'/>");
116. sfile.append("\n");
117. sfile.append("<textx='"+(middleX-
Math.cos(sita)*textLen)+"'y='"+(middleY+(Math.sin(sita)*textLen))+"'
space='preserve'font-family='Tahoma'font-size='21'fill='red'stroke
='red'baseline-shift='baseline'>"+percent+"%</text>");
118. }elseif((textRadian>(Math.PI*3/2)&&textRadian<(Math
.PI*2))){
119. sfile.append("<linex1='"+middleX+"'y1='"+middleY
+"'x2='"+(middleX+Math.cos(sita)*lineLen)+"'y2='"+
(middleY+Math.sin(sita)*lineLen)+"'stroke='#000000'/>");
120. sfile.append("\n");
121. sfile.append("<textx='"+
(middleX+Math.cos(sita)*textLen)+"'y='"+(middleY+
(Math.sin(sita)*textLen))+"'space='preserve'font-family='Tahoma'fon
t-size='21'fill='red'stroke='red'baseline-shift='baseline'>
"+percent+"%</text>");
122. }
123. sfile.append("\n");
124. //参数ˆ1表示ˆ画大于 180 的弧,0表示画小于 180 的弧ˆˆ
125. if(getRadian(fenshu[i])>Math.PI){
126. sfile.append("<pathd='M"+x0+""+y0+"L"+x1+""+
y1+"A"+r+""+r+"010"+(x1=x0+getCos(radian)*r)+""+(y1=y0-
getSin(radian)*r)+"L"+x0+""+y0+"z'fill='"+colors[i]+"'/>");
127. }else{
128. sfile.append("<pathd='M"+x0+""+y0+"L"+x1+""
+y1+"A"+r+""+r+"000"+(x1=x0+getCos(radian)*r)+""+(y1=y0-
getSin(radian)*r)+"L"+x0+""+y0+"z'fill='"+colors[i]+"'/>");
129. }
130. sfile.append("\n");
131. }
132.
133. }
134. returnsfile.toString();
135. }
136. //返回弧度ˆˆ
137. publicstaticdoublegetRadian(doublefenshu){
剩余29页未读,继续阅读
资源评论


定禅天
- 粉丝: 4
- 资源: 2
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
