最近做个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