jxl创建excel加水印(一)

2014-11-23 20:26:48 · 作者: · 浏览: 31

最近做个excel加水印的,在网上找了很多,都是使用jxl添加,但是本地测试一直没有通过,主要原因是因为背景图片不符合要求,后来找了image4j来做成图片,完成了背景图片的添加,需要用到的jxl.jar包image4j.jar,具体代码如下:

package com.file;

import java.awt.AlphaComposite;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import java.util.regex.Pattern;

import jxl.Range;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.VerticalAlignment;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableCell;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

import net.sf.image4j.codec.bmp.BMPEncoder;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;

/**
 * 
 * 
 * @date 2014-5-16
 */
@Component
@SuppressWarnings({ "rawtypes", "unchecked" })
public class ExcelWriter {

	private WritableWorkbook book;

	private static final Logger LOG = Logger.getLogger(ExcelWriter.class);
	private FileInputStream fis = null;
	private File watermarkFileName = null;
	private int width = 480; // 水印图片的宽度
	private int height = 1020; // 水印图片的高度 因为设置其他的高度会有黑线,所以拉高高度

	public void createBook(String excelName, String path) {
		if (book == null) {
			try {
				book = Workbook
						.createWorkbook(new File(path + "\\" + excelName));
				watermarkFileName = new File(System.getProperty("user.dir")
						+ "/" + System.currentTimeMillis() + ".bmp");
			} catch (IOException e) {
				e.printStackTrace();
				LOG.error(e.getMessage(), e);
			}
		}
	}

	public void createBook(File file) {
		if (book == null) {
			try {
				if (file.exists()) {
					Workbook book1 = Workbook.getWorkbook(file);
					book = Workbook.createWorkbook(file, book1);
				} else {
					book = Workbook.createWorkbook(file);
					watermarkFileName = new File(System.getProperty("user.dir")
							+ "/" + System.currentTimeMillis() + ".bmp");
				}
			} catch (IOException e) {
				e.printStackTrace();
				LOG.error(e.getMessage(), e);
			} catch (BiffException e) {
				e.printStackTrace();
			}
		}
	}

	public void createBook(OutputStream os) {
		if (book == null) {
			try {
				book = Workbook.createWorkbook(os);
				watermarkFileName = new File(System.getProperty("user.dir")
						+ "/" + System.currentTimeMillis() + ".bmp");
			} catch (IOException e) {
				e.printStackTrace();
				LOG.error(e.getMessage(), e);
			}
		}
	}

	public void closeBook() {
		try {
			book.write();
			book.close();
			if (fis != null) {
				fis.close();
			}
			// 删除临时的水印文件
			if (watermarkFileName != null && watermarkFileName.exists()) {
				watermarkFileName.delete();
			}
		} catch (Exception e) {
			e.printStackTrace();
			LOG.error(e.getMessage(), e);
		}
	}

	/**
	 * data 
  
* * @param data * @param sheetName */ public void writerSheet(List data, String sheetName, String watermark) { WritableSheet sheet = book.createSheet(sheetName, book.getNumberOfSheets() + 1); Pattern p = Pattern .comp