文件下载公共类

package com.sw.api.utils;import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.xssf.usermodel.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;public class ExportUtil {public void export(HttpServletResponse response) throws IOException {//根据文件流创建XSSFWorkbook对象XSSFWorkbook wb = new XSSFWorkbook();//XSSFSheet sheet = wb.getSheetAt(0);XSSFSheet sheet = wb.createSheet("Sheet1");sheet.setDefaultColumnWidth(16);//设置默认列宽sheet.setDefaultRowHeightInPoints(20);//设置默认行高//设置样式;XSSFCellStyle style = wb.createCellStyle();//设置水平对齐的样式为居中对齐;style.setAlignment(HorizontalAlignment.CENTER);//设置垂直对齐的样式为居中对齐;style.setVerticalAlignment(VerticalAlignment.CENTER);XSSFRow rowRowName = sheet.createRow(0);//设置水印WaterMarkUtil.putWaterMarkToExcel(wb);// 将列头设置到sheet的单元格中String[] rowName =  new String[] {"id", "年龄", "名称"};for(int n=0;n<rowName.length;n++){XSSFCell cellRowName = rowRowName.createCell(n);cellRowName.setCellValue(rowName[n]);cellRowName.setCellStyle(style);}//造数据,dataList可以是数据库查询出来的业务数据,动态传参过来List<Object[]> dataList = new ArrayList<Object[]>();Object[] objs1 = new Object[rowName.length];objs1[0] = "1";objs1[1] = "12";objs1[2] = "张三";dataList.add(objs1);Object[] objs2 = new Object[rowName.length];objs2[0] = "2";objs2[1] = "22";objs2[2] = "李四";dataList.add(objs2);//将查询出的数据设置到sheet对应的单元格中for(int i = 0;i < dataList.size();i++){Object[] obj = dataList.get(i);XSSFRow row = sheet.createRow(i+1);//row.setHeight((short) (25 * 20));for(int j = 0; j < obj.length; j++){Cell cell = null;cell = row.createCell(j);if(!"".equals(obj[j]) && obj[j] != null){cell.setCellValue(obj[j].toString());cell.setCellStyle(style);}}}//输出Excel文件OutputStream output= response.getOutputStream();response.reset();String date = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());String fileName = date + ".xlsx";response.setHeader("Content-Disposition","attachment; filename=" +new String(fileName.getBytes("UTF-8"), "iso-8859-1")+".xlsx");response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");wb.write(output);output.close();}}

添加水印公共类

package com.sw.api.utils;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.*;
import org.apache.poi.xssf.usermodel.XSSFRelation;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.Font;
import java.awt.font.FontRenderContext;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;public class WaterMarkUtil {private static BufferedImage createWaterMark(String[] content) {Integer width = 420;//水印宽度Integer height = 380;//水印高度BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// 获取bufferedImage对象String fontType = "STSongti-SC-Bold";Integer fontStyle = Font.BOLD;Integer fontSize = 35;Font font = new Font(fontType, fontStyle, fontSize);Graphics2D g2d = image.createGraphics(); // 获取Graphics2d对象image = g2d.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);g2d.dispose();g2d = image.createGraphics();g2d.setColor(new java.awt.Color(0, 0, 0, 50));g2d.setStroke(new BasicStroke(1));g2d.setFont(font);g2d.rotate(Math.toRadians(-30),(double) image.getWidth() / 2, (double) image.getHeight() / 2);//设置旋转角度FontRenderContext context = g2d.getFontRenderContext();//找到水印信息中最长的int contentLindex = 0;int contentLength = content[0].length();for (int i = 0; i < content.length; i++) {if (content[i].length()>contentLength) {contentLindex = i;}}Rectangle2D bounds = font.getStringBounds(content[contentLindex], context);double x = (width - bounds.getWidth()) / 2;double y = (height - bounds.getHeight()) / 2;double ascent = -bounds.getY();double baseY = y + ascent;// 写入水印文字原定高度过小,所以累计写水印,增加高度for (int i = 0; i < content.length; i++) {g2d.drawString(content[i], (int)x, (int)baseY);// 画出字符串baseY = baseY + font.getSize();}// 设置透明度g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.1F));g2d.dispose();return image;}public static void putWaterMarkToExcel(XSSFWorkbook workbook) throws IOException {BufferedImage image = createWaterMark(new String[]{"水印名称logo"});ByteArrayOutputStream os = new ByteArrayOutputStream();ImageIO.write(image, "png", os);int pictureIdx = workbook.addPicture(os.toByteArray(), Workbook.PICTURE_TYPE_PNG);POIXMLDocumentPart poixmlDocumentPart = workbook.getAllPictures().get(pictureIdx);XSSFSheet sheet = workbook.getSheetAt(0);PackagePartName ppn = poixmlDocumentPart.getPackagePart().getPartName();String relType = XSSFRelation.IMAGES.getRelation();PackageRelationship pr = sheet.getPackagePart().addRelationship(ppn, TargetMode.INTERNAL, relType, null);sheet.getCTWorksheet().addNewPicture().setId(pr.getId());}}

Java下载excel文件并且添加水印效果相关推荐

  1. java下载xlsx文件_【小坑】java下载excel文件

    excel文件的导入导出是很常见的功能,这次做了个下载的功能,踩了一些坑,记下来避免以后重复踩-- 1.inputstream序列化问题 Could not write JSON document: ...

  2. Java 下载 Excel文件打不开

    public static String downloadFile(HttpServletResponse response, String fileName, String templatePath ...

  3. java下载Excel文件并设置表头内容与下拉框

    干货干货直接上代码 Maven依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>p ...

  4. Java下载Excel文件

    以下的java使用的框架是Jfinal. 1. 创建流和工作薄. ServletOutputStream out = null;HSSFWorkbook workbook =null;try {wor ...

  5. java下载excel文件损坏

    <!-- 避免font文件的二进制文件格式压缩破坏 --><plugin><groupId>org.apache.maven.plugins</groupId ...

  6. 阿里开源(EasyExcel):使用Java将数据导出为Excel表格、带样式----》java web下载 Excel文件

    目录 一.技术选型 二.实现过程 1.导入依赖 2.编写工具类 EasyExcelUtil 3.公用参数类 EasyExcelParams 4.表格样式实体类 MyWriteHandler 5.数据实 ...

  7. 超详细的java生成excel文件并下载

    在网上随手一搜,可以搜到很多java生成excel文件相关的博客,但每个都有不同,核心点说清楚了,但具体运用的时候,相信大家或多或少都没法一次直接运用,这样每次去找并且运用的时候很费时间,所以这也是我 ...

  8. react接收后端文件_React获取Java后台文件流并下载Excel文件流程解析

    记录使用blob对象接收java后台文件流并下载为xlsx格式的详细过程,关键部分代码如下. 首先在java后台中设置response中的参数: public void exportExcel(Htt ...

  9. java文件流下载excel_React获取Java后台文件流下载Excel文件

    记录使用blob对象接收java后台文件流并下载为xlsx格式的详细过程,关键部分代码如下. 首先在java后台中设置response中的参数: public void exportExcel(Htt ...

  10. java使用jxl生成excel表格,jsp使用js下载excel文件xls

    java使用jxl生成excel表格,jsp使用js下载excel文件 后端代码 maven jar包 主体代码逻辑 引入的jar包 具体代码段 重点详解 表头和表格内容两种格式 直接将 HttpSe ...

最新文章

  1. 【每日一学】复杂度分析
  2. 程序员交流平台_Java虚拟机所管理的内存到底有哪些?Java程序员必看栏目(上)...
  3. 计算机里面照片无法打卡,为什么电脑照片打不开_电脑照片打不开的解决方法...
  4. 2!=5 or 0在python中是否正确-Python 中的 or and 运算,看这一篇就够
  5. 根据RTL图编写Verilog程序
  6. CF1237F Balanced Domino Placements(组合计数,dp)
  7. mysql 7天自动拒单功能,mysql查询最近7天的数据,没有数据自动补0
  8. 【ES6(2015)】Set
  9. 如何优化myeclipse.
  10. 获取Button脚本挂载的事件名
  11. 游戏服务器之生成Dump文件
  12. JS学习之表格的排序
  13. [转]Git使用基础篇
  14. [算法题] 安排会议室——贪心算法的应用
  15. Learning Instagram 学习Instagram Lynda课程中文字幕
  16. kindle可以上网但是无法下载_您的Kindle已连接WiFi网络,但无法连接互联网的解决办法...
  17. IDM认证过程日志埋点说明
  18. HTC Desire Z刷recovery刷机教程
  19. 【python】python实现多线程并得到返回值
  20. office安装双击setup后点击‘立即安装’无反应(闪退)

热门文章

  1. 计算机专业英语学术论文框架,计算机专业英语研究学术论文.pdf
  2. 好站推荐-四个在线识别字体网站,从此不在为找字体烦恼
  3. 有长度,有角度,有点积,有人性
  4. python普通人能学吗_普通人可以学Python吗
  5. Linux--Ubuntu的使用
  6. java mail authen,javaxmail发送邮件:用Authenticator的子类进行身份验证及策略模式(Strategy)...
  7. 输入罗马数字1到12输出阿拉伯数字C语言,用C语言古罗马数字转化阿拉伯数字
  8. apesv100数据库_生物信息学相关数据库资源介绍..ppt
  9. MES制造执行系统的四层架构体系
  10. 华为freebuds4i降噪方法分享(教程分享)