easypoi导出excel 2007添加水印---仅支持 XSSFWorkbook

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++
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值