java awt 打印柱状图、线图

很凌乱,简单记录,有空整理下




import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics2D;

import java.awt.Graphics;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Hashtable;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;



import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;


public class Test{
	// 保存为文件名:设置
	private String fileName = buildFileName("c:\");
	
	private String PillarNum="1";
	private int pillarnum=0;
	private String pillarflag="1";//柱形图(1)或者线图
	// 主要标题
	private String topTitle = "主要标题";
	// No set get Method.
	private Color topTitleColor = Color.gray;
	private Font topTitleFont = new Font("宋体", Font.BOLD, 20);
	//标题位置
	private int topTitleStart = 25;
	
	
	// 左边标题
	private String leftTitle = "左边标题";

	private Color leftTitleColor = Color.red;
	private Font leftTitleFont = new Font("宋体", Font.PLAIN, 14);
	//标题位置
	private int leftTitleStart = 25;
	//数字长度
	private int leftlength=2;
	
	// 底部标题
	private String bottomTitle = "底部标题";
	private Color bottomTitleColor = Color.red;
	private Font bottomTitleFont = new Font("宋体", Font.PLAIN, 14);
	//标题位置
	private int bottomTitleStart = 10;
	//标题长度
	private int bottomlength=2;
	
	// 右边标题
	private String[] PillarInfo={"","","","","","","","","","","","","","","","","","","","","","","","","","",};
	private Color rightTitleColor = Color.black;
	private Font rightTitleFont = new Font("宋体", Font.PLAIN, 14);
	//标题位置
	private int rightTitleStart = 10;
	//标题长度
	private int rightlength=2;
	
	// 设置标识字体大小:设置
	private Font drawLineFont = new Font("宋体", Font.PLAIN, 2); // 虚线字体
	private Font rectHeadFont = new Font("宋体", Font.PLAIN, 12);// 柱头字体
	private Font rowScaleFont = new Font("宋体", Font.PLAIN, 12);// 横坐标的字体
	private Font colScaleFont = new Font("宋体", Font.PLAIN, 12);// 纵坐标字体

	// 上面字体相对应的颜色:设置
	private Color drawLineFontColor = Color.lightGray;
	
	private Color rowScaleFontColor = Color.black;
	private Color colScaleFontColor = Color.darkGray;
	//private Color rectHeadFontColor = Color.black;
	private Color[] rectHeadFontColor ={Color.black,Color.decode("#FF0000"),Color.decode("#0000FF"),Color.decode("#77CC50"),Color.decode("#FF6600"),Color.decode("#00FF00"),Color.decode("#cc99FF"),Color.decode("#000080")};	
	// 设置柱状图柱宽=颜色:#99CC00:设置
	//private Color fillRectColor = Color.decode("#99CC00");// new
	//设置柱状图柱宽=颜色:#99CC00:设置
	//#99cc00,#FF0000,#0000FF,#77CC50,#FF6600,#00FF00,#cc99FF,#000080
	private Color[] fillRectColor ={Color.decode("#99cc00"),Color.decode("#FF0000"),Color.decode("#0000FF"),Color.decode("#77CC50"),Color.decode("#FF6600"),Color.decode("#00FF00"),Color.decode("#cc99FF"),Color.decode("#000080")};
	// Color(153,204,0);//Color.decode("#00C600");
	// //Color.decode("#0099FF");
	private Color frameRectColor = Color.GRAY; // 内框颜色

	// 画布背景头颜色=默认白色:设置(大框的背景颜色)
	private Color canvasBackgroundColor = Color.decode("#efefef"); // Color.white;//

	// 设置画图区域边界:刻度:设置
	
	private int topVerge = 20;// 上框距离
	private int addtoptitleVerge=0;//如果有上标题,加上上标题的高度
	private int bottomVerge = 0; // 下框距离
	private int addbottomtitleVerge=0;//如果有下标题,加上下标题的高度
	private int leftVerge = 0;//左边宽度
	private int addlefttitleVerge=0;//如果有左标题,加上左标题的宽度
	private int addrighttitleVerge=0;//如果有右标题,加上右标题的宽度
	private int rightVerge = 20;//右边固定20
	private int leftmargin=10;//左边空白
	private int bottommargin=10;//下边空白
	// 数据变量:计算
	private Hashtable hb = null;

	// 画图数据
	private String dataList = null;

	// 参数是否有效,决定是否要画出图形:计算
	private boolean bPaint = true;
	private String gradual="0";
	// 画布大小=默认:宽:800;高:300:设置(大框的长度和高度)
	private int canvasWidth = 800;
	private int canvasHeight = 300;

	// 画布刻度=默认:行:11;列:31:设置或计算(刻度数量)
	private int rowCount = 10;
	private int colCount = 200;


	// 柱体伸出部分,柱脚部分高
	private int rectFootLenght = 0;

	// 柱状标头字串上移偏转量:px:设置
	private int rectHeadFontOffset = 2;

	// 画线的间隔:px[如果太小,则图体积大]:设置
	private int drawLineInterval = 4;

	// 放大比率:放大100倍[暂没有用]:设置用
	private int zoomInRate = 100;

	// 柱状图柱宽=单位:px:设置或计算
	private int rectWidth = 16;

	
	// 画区域长宽:计算
	private int paintWidth = 0;
	private int paintHeight = 0;

	// 画线间隔:列间隔;行间隔:计算,初始化在构造函数中colinterval和柱子数量有关系
	private int colInterval = 20*pillarnum;
	private int rowInterval = 20;
	
	public void paint(BufferedImage bi) {
		if (bi == null){
			bPaint = false;
		}
		if (bPaint) {
			// 内存建图区域:生成画布
			// BufferedImage bi = new BufferedImage(canvasWidth, canvasHeight,
			// BufferedImage.TYPE_INT_BGR);
			Graphics g = bi.createGraphics();
			// 设置画布底色
			g.setColor(canvasBackgroundColor);
			g.fillRect(0, 0, canvasWidth, canvasHeight);
			//打印top
			printTop(g);
			//打印left
			printLeft(g);
			//打印主题数据
			printMain(g);
			//打印bottom
			printBottom(g);
			//打印right
			if(pillarnum>1){
				printRight(g);
			}
			// 清除画布
			g.dispose();

		} else {//错误提示的时候执行
			if (bi == null){
				bi = new BufferedImage(canvasWidth, canvasHeight,BufferedImage.TYPE_INT_BGR);
			}
			Graphics g = bi.createGraphics();
			// 设置画布底色
			g.setColor(canvasBackgroundColor);
			g.fillRect(0,0,canvasWidth,canvasHeight);
			g.setColor(Color.RED);
			g.setFont(new Font("宋体", Font.BOLD, 20));
			g.drawString("没有数据,图形不输出!",canvasWidth/2-11*10,canvasHeight/2+13-10);
			// 清除画布
			g.dispose();
		}
	}
	public void printTop(Graphics g) {
		// 打印头标题
		int mainTitleLeftStart = canvasWidth / 2 - topTitle.length()* topTitleFont.getSize()* 10 / 23;
		g.setColor(topTitleColor);
		g.setFont(topTitleFont);
		g.drawString(topTitle, mainTitleLeftStart, topTitleStart);
	}
	public void printLeft(Graphics g) {
		//左标题居中显示,如果字数过多就会显示不全那么就从最顶部开始打印,最顶部是13
		if(canvasHeight<=(leftTitle.length()*20+13)){
			leftTitleStart=13;
		}else{
			leftTitleStart =canvasHeight/2 - leftTitle.length()*10+13;
		}
		// 打左标题
		g.setColor(leftTitleColor);
		g.setFont(leftTitleFont);
		
		drawString(g,leftTitle,(leftmargin+addlefttitleVerge)/2-10,leftTitleStart,20);
	}
	public void printRight(Graphics g) {
		
		
		rightTitleStart=canvasWidth-rightVerge-addrighttitleVerge+5;
		for(int i=0;i<pillarnum;i++){
			if(pillarflag.equalsIgnoreCase("1")){
				//打右矩形gradual为1就渐变
				if(gradual.equalsIgnoreCase("1")){
					paintRect(g,rightTitleStart,canvasHeight/2+ (i-pillarnum)*17+13, rectWidth - 2,rectWidth - 2,fillRectColor[i]);
				}else{
					g.setColor(fillRectColor[i]);
					g.fillRect(rightTitleStart,canvasHeight/2+ (i-pillarnum)*17+13, rectWidth - 2,rectWidth - 2);
				}
			}else{
				g.setColor(fillRectColor[i]);
				g.drawOval(rightTitleStart-2,canvasHeight/2+ (i-pillarnum)*17+11, 5, 5);
				g.fillOval(rightTitleStart-2,canvasHeight/2+ (i-pillarnum)*17+11, 5, 5);
			}
			// 打右标题
			g.setColor(rightTitleColor);
			g.setFont(rightTitleFont);
			
			g.drawString(PillarInfo[i],rightTitleStart+rectWidth,canvasHeight/2+ (i-pillarnum)*17+11+rectWidth);
		}
	}
	public void printMain(Graphics g) {
		double val_max = toDbl(hb.get("val_max"));
		int rowScaleMax = round(val_max, 1);
		int rowScale = rowScaleMax / rowCount;
		boolean bCalc = (rowScale * rowCount == rowScaleMax);

		// 输出竖标
		String[] col_arr = (String[]) hb.get("col_arr");

		double[][] val_arr = (double[][]) hb.get("val_arr");
		// 画列标度:主要是整数
		g.setFont(rowScaleFont);
		g.setColor(rowScaleFontColor);
		for (int i = 1; i < rowCount + 1; i++) {
			g.drawString(fmtNum("" + rowScale * i, leftlength, ' '), leftmargin+addlefttitleVerge,(topVerge+addtoptitleVerge + paintHeight - i * rowInterval ));
		}
		// 先画外框架
		g.setColor(frameRectColor);
		g.drawRect(leftmargin+leftVerge+addlefttitleVerge, topVerge+addtoptitleVerge, paintWidth, paintHeight);
		// 后画内框
		g.setColor(Color.white);
		g.fillRect(leftmargin+leftVerge+addlefttitleVerge + 1, topVerge+addtoptitleVerge + 1, paintWidth - 1, paintHeight - 1);
		// 画虚横线
		int offset = drawLineFont.getSize() / 2;
		g.setFont(drawLineFont);
		g.setColor(drawLineFontColor);
		for (int i = 1; i < rowCount + 1; i++) {
			for (int j = leftVerge+addlefttitleVerge + offset; j < (leftmargin+leftVerge+addlefttitleVerge + paintWidth); j += drawLineInterval) {
				g.drawString(".", j,(topVerge+addtoptitleVerge + paintHeight - i * rowInterval + 2));
			}
		}
		// 画行标度:行标识
		offset = colScaleFont.getSize() / 2;
		g.setFont(colScaleFont);
		g.setColor(colScaleFontColor);
		// 打印横坐标
		for (int i = 1; i < colCount + 1; i++) {
			drawString(g, col_arr[i - 1],leftmargin+ leftVerge+addlefttitleVerge + 20+(i-1) * colInterval+pillarnum*rectWidth / 2-rectWidth, canvasHeight - bottomVerge-addbottomtitleVerge-bottommargin+15, 12);
		}

		int rectHeight = (int) Math.round(Math.random() * 10);
		
	if(pillarflag.equals("1")){
		for (int i = 1; i < colCount + 1; i++) {
			for(int firsti=0;firsti<pillarnum;firsti++){
				if (bCalc){
					rectHeight = round((val_arr[i - 1][firsti] / val_max)* (paintHeight - topVerge), 0);
				}else{
					rectHeight = round((val_arr[i - 1][firsti] / val_max)* (paintHeight), 0);
				}
				//gradual为1就渐变
				if(gradual.equalsIgnoreCase("1")){
					paintRect(g, leftmargin+leftVerge+addlefttitleVerge+  20+(i-1) * colInterval+firsti*rectWidth - rectWidth / 2, (topVerge+addtoptitleVerge+ paintHeight - rectHeight), rectWidth, rectHeight+ rectFootLenght,fillRectColor[firsti]);
				}else{
					g.setColor(fillRectColor[firsti]);
					g.fillRect(leftmargin+leftVerge+addlefttitleVerge+  20+(i-1) * colInterval+firsti*rectWidth - rectWidth / 2, (topVerge+addtoptitleVerge+ paintHeight - rectHeight), rectWidth, rectHeight+ rectFootLenght);
				}
			}
		}
	}else{
		for(int firsti=0;firsti<pillarnum;firsti++){
			int[] x=new int[colCount];
			int[] y=new int[colCount];
			for(int i=1;i<colCount+1;i++){
				if (bCalc){
					rectHeight = round((val_arr[i - 1][firsti] / val_max)* (paintHeight - topVerge), 0);
				}else{
					rectHeight = round((val_arr[i - 1][firsti] / val_max)* (paintHeight), 0);
				}
				x[i-1]=leftmargin+leftVerge+addlefttitleVerge+  20+(i-1) * colInterval+firsti*rectWidth+5- rectWidth / 2;
				y[i-1]=(topVerge+addtoptitleVerge+ paintHeight - rectHeight);
				g.setColor(fillRectColor[firsti]);
				g.drawOval(x[i-1]-3, y[i-1]-3, 6, 6);
				g.fillOval(x[i-1]-3, y[i-1]-3, 6, 6);
			}
			g.setColor(fillRectColor[firsti]);
			g.drawPolyline(x, y, colCount);
		}
	}
			for (int i = 1; i < colCount + 1; i++) {
				double d=0;
				for(int firsti=0;firsti<pillarnum;firsti++){
					if(val_arr[i-1][firsti]!=d){
						// 加柱头数据
						g.setFont(rectHeadFont);
						g.setColor(rectHeadFontColor[firsti]);
						offset = String.valueOf(val_arr[i - 1][firsti]).length() / 2;
						if (offset > 2){
							offset += 2;
						}
						offset += rectWidth / 2;
						rectHeight = round((val_arr[i - 1][firsti] / val_max)* (paintHeight - topVerge), 0);
						g.drawString(fmtOutStr(val_arr[i - 1][firsti]), leftmargin+leftVerge+addlefttitleVerge+20+ (i-1) * colInterval+firsti*rectWidth- offset,(topVerge+addtoptitleVerge + paintHeight - rectHeight - rectHeadFontOffset));
						d=val_arr[i-1][firsti];
					}
				}
			}
		
	}
	//打印渐变矩形
	 public void paintRect(Graphics g,float x, float y,  int width, int height,Color color) {
		 /*
		 	int r=color.getRed();
			int gr=color.getGreen();
			int b=color.getBlue();
			int minusoffset=30;
			int addoffset=10;
			Color color1=new Color(RGBscope(r-minusoffset),RGBscope(gr-minusoffset),RGBscope(b-minusoffset));
			Color color2=new Color(RGBscope(r+addoffset),RGBscope(gr+addoffset),RGBscope(b+addoffset));
		*/
			Graphics2D g2D = (Graphics2D) g;
			Point2D.Float p1 = new Point2D.Float(x, y);
			Point2D.Float p2 = new Point2D.Float(x,y+height);
			   
			GradientPaint g1 = new GradientPaint(p1, color, p2, Color.decode("#FFFFFF"),false);
			Rectangle2D.Float rect1 = new Rectangle2D.Float(x,y,width,height);
			g2D.setPaint(g1);
			g2D.fill(rect1);
}
	 public int RGBscope(int value){
		 if(value<0){
			 value=0;
		 }else if(value>255){
			 value=255;
		 }else{
			 
		 }
		 return value;
	 }
	public void printBottom(Graphics g) {
		
		// 打印底标题
		int bottomTitleLeftStart = canvasWidth / 2 - bottomTitle.length()* bottomTitleFont.getSize() / 2;
		g.setColor(bottomTitleColor);
		g.setFont(bottomTitleFont);
		g.drawString(bottomTitle, bottomTitleLeftStart + 10, canvasHeight-(addbottomtitleVerge+bottommargin)/2+5);
		
/*
		// 打印底标题的图形
		int bottomTitleLeftStart = canvasWidth / 2 - bottomTitle.length()
				* bottomTitleFont.getSize() / 2;
		g.setColor(fillRectColor);
		// g.fillRect(bottomTitleLeftStart-6, canvasHeight -
		// bottomTitleStart - rectWidth+4,
		// rectWidth+bottomTitleFont.getSize()*bottomTitle.length(),
		// rectWidth);
		g.fillRect(bottomTitleLeftStart - 6, canvasHeight
				- bottomTitleStart - rectWidth + 4, rectWidth - 2,
				rectWidth - 2);
*/
	}
	// 重新计算定位数据
	public void calculateScaleParameters() {
		// 解析数据
		// System.out.println("fdsafd"+dataList);
		hb = parseData();
		int data_len = toInt(hb.get("data_len"));
		leftlength=hb.get("val_max").toString().trim().length()-2;
		// 设置行列默认大小
		if (colCount < 2){
			colCount = 10;
		}
		if (rowCount < 2){
			rowCount = 31;
		}
		if (data_len < colCount){
			colCount = data_len;
		}
		
		//根据传进来字数的长度来动态调整bottomVerge
		String[] s=(String[]) hb.get("col_arr");
		int templength=0;
		for(int i=0;i<s.length;i++){
			if(templength<s[i].length()){
				templength=s[i].length();
			}
		}
		setBottomlength(templength);
		//每个汉字高度13
		bottomVerge=bottomlength*13;
		if(getBottomTitle().equals("")){
			addbottomtitleVerge=0;
		}else{
			//底部标题高度20
			addbottomtitleVerge=20;
		}
		//每个数字宽度为6
		leftVerge=leftlength*6;
		if(!getLeftTitle().equals("")){
			//左边字体宽度20+字体偏移量<=addlefttitleVerge
			addlefttitleVerge=24;
		}
		if(!getTopTitle().equals("")){
			//如果有上标题生加20的高度
			addtoptitleVerge=20;
		}
		if(pillarnum>1){
			rightVerge=10;
			addrighttitleVerge=rightlength*20;
		}
		canvasWidth = colCount * colInterval + leftmargin+leftVerge +addlefttitleVerge+ addrighttitleVerge+rightVerge+20;
		canvasHeight = rowCount * rowInterval + bottommargin+topVerge+addtoptitleVerge + bottomVerge+addbottomtitleVerge+20;

		paintWidth = canvasWidth - leftVerge-leftmargin -addlefttitleVerge- rightVerge-addrighttitleVerge;
		paintHeight = canvasHeight - topVerge-addtoptitleVerge-addbottomtitleVerge-bottommargin - bottomVerge;

		// System.err.print(paintWidth+" "+paintHeight);
		// 定义传入参数有误的可能
		if (paintHeight < 20 || paintWidth < 20)
			bPaint = false;

		// 放大比率控制:暂时没有用
		if (zoomInRate < 100)
			zoomInRate = 100;
		// colInterval = (paintWidth - rightMargin) / colCount;
		// rowInterval = (paintHeight - topMargin) / rowCount;

		// 如果柱宽大于等于行间隔,自动调整到其80%
		if (rectWidth >= colInterval)
			rectWidth = colInterval * 4 / 5;

		// 柱宽最少2px
		if (rectWidth < 2)
			rectWidth = 2;
		
		//参数输入错误的时候固定大小
		if(!bPaint){
			canvasWidth=300;
			canvasHeight=100;
		}
	}

	public Hashtable parseData() {
		// String data =
		// "'第部分',121330.22,'2',92333.84,'3',31110.4677,'4',72950,'5',19620,'6',11000,'7',38300,'8',57870,'9',34720,'10',0,'11',66810,'12',76030,'13',67190,'14',66950,'15',34370,'16',25400,'17',0,'18',44780,'19',108820,'20',53830,'21',57730,'22',134190,'23',6000,'24',0,'25',55600,'26',67620,'27',11030,'28',81370,'29',16850,'30',159650,'31',7000,'32',2000,'33',6000,'34',12300";
		String data = "1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0";
		if (dataList != null && !dataList.trim().equals("")){
			data = dataList;
		}else{
			bPaint=false;
		}
		return parseData(data);
	}
	public Hashtable parseData(String data) {
		if (data == null || data.length() < 2){
			return null;
		}
		String[] arr_col = null;
		double[][] arr_dbl = null;
		String[] arr = replace(data, "'", "").split(",");
		int len = 0;
		if (arr != null){
			len = arr.length;
		}else{
			return null;
		}
		double max = 0.0d;
		Hashtable hb = new Hashtable(200);
		arr_col = new String[len / (pillarnum+1)];
		arr_dbl = new double[len / (pillarnum+1)][pillarnum];
		hb.put("data_len", String.valueOf(len / (pillarnum+1)));
		for (int i = 0; i < len; i++) {
			if (arr[i] == null || arr[i].trim().equals("")){
				arr[i] = "0";
			}
			if ((i % (pillarnum+1)) != 0  ){
				if(max < Double.valueOf(arr[i]).doubleValue()){
					max = Double.valueOf(arr[i]).doubleValue();
				}
			}
			if ((i % (pillarnum+1)) == 0){
				arr_col[i / (pillarnum+1)]=arr[i];
			}else{
				if((i % (pillarnum+1)) == 1){
					for(int ii=0;ii<pillarnum;ii++){
						arr_dbl[i / (pillarnum+1)][ii] = Double.valueOf(arr[i+ii]).doubleValue();
					}
				}
			}
		}
		if (max < 10) {
			max = 10;
		}
		hb.put("col_arr", arr_col);
		hb.put("val_arr", arr_dbl);
		hb.put("val_max", String.valueOf(max));

		return hb;
	}
	
	public void drawString(Graphics g, String msg, int x, int y, int offset) {
		if (g == null)
			return;
		if (x < 0 || y < 0)
			return;
		if (msg == null || msg.trim().equals(""))
			return;
		int len = msg.length();
		if (toInt(msg) > 0) {
			g.drawString(msg, x, y);
			return;
		}
		for (int i = 0; i < len; i++) {
			g.drawString(msg.substring(i, i + 1), x, y + i * offset);
		}

	}
	public String getFileName(String file) {
		String szRtn = ".";
		if (file == null || file.trim().equals(""))
			return File.separator + System.currentTimeMillis() + ".jpg";

		szRtn = file.trim();
		File f = new File(szRtn);
		String path = f.getParent();
		String name = f.getName();
		int iPos = name.lastIndexOf(".");
		if (iPos < 0)
			name += ".jpg";
		else
			name = name.substring(0, iPos) + ".jpg";
		f = new File(path);
		if (!f.exists() || !f.isDirectory())
			System.err.println("create dir ok! " + f.mkdirs());
		szRtn = path + File.separator + name;
		return szRtn;
	}
	public void paintToPic(String file) // 生成文件
	{
		fileName = getFileName(file);
		System.err.println(fileName);

		// 计算刻度数据
		calculateScaleParameters();

		// 定义一个画图空间
		BufferedImage bi = new BufferedImage(canvasWidth, canvasHeight,
				BufferedImage.TYPE_INT_BGR);

		// 输出内容到画图空间
		paint(bi);

		try {
			FileOutputStream out = new FileOutputStream(fileName);
			JPEGImageEncoder en = JPEGCodec.createJPEGEncoder(out);
			en.encode(bi);
			if (out != null) {
				out.close();
				out = null;
			}
		} catch (Exception e) {
			System.err.println("Create pic err:" + e);
		}
	}
	public void paintToStream(HttpServletResponse response) // 放入内存
	{
		// 计算刻度数据
		calculateScaleParameters();

		// 定义一个画图空间
		BufferedImage bi = new BufferedImage(canvasWidth, canvasHeight,
				BufferedImage.TYPE_INT_BGR);

		// 输出内容到画图空间
		paint(bi);
		/*
		 * response.setContentType("image/jpeg");
		 * response.addHeader("pragma","NO-cache");
		 * response.addHeader("Cache-Control","no-cache");
		 * response.addDateHeader("Expries",0);
		 */
		ServletOutputStream out = null;
		try {
			out = response.getOutputStream();
			JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
			encoder.encode(bi);
			if (false && out != null) {
				out.close();
				out = null;
			}

		} catch (Exception e) {
			System.err.println("Create pic err:" + e);
		}
	}
	/**
	 * 控制左对齐和右对齐的核心方法,其中w是控制的参数
	 * */
	public String fmtNum(String src, int w, char ch) {
		StringBuffer sb = new StringBuffer();
		if (src == null || w < 0)
			return src;
		if (w <= src.length())
			return src;
		int len = w - src.length();
		for (int i = 0; i < len; i++)
			sb.append(ch);
		sb.append(src);
		return sb.toString();
	}
	public String fmtOutStr(double num) {
		return fmtNumStr(roundDbl(num, -2));
	}
	public String fmtNumStr(String str) {
		if (str == null || str.trim().equals(""))
			return str;
		int iPos = str.lastIndexOf(".");
		if (iPos < 0)
			return str;
		String head = str.substring(0, iPos);
		String tail = str.substring(iPos + 1);
		iPos = tail.length();
		while (head.startsWith("0"))
			head = head.substring(1);
		while (tail.endsWith("0"))
			tail = tail.substring(0, tail.length() - 1);

		if (tail.length() == iPos)
			return str;
		else if (tail.length() > 0)
			return head + "." + tail;
		else
			return head;
	}
	public int round(double num, int w) {
		if (num < 0.000001d || w < 1)
			return (int) Math.round(num);
		String szDbl = String.valueOf(num);
		int iPos = szDbl.indexOf(".");
		String szRate = "1";
		for (int i = 0; i < w; i++)
			szRate += "0";
		int tmp = (int) Math.round(num);
		int rate = Integer.valueOf(szRate).intValue();

		if (iPos > 0) {
			if (iPos <= w)
				return tmp;
			szDbl = szDbl.substring(iPos + 1);
			if (0 < Integer.valueOf(szDbl).intValue())
				return (int) (tmp / rate * rate + rate);
		}

		if (0 < (tmp % rate))
			return (int) (tmp / rate * rate + rate);
		return tmp;
	}
	public String buildFileName(String path) {
		String dir = ".";
		if (path != null || !path.trim().equals(""))
			dir = path.trim();

		File f = new File(dir);
		if (f.isFile() || !f.exists())
			System.err.println("create dir:" + f.mkdirs());
		dir = f.getAbsolutePath() + File.separator + System.currentTimeMillis()
				+ ".jpg";
		return dir;
	}
	public double toDbl(Object obj) {
		if (obj == null || obj.toString().trim().equals(""))
			return 0.0d;

		try {
			return Double.parseDouble(obj.toString().trim());
		} catch (Exception ex) {
			return 0;
		}
	}
	public int toInt(Object obj) {
		if (obj == null || obj.toString().trim().equals(""))
			return 0;

		try {
			return Integer.parseInt(obj.toString().trim());
		} catch (Exception ex) {
			return 0;
		}
	}
	public String roundDbl(double num, int w) {
		if(Double.valueOf(num).toString().contains("E")){
			return Double.valueOf(num).intValue()+"";
		}
		int width = 0;
		if (w > 0)
			return String.valueOf(round(num, w));

		width = Math.abs(w);
		String szDbl = String.valueOf(num);
		int iPos = szDbl.indexOf(".");
		if (width >= iPos)
			width = 2;
		if (iPos < 0) {
			szDbl += ".";
			for (int i = 0; i < width; i++)
				szDbl += "0";
			return szDbl;
		} else {
			int len = szDbl.length();
			if (width < (len - iPos - 1)) {
				iPos = iPos + 1 + width; // 整数位+小数点+小数位
				double d1 = Double.valueOf(szDbl.substring(0, iPos))
						.doubleValue();
				int k = Integer.valueOf(szDbl.substring(iPos, iPos + 1))
						.intValue();
				if (k < 5)
					return String.valueOf(d1);
				else {
					String szTmp = "1";
					for (int i = 0; i < width; i++)
						szTmp += "0";
					// System.err.println("width="+width+" szTmp="+szTmp);
					int tmp = Integer.valueOf(szTmp).intValue();
					d1 = (d1 * tmp + 1) / tmp;
					szDbl = String.valueOf(d1);
				}
			}

			iPos = szDbl.indexOf(".");
			len = szDbl.length();
			if (width >= (len - iPos - 1)) {
				width = width - (len - iPos - 1);
				for (int i = 0; i < width; i++)
					szDbl += "0";
			}
			return szDbl;
		}
	}

	public String replace(String szSrc, String szOld, String szNew) {
		try {
			if (szSrc == null || szSrc.trim().equals(""))
				return "";

			String szTmp = szSrc.trim();
			int iOldLen = szOld.length();
			int iSrcLen = szSrc.length();
			int iStart = 0;
			int iPos = -1;
			StringBuffer sb = new StringBuffer(iSrcLen + iOldLen * 6);

			if (szNew == null) {
				return szTmp;
			}
			if (szOld == null || szOld.equals("")) {
				return szTmp;
			}

			if ((iPos = szTmp.indexOf(szOld)) == -1) // 提前退出
			{
				return szTmp;
			}

			while ((iPos = szTmp.indexOf(szOld, iStart)) > -1) {
				sb.append(szTmp.substring(iStart, iPos));
				sb.append(szNew);
				iStart = iPos + iOldLen;
			}

			if (iStart < iSrcLen) {
				sb.append(szTmp.substring(iStart));
			}

			return sb.toString();
		} catch (Exception ex) {
			return "";
		}
	}
	/**
	 * 转码(指定字符集)
	 * 
	 * @param str
	 *            String
	 * @return String
	 */
	public String toGBKStr(String str) {
		try {
			String strTmp = "";
			if ((str == null) || str.trim().equals("")) {
				return "";
			} else {
				strTmp = str.trim();
			}
			
			
			
			byte[] bytes = strTmp.getBytes("GBK");// ISO8859_1
			return (new String(bytes, "GBK"));
		} catch (Exception e) {
			return "";
		}
	}
	
	
	
	
	public String getFileName() {
		return fileName;
	}
	public void setFileName(String fileName) {
		this.fileName = fileName;
	}
	public String getTopTitle() {
		return topTitle;
	}
	public void setTopTitle(String topTitle) {
		this.topTitle = topTitle;
	}
	public Color getTopTitleColor() {
		return topTitleColor;
	}
	public void setTopTitleColor(Color topTitleColor) {
		this.topTitleColor = topTitleColor;
	}
	public Font getTopTitleFont() {
		return topTitleFont;
	}
	public void setTopTitleFont(Font topTitleFont) {
		this.topTitleFont = topTitleFont;
	}
	public int getTopTitleStart() {
		return topTitleStart;
	}
	public void setTopTitleStart(int topTitleStart) {
		this.topTitleStart = topTitleStart;
	}
	public String getLeftTitle() {
		return leftTitle;
	}
	public void setLeftTitle(String leftTitle) {
		this.leftTitle = leftTitle;
	}
	public Color getLeftTitleColor() {
		return leftTitleColor;
	}
	public void setLeftTitleColor(Color leftTitleColor) {
		this.leftTitleColor = leftTitleColor;
	}
	public Font getLeftTitleFont() {
		return leftTitleFont;
	}
	public void setLeftTitleFont(Font leftTitleFont) {
		this.leftTitleFont = leftTitleFont;
	}
	public int getLeftTitleStart() {
		return leftTitleStart;
	}
	public void setLeftTitleStart(int leftTitleStart) {
		this.leftTitleStart = leftTitleStart;
	}
	public String getBottomTitle() {
		return bottomTitle;
	}
	public void setBottomTitle(String bottomTitle) {
		this.bottomTitle = bottomTitle;
	}
	public Color getBottomTitleColor() {
		return bottomTitleColor;
	}
	public void setBottomTitleColor(Color bottomTitleColor) {
		this.bottomTitleColor = bottomTitleColor;
	}
	public Font getBottomTitleFont() {
		return bottomTitleFont;
	}
	public void setBottomTitleFont(Font bottomTitleFont) {
		this.bottomTitleFont = bottomTitleFont;
	}
	public int getBottomTitleStart() {
		return bottomTitleStart;
	}
	public void setBottomTitleStart(int bottomTitleStart) {
		this.bottomTitleStart = bottomTitleStart;
	}
	public int getBottomlength() {
		return bottomlength;
	}
	public void setBottomlength(int bottomlength) {
		this.bottomlength = bottomlength;
	}
	public Font getDrawLineFont() {
		return drawLineFont;
	}
	public void setDrawLineFont(Font drawLineFont) {
		this.drawLineFont = drawLineFont;
	}
	public Font getRectHeadFont() {
		return rectHeadFont;
	}
	public void setRectHeadFont(Font rectHeadFont) {
		this.rectHeadFont = rectHeadFont;
	}
	public Font getRowScaleFont() {
		return rowScaleFont;
	}
	public void setRowScaleFont(Font rowScaleFont) {
		this.rowScaleFont = rowScaleFont;
	}
	public Font getColScaleFont() {
		return colScaleFont;
	}
	public void setColScaleFont(Font colScaleFont) {
		this.colScaleFont = colScaleFont;
	}
	public Color getDrawLineFontColor() {
		return drawLineFontColor;
	}
	public void setDrawLineFontColor(Color drawLineFontColor) {
		this.drawLineFontColor = drawLineFontColor;
	}
	public Color[] getRectHeadFontColor() {
		return rectHeadFontColor;
	}
	public void setRectHeadFontColor(String rectHeadFontColor) {
		if(!rectHeadFontColor.equals("")){
			String[] s=rectHeadFontColor.split(",");
			for(int i=0;i<s.length;i++){
				if(s[i].indexOf("#")==-1){
					s[i]="#"+s[i];
				}
				this.rectHeadFontColor[i] =Color.decode(s[i]);
			}
		}
	}
	public Color getRowScaleFontColor() {
		return rowScaleFontColor;
	}
	public void setRowScaleFontColor(Color rowScaleFontColor) {
		this.rowScaleFontColor = rowScaleFontColor;
	}
	public Color getColScaleFontColor() {
		return colScaleFontColor;
	}
	public void setColScaleFontColor(Color colScaleFontColor) {
		this.colScaleFontColor = colScaleFontColor;
	}
	public Color[] getFillRectColor() {
		return fillRectColor;
	}
	public void setFillRectColor(String fillRectColor) {
		if(!fillRectColor.equals("")){
			String[] s=fillRectColor.split(",");
			for(int i=0;i<s.length;i++){
				if(s[i].indexOf("#")==-1){
					s[i]="#"+s[i];
				}
				this.fillRectColor[i] =Color.decode(s[i]);
			}
		}
	}
	public Color getFrameRectColor() {
		return frameRectColor;
	}
	public void setFrameRectColor(Color frameRectColor) {
		this.frameRectColor = frameRectColor;
	}
	public Color getCanvasBackgroundColor() {
		return canvasBackgroundColor;
	}
	public void setCanvasBackgroundColor(Color canvasBackgroundColor) {
		this.canvasBackgroundColor = canvasBackgroundColor;
	}
	public Hashtable getHb() {
		return hb;
	}
	public void setHb(Hashtable hb) {
		this.hb = hb;
	}
	public String getDataList() {
		return dataList;
	}
	public void setDataList(String dataList) {
		this.dataList = dataList;
	}
	public boolean isBPaint() {
		return bPaint;
	}
	public void setBPaint(boolean paint) {
		bPaint = paint;
	}
	public int getCanvasWidth() {
		return canvasWidth;
	}
	public void setCanvasWidth(int canvasWidth) {
		this.canvasWidth = canvasWidth;
	}
	public int getCanvasHeight() {
		return canvasHeight;
	}
	public void setCanvasHeight(int canvasHeight) {
		this.canvasHeight = canvasHeight;
	}
	public int getRowCount() {
		return rowCount;
	}
	public void setRowCount(int rowCount) {
		this.rowCount = rowCount;
	}
	public int getColCount() {
		return colCount;
	}
	public void setColCount(int colCount) {
		this.colCount = colCount;
	}
	public int getTopVerge() {
		return topVerge;
	}
	public void setTopVerge(int topVerge) {
		this.topVerge = topVerge;
	}
	public int getBottomVerge() {
		return bottomVerge;
	}
	public void setBottomVerge(int bottomVerge) {
		this.bottomVerge = bottomVerge;
	}
	public int getLeftVerge() {
		return leftVerge;
	}
	public void setLeftVerge(int leftVerge) {
		this.leftVerge = leftVerge;
	}
	public int getRightVerge() {
		return rightVerge;
	}
	public void setRightVerge(int rightVerge) {
		this.rightVerge = rightVerge;
	}
	public int getRectFootLenght() {
		return rectFootLenght;
	}
	public void setRectFootLenght(int rectFootLenght) {
		this.rectFootLenght = rectFootLenght;
	}
	public int getRectHeadFontOffset() {
		return rectHeadFontOffset;
	}
	public void setRectHeadFontOffset(int rectHeadFontOffset) {
		this.rectHeadFontOffset = rectHeadFontOffset;
	}
	public int getDrawLineInterval() {
		return drawLineInterval;
	}
	public void setDrawLineInterval(int drawLineInterval) {
		this.drawLineInterval = drawLineInterval;
	}
	public int getZoomInRate() {
		return zoomInRate;
	}
	public void setZoomInRate(int zoomInRate) {
		this.zoomInRate = zoomInRate;
	}
	public int getRectWidth() {
		return rectWidth;
	}
	public void setRectWidth(int rectWidth) {
		this.rectWidth = rectWidth;
	}
	
	public int getPaintWidth() {
		return paintWidth;
	}
	public void setPaintWidth(int paintWidth) {
		this.paintWidth = paintWidth;
	}
	public int getPaintHeight() {
		return paintHeight;
	}
	public void setPaintHeight(int paintHeight) {
		this.paintHeight = paintHeight;
	}
	public int getColInterval() {
		return colInterval;
	}
	public void setColInterval(int colInterval) {
		this.colInterval = colInterval;
	}
	public int getRowInterval() {
		return rowInterval;
	}
	public void setRowInterval(int rowInterval) {
		this.rowInterval = rowInterval;
	}
	public String[] getPillarInfo() {
		return PillarInfo;
	}
	public void setPillarInfo(String pillarInfo) {
		if(!pillarInfo.equals("")){
			String[] s=pillarInfo.split(",");
			for(int i=0;i<s.length;i++){
				PillarInfo[i] = s[i];
				if(this.rightlength<s[i].length()){
					this.rightlength=s[i].length();
				}
			}
		}
	}
	public String getPillarNum() {
		return PillarNum;
	}
	public void setPillarNum(String pillarNum) {
		PillarNum = pillarNum;
	}
	public int getPillarnum() {
		return pillarnum;
	}
	public void setPillarnum(int pillarnum) {
		this.pillarnum = pillarnum;
	}
	public int getLeftlength() {
		return leftlength;
	}
	public void setLeftlength(int leftlength) {
		this.leftlength = leftlength;
	}
	public int getAddtoptitleVerge() {
		return addtoptitleVerge;
	}
	public void setAddtoptitleVerge(int addtoptitleVerge) {
		this.addtoptitleVerge = addtoptitleVerge;
	}
	public int getAddbottomtitleVerge() {
		return addbottomtitleVerge;
	}
	public void setAddbottomtitleVerge(int addbottomtitleVerge) {
		this.addbottomtitleVerge = addbottomtitleVerge;
	}
	public int getAddlefttitleVerge() {
		return addlefttitleVerge;
	}
	public void setAddlefttitleVerge(int addlefttitleVerge) {
		this.addlefttitleVerge = addlefttitleVerge;
	}
	public int getLeftmargin() {
		return leftmargin;
	}
	public void setLeftmargin(int leftmargin) {
		this.leftmargin = leftmargin;
	}
	public int getBottommargin() {
		return bottommargin;
	}
	public void setBottommargin(int bottommargin) {
		this.bottommargin = bottommargin;
	}
	public void setRectHeadFontColor(Color[] rectHeadFontColor) {
		this.rectHeadFontColor = rectHeadFontColor;
	}
	public void setFillRectColor(Color[] fillRectColor) {
		this.fillRectColor = fillRectColor;
	}
	
	public String getGradual() {
		return gradual;
	}
	public void setGradual(String gradual) {
		this.gradual = gradual;
	}
	public String getPillarflag() {
		return pillarflag;
	}
	public void setPillarflag(String pillarflag) {
		this.pillarflag = pillarflag;
	}
	public Test() {
		super();
	}
	public Test(String PillarNum) {
		super();
		if(PillarNum.equals("")){
			PillarNum="1";
		}
		this.PillarNum=PillarNum;//得出柱子数量
		this.pillarnum=Integer.valueOf(PillarNum);
		this.colInterval=pillarnum*20;//根据柱子数量得间隔
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(Color.blue);
		Color c=new Color(-16776961);
		System.out.println(c);
	}
	
	

}



<%@ page language="java"%>
<%@ page contentType="text/html;charset=gbk"%>
<%@page import="Test"%>
<%@page import="java.awt.Color" %>
<title>Test Create Pic</title>
 
<HTML>
 <HEAD>  
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
 </HEAD>
 <body>
<%
		String strChartData=request.getParameter("chartData");
		String Pillarflag="1";//是否是柱形图1是
		//String strCoordColor="#99cc00,#0000FF,#FF0000,#FF99cc,#800000,#cc99FF,#000080,#808000";//柱体颜色
		String strCoordColor="";//柱体颜色
		//String RectHeadFontColor="#99cc00,#0000FF,#FF0000,#FF99cc,#800000,#cc99FF,#000080,#808000";//柱体字体颜色
		String RectHeadFontColor="";//柱体字体颜色
		String PillarNum="1";//柱子数量
		String PillarInfo="";//柱子说明
		String Gradual="1";//是否渐变
		String TopTitle="";
		String BottomTitle="";
		String LeftTitle=""; 
		
		
		if (request.getParameter("CoordColor")!=null)
		{
			strCoordColor=request.getParameter("CoordColor");
		}
		if (request.getParameter("Gradual")!=null)
		{
			Gradual=request.getParameter("Gradual");
		}
		if (request.getParameter("Pillarflag")!=null)
		{
			Pillarflag=request.getParameter("Pillarflag");
		}
		if (request.getParameter("RectHeadFontColor")!=null)
		{
			RectHeadFontColor=request.getParameter("RectHeadFontColor");
		}
		if (request.getParameter("PillarInfo")!=null)
		{
			PillarInfo=request.getParameter("PillarInfo");
		}
		if (request.getParameter("PillarNum")!=null)
		{
			PillarNum=request.getParameter("PillarNum");
		}
		if (request.getParameter("TopTitle")!=null)
		{
			TopTitle=request.getParameter("TopTitle");
		}
		if (request.getParameter("BottomTitle")!=null)
		{
			BottomTitle=request.getParameter("BottomTitle");
		}
		if (request.getParameter("LeftTitle")!=null)
		{
			LeftTitle=request.getParameter("LeftTitle");
		}
		out.clear();
		//77CC50
		//String list = "'销售十一部',31330.22,'销售十一部',22333.84,'销售十一部',131110.4677,'销售十一部',72950,'销售十一部',19620,'6',11000,'7',38300,'8',57870,'9',34720,'10',0,'11',66810";
		//String list = "'销售十一部',31330.22,30000.11,'销售十一部',22333.84,20000.22,'销售十一部',131110.4677,130000.33,'销售十一部',72950,78000,'销售十一部',19620,15000,'6',11000,11000,'7',38300,40000,'8',57870,56000,'9',34720,34720,'10',0,1,'11',66810,66000";
	   //String list = "'销售十一部',31330.22,30000.11,30000.11,'销售十一部',22333.84,20000.22,30000.11,'销售十一部',131110.4677,130000.33,30000.11,'销售十一部',72950,78000,30000.11,'销售十一部',19620,15000,30000.11,'6',11000,11000,30000.11,'7',38300,40000,30000.11,'8',57870,56000,30000.11,'9',34720,34720,30000.11,'10',0,1,30000.11,'11',66810,66000,30000.11,";
		
		Test bp = new Test(PillarNum);
		bp.setPillarflag(Pillarflag);
		//bp.setDataList(list);
		bp.setDataList(strChartData);
		//bp.setTopTitle("本月销售业绩");
		//bp.setBottomTitle("日期");
		bp.setTopTitle(TopTitle);
		bp.setBottomTitle(BottomTitle);
		bp.setLeftTitle(LeftTitle); 
		bp.setFillRectColor(strCoordColor);
		bp.setRectHeadFontColor(RectHeadFontColor);
		bp.setPillarInfo(PillarInfo);
		bp.setGradual(Gradual);
		bp.paintToStream(response);
		//bp.paintToPic(null);
%>
 </body>
</HTML>
<%
		out.clear();
%>

你可能感兴趣的:(java,servlet,cache,F#,sun)