WEB应用Excel报表加水印解决方案

2个月前接到了报表加水印的需求后,就开始了痛苦之旅,今天总算是上线成功了,记录一下。

环境 aix 5.3,weblogic10,jdk6

需要的第三方JAR包http://download.csdn.net/download/boywish/2257294,这是一个好人改的jar包,但是在用的时候会出一些问题,无奈没有别的选择了

JAVA调用代码:

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.font.FontRenderContext;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import javax.imageio.ImageIO;

import jxl.Workbook;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

public class ExcelTool {
	/**
	 * 
	 * @param filepath excel地址
	 * @param slogan  水印内容
	 * @return
	 */
	public static boolean addWaterMark(String filepath,String slogan){
		int width = 800;
		int height = 400;
		
		FileInputStream in = null;
		OutputStream out = null; // 写入到FileOutputStream
		WritableWorkbook wwb = null;
		try {
			byte[] imgDate = getSloganMark(slogan, width, height);
			//获得excel
			System.out.println(filepath);
			in = new FileInputStream(filepath);
			Workbook wb = Workbook.getWorkbook(in);
			out = new FileOutputStream(filepath);
			wwb = Workbook.createWorkbook(out, wb);
			WritableSheet[] sheets = wwb.getSheets();
			for(int i = 0;i 1){	
			System.out.println(args[0]+","+args[1]);
			addWaterMark(args[0],args[1]);
		}
	}
}


 

首先,你要注意,JDK1.4是没法用的,大概原因是缺少图形包的原因,深层原因我没有查出来。其次jxl是不支持excel2007的,会报数组越界的错,就算是另存为.xls后缀也不行。

接着开始替换jxl.jar,这里会出现一个蛋疼的问题,weblogic会不认识新的jxl包,具体原因未知,网上也有很多人在问,怀疑和签名有关。

那么我们就绕过去,使用shell脚本来调用这个工具类,脚本很简单,就一句话:

java -cp /weblogic/bea/user_projects/domains/base_domain/lib/jxl.jar:/weblogic/bea/user_projects/domains/base_domain/lib:. ExcelTool $1 $2

(jdk1.4的话,另外装个JDK6,再加上环境变量,说不定也能跑,我还没试,这是下一步的计划)

把ExcelTool.class和新的jxl.jar放在域lib文件夹下面的,ExcelTool不加包,要不用-cp时又是一大堆错

java中调用shell脚本:

String unixcommand = "sh /weblogic/bea/user_projects/domains/base_domain/autodeploy/hzhb/shell/AddWaterMaker.sh '"+filepath+"' '"+slogan+"'";

 

这样功能就成了,接下来准备查一下为啥weblogic不认识jxl,如果能解决的话又是一件大功德啊

 

 

你可能感兴趣的:(java)