WEB应用Excel报表加水印解决方案
来源:互联网 发布:c语言杨辉三角不用数组 编辑:程序博客网 时间:2024/06/09 14:29
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; // 写入到FileOutputStreamWritableWorkbook wwb = null;try {byte[] imgDate = getSloganMark(slogan, width, height);//获得excelSystem.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<sheets.length;i++){WritableSheet sheet = wwb.getSheet(i); // 得到工作薄中的第i个工作表//将图片设置成背景sheet.setWaterMarkImage(imgDate, width, height);}wwb.write();return true;} catch (Exception e) {// TODO: handle exceptione.printStackTrace();return false;} finally {if(wwb != null){try {wwb.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(out != null){try {out.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(in != null){try {in.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}/** * 生成文字水印内容 * @param slogan * @param width * @param height * @return */private static byte[] getSloganMark( String slogan, int width, int height) {BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);Graphics2D g = (Graphics2D) image.getGraphics();g.fillRect(0, 0, width, height);//背景框Font font = new Font("宋体",Font.BOLD,36);g.setFont(font);//设置字体//计算居中点的坐标FontRenderContext context = g.getFontRenderContext();Rectangle2D bounds = font.getStringBounds(slogan, context);double x = (width-bounds.getWidth())/2;double y = (height-bounds.getHeight())/2;//上画布g.setColor(new Color(135,206,235));//设置字体颜色,天蓝色g.drawString(slogan, (int)x, (int)y);//画上画布g.dispose();//写入文件ByteArrayOutputStream out = new ByteArrayOutputStream();try {ImageIO.write(image,"BMP",out);return out.toByteArray();} catch (IOException e) {e.printStackTrace();return null;} finally{try {if(out != null){out.close();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public static void main(String[] args) {System.out.println("begin..."+args.length);if(args != null && args.length > 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,如果能解决的话又是一件大功德啊
- WEB应用Excel报表加水印解决方案
- jxl创建excel加水印
- excel排版大师:excel文件批量加水印
- java报表EXCEL解决方案
- Web应用导出Excel报表的简单实现(HTML)
- Web应用导出Excel报表的简单实现(HTML)
- Web应用导出Excel报表的简单实现[转]
- Web应用中基于XML的Excel报表设计
- web 水晶报表应用
- 加水印
- 加水印
- Excel生成报表之解决方案--插入图片
- 慕课网 java-web应用 报表
- js应用:使用canvas给图片加水印
- 基于EXCEL的WEB报表输出组件
- 基于EXCEL的WEB报表输出组件
- 基于EXCEL的WEB报表输出组件
- web页面生成excel报表剖析
- 软件程序编码
- 如果我管理qq手机浏览器,如何振兴?
- Servlet 第一个DEMO
- mini2440 LCD驱动
- 【Visual C++】游戏开发笔记三十八 浅墨DirectX提高班之六 携手迈向三维世界:四大变换展身手
- WEB应用Excel报表加水印解决方案
- Bayesian Computation with R (Jim Albert) 学习笔记I
- 从spin_lock到spin_lock_irqsave
- linux下java多文件编译和jar打包
- tomcat中配置ssl
- 如何知道软件(如Lodop)很受欢迎?
- vim使用F5编译C语言程序
- 外观,代理与中介者模式
- Sign in as Different User and SharePoint 2013