easypoi导出excel 2007添加水印—仅支持 XSSFWorkbook
效果图如下:

1、依赖添加
1. <dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-spring-boot-starter</artifactId>
<version>4.2.0</version>
</dependency> <dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<!-- poi 添加水印 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>ooxml-schemas</artifactId>
<version>1.4</version>
</dependency>
2、调用controller
@RequestMapping("/exportsessionrecord")
@Menu(type="apps", subtype="export")
public void exportsessionrecord(ModelMap map , String scope, HttpServletRequest request,
QueryCondition queryCondition, HttpServletResponse response) throws Exception{
String isExcel = queryCondition.getIsExcel();
List<AgentServiceDto> dtoList = statisService.queryAgentServiceList(null, queryCondition,
new PageRequest(0, 9999), super.getOrgiByTenantshare(request));
if("1".equals(isExcel)){
ExportParams params = new ExportParams();
params.setType(ExcelType.XSSF); // HSSF2003版本太老了,不兼容水印
Workbook workbook = ExcelExportUtil.exportExcel(params,
AgentServiceDto.class, dtoList);
final User login = super.getUser(request);
final String userName = login.getUsername();
ExcelWaterMarkUtil.excelWaterMark(workbook,userName,queryCondition,repository);
response.setHeader(
"content-disposition",
"attachment;filename="+ URLEncoder.encode("excel表名称.xlsx","UTF-8"));
workbook.write(response.getOutputStream());
}
}
3、添加文字图片水印工具类 ExcelWaterMarkUtil
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.Raster;
import java.io.*;
import java.lang.reflect.Field;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.imageio.ImageIO;
import com.chatopera.cc.persistence.repository.TraceTopLevelInfoRepository;
import com.chatopera.cc.service.dto.QueryCondition;
import org.apache.poi.hssf.model.InternalSheet;
import org.apache.poi.hssf.record.RecordBase;
import org.apache.poi.hssf.record.StandardRecord;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ooxml.POIXMLDocumentPart;
import org.apache.poi.openxml4j.opc.PackagePartName;
import org.apache.poi.openxml4j.opc.PackageRelationship;
import org.apache.poi.openxml4j.opc.TargetMode;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.util.LittleEndianOutput;
import org.apache.poi.xssf.usermodel.XSSFRelation;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ExcelWaterMarkUtil {
private static ExecutorService executors= Executors.newFixedThreadPool(2);
private final static Logger logger = LoggerFactory.getLogger(ExcelWaterMarkUtil.class);
public static void main(String[] args) {
String filePath = excelWaterMarkForXlsx("C:\\Users\\admin\\Desktop\\1739944118538342400.xlsx","zlf");
String filePath1 = excelWaterMarkForXls("C:\\1234.xls","牛哄哄");
// System.out.println(filePath);
}
public static void excelWaterMark(Workbook workbook, String userName, QueryCondition queryCondition, TraceTopLevelInfoRepository repository){
ByteArrayOutputStream os = null;
try {
//生成水印图片并导出字节流
BufferedImage image = FontImageUtil.createWatermarkImage(new FontImageUtil.Watermark(true,userName, null,null));
os = new ByteArrayOutputStream();
ImageIO.write(image, "png", os);
int pictureIdx = workbook.addPicture(os.toByteArray(), Workbook.PICTURE_TYPE_PNG);
POIXMLDocumentPart poixmlDocumentPart = (POIXMLDocumentPart) workbook.getAllPictures().get(pictureIdx);
//获取每个Sheet表并插入水印
for (int i = 0; i < workbook.getNumberOfSheets(); i++

最低0.47元/天 解锁文章
1137

被折叠的 条评论
为什么被折叠?



