<repositories><repository><id>com.e-iceblue</id><url>https://repo.e-iceblue.cn/repository/maven-public/</url></repository></repositories><!--        pdf加水印--><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13</version></dependency><!--办公文件加水印--><dependency><groupId>e-iceblue</groupId><artifactId>spire.office.free</artifactId><version>5.2.0</version></dependency>

1.首先导入依赖

2.创建工具类

3.创建加入水印,(我这里水印是图片)

 public static BufferedImage createWatermarkImage(WaterMarkContent watermark) {if (watermark == null) {watermark = new WaterMarkContent();watermark.setEnable(true);watermark.setText(SecurityUtils.getLoginUser().getUser().getNickName());watermark.setColor("#C5CBCF");watermark.setDateFormat("yyyy-MM-dd HH:mm");}String[] textArray = watermark.getText().split(",");Font font = new Font("microsoft-yahei", Font.PLAIN, 20);Integer width = 300;Integer height = 100;BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// 背景透明 开始Graphics2D g = image.createGraphics();image = g.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.TRANSLUCENT);g.dispose();// 背景透明 结束g = image.createGraphics();// 设定画笔颜色g.setColor(new Color(Integer.parseInt(watermark.getColor().substring(1), 16)));// 设置画笔字体g.setFont(font);// 设定倾斜度g.shear(0.1, -0.26);// 设置字体平滑g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);int y = 50;for (int i = 0; i < textArray.length; i++) {// 画出字符串g.drawString(textArray[i], 0, y);y = y + font.getSize();}// 画出字符串g.drawString(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, new Date()), 0, y);// 释放画笔g.dispose();return image;}

然后就是生成各种文件水印了

/*** excel文件添加水印图片** @param workbook* @param bfi* @param os* @throws Exception*/public static void setWaterMarkToExcel(XSSFWorkbook workbook, BufferedImage bfi, OutputStream os) throws Exception {ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();ImageIO.write(bfi, "png", byteArrayOut);int pictureIdx = workbook.addPicture(byteArrayOut.toByteArray(), Workbook.PICTURE_TYPE_PNG);//add relation from sheet to the picture dataPOIXMLDocumentPart poixmlDocumentPart = workbook.getAllPictures().get(pictureIdx);for (int i = 0; i < workbook.getNumberOfSheets(); i++) {XSSFSheet xssfSheet = workbook.getSheetAt(i);PackagePartName ppn = poixmlDocumentPart.getPackagePart().getPartName();String relType = XSSFRelation.IMAGES.getRelation();PackageRelationship pr = xssfSheet.getPackagePart().addRelationship(ppn, TargetMode.INTERNAL, relType, null);xssfSheet.getCTWorksheet().addNewPicture().setId(pr.getId());}workbook.write(os);}
/*** word文档设置水印图片** @param filePath 文件路径* @param bfi      bfi* @throws IOException ioexception*/public static String setWaterMarkToWord(String filePath, BufferedImage bfi) throws IOException {ByteArrayOutputStream out = new ByteArrayOutputStream();ImageIO.write(bfi, "png", out);Document document = new Document();document.loadFromFile(filePath);PictureWatermark picture = new PictureWatermark();InputStream input = new ByteArrayInputStream(out.toByteArray());//设置图片picture.setPicture(input);//设置图片大小picture.setScaling(SIZE);//是否冲刷,true->图片色彩变淡,false->原色彩picture.isWashout(true);//保存文档document.setWatermark(picture);String downLoadPath = filePath.substring(0, filePath.lastIndexOf("/") + 1) + System.currentTimeMillis() + "_" + StrUtil.subAfter(filePath, "/", true);document.saveToFile(downLoadPath, FileFormat.Docx);return downLoadPath;}/***   pdf加水印图片** @param filePath 文件路径* @param bfi      bfi* @return {@link String}* @throws IOException       ioexception* @throws DocumentException 文件异常*/public static String setWaterMarkToPdf(String filePath, BufferedImage bfi) throws IOException, DocumentException {PdfReader reader=new PdfReader(filePath);//保存路径String downloadPath = filePath.substring(0, filePath.lastIndexOf("/") + 1) +System.currentTimeMillis() + "_" + StrUtil.subAfter(filePath, "/", true);PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(downloadPath));ByteArrayOutputStream out = new ByteArrayOutputStream();ImageIO.write(bfi, "png", out);//将图片放入pdf中com.itextpdf.text.Image image= com.itextpdf.text.Image.getInstance(out.toByteArray());//获取pdf页数int num = reader.getNumberOfPages();com.itextpdf.text.Rectangle pageSize;float width = 0f;float height = 0f;int x = 0;for (int i = 1; i < num; i++) {//得到页面大小x++;if (x == 1) {pageSize=reader.getPageSize(i);width=pageSize.getWidth();height=pageSize.getHeight();}//水印图片设置在内容之上,之下用getUnderContentPdfContentByte pdfContentByte = stamper.getOverContent(i);//设置图片的位置,参数Image.UNDERLYING是作为文字的背景显示。image.setAlignment(com.itextpdf.text.Image.UNDEFINED);//设置图片的绝对位置image.setAbsolutePosition((width - image.getWidth()) / 2,(height -image.getHeight()) / 2 );pdfContentByte.addImage(image);}stamper.close();reader.close();return downloadPath;}/*** ppt加水印图片** @param filePath 文件路径* @param bfi      bfi* @return {@link String}*/public static String setWaterMarkToPpt(String filePath,BufferedImage bfi) throws Exception {Presentation presentation=new Presentation();presentation.loadFromFile(filePath);//将图片转字节码ByteArrayOutputStream out = new ByteArrayOutputStream();//将图片转字节码ImageIO.write(bfi, "png", out);//将字节码转为输入流InputStream input = new ByteArrayInputStream(out.toByteArray());IImageData image = presentation.getImages().append(input);//获取幻灯片背景属性,设置图片填充SlideCollection slides = presentation.getSlides();for (int i = 0; i < slides.size(); i++) {slides.get(i).getSlideBackground().setType(BackgroundType.CUSTOM);slides.get(i).getSlideBackground().getFill().setFillType(FillFormatType.PICTURE);slides.get(i).getSlideBackground().getFill().getPictureFill().setFillType(PictureFillType.STRETCH);slides.get(i).getSlideBackground().getFill().getPictureFill().getPicture().setEmbedImage(image);}//保存文档String downloadPath = filePath.substring(0, filePath.lastIndexOf("/") + 1) +System.currentTimeMillis() + "_" + StrUtil.subAfter(filePath, "/", true);presentation.saveToFile(downloadPath, com.spire.presentation.FileFormat.PPSX_2013);return downloadPath;}/*** 图片加水印** @param filePath 文件路径* @param bfi      bfi* @return {@link String}*/public static String setWaterMarkToImg(String filePath,BufferedImage bfi) throws IOException {//获取画布BufferedImage read=ImageIO.read(new File(filePath));Graphics2D graphics=read.createGraphics();//缩放水印图片int width=bfi.getWidth();int height=bfi.getHeight();//设置比例float f=getScale(width,height,0.5f);//获取缩放后的宽度int w= (int) (width*f);int h= (int) (height*f);//缩放图片Image image = bfi.getScaledInstance(w, h, Image.SCALE_SMOOTH);//设置透明度,0->1,逐渐不透明graphics.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,ALPHA_IMG));//添加水印并设置在图片的右下角graphics.drawImage(image,read.getWidth() -w,read.getHeight()-h,null);//释放资源graphics.dispose();//保存图片String downloadPath = filePath.substring(0, filePath.lastIndexOf("/") + 1) +System.currentTimeMillis() + "_" + StrUtil.subAfter(filePath, "/", true);ImageIO.write(read, filePath.substring(filePath.lastIndexOf(".") + 1), new File(downloadPath));return downloadPath;}/*** 获得图片比例** @param width  宽度* @param height 高度* @param f      f* @return float*/public static float getScale(int width, int height, float f) {if (width > 3000) {f = 0.06f;}if (width > 1000 && width < 3000) {f = 0.1f;}if (width > 300 && width < 1000) {f = 0.3f;}return f;}

spring boot文件下载加水印(pdf,word,pdf,照片,excel)相关推荐

  1. Spring boot 文件下载乱码问题

    Spring Boot 文件下载:乱码问题 第一次使用Spring boot 时下载文件保存时,英文名称是没有问题的,但是,有中英混血的话就会出现乱码问题 在本人电脑D盘目录下有一个PDF文件:Jav ...

  2. Spring Boot文件下载断点续传

    Spring Boot文件下载断点续传 正文 MimeType映射关系 正文 @RequestMapping(value = { "/downloading" }, method ...

  3. 在Spring Boot中加载初始化数据

    文章目录 依赖条件 data.sql文件 schema.sql 文件 @sql注解 @SqlConfig 注解 在Spring Boot中加载初始化数据 在Spring Boot中,Spring Bo ...

  4. springboot 读取配置文件_使用 @ConfigurationProperties 在 Spring Boot 中加载配置

    本文地址: 使用 @ConfigurationProperties 在 Spring Boot 中加载配置 使用 Spring Boot 加载配置文件的配置非常便利,我们只需要使用一些注解配置一下就能 ...

  5. spring boot 文件下载接口

    文章目录 spring boot 文件下载接口 通过ResponseEntity实现 通过写HttpServletResponse的OutputStream实现 spring boot 文件下载接口 ...

  6. Spring Boot配置加载顺序

    Spring Boot 不仅可以通过配置文件进行配置,还可以通过环境变量.命令行参数等多种形式进行配置.这些配置都可以让开发人员在不修改任何代码的前提下,直接将一套 Spring Boot 应用程序在 ...

  7. 文件下载加水印工具类(pdf、word、excel、图片)

    文件加水印实现 支持文件类型 /*** 目前可支持加水印的文件类型*/private static List<String> FILE_TYPE_WATER_LIST = Arrays.a ...

  8. itex将html转成pdf加水印,itext操作PDF文件添加水印

    功能描述:添加图片和文字水印 /** * * [功能描述:添加图片和文字水印] [功能详细描述:功能详细描述] * @param srcFile 待加水印文件 * @param destFile 加水 ...

  9. springboot实战pdf_Java程序员中秋节福利发送:Spring boot+Redis实战文档「PDF」

    中秋节越来越近了,平日里,各大公司拼员工拼技术拼实力:到了节日,则要拼奖金.拼福利.拼假期,还要拼创意.今天,小编为大家也准备了一份中秋节礼物,让我们一起来看看礼物是啥吧! Spring boot文档 ...

最新文章

  1. 机器学习(9)决策树(决策树分类鸢尾花)
  2. while循环练习:
  3. 轻量级3d模型查看器_你该试试这样来管理你的3D资产了 Connecter
  4. 玩转springboot2.x之快速搭建(start.spring.io)
  5. Jenkins构建jmeter进行接口测试的一些配置
  6. 【java】创建一个顶层框架类的对象
  7. 2018年计算机考试玉林地点,广西壮族自治区玉林市2021上半年计算机等级考试时间...
  8. facade(外观)模式
  9. win10 UWP RSS阅读器
  10. 骗分技巧————《OI骗分导论》
  11. python根据题库答案自动答题_Selenium实现百度自动答题 懒人获取积分
  12. asuswrt 单臂路由_Padavan(老毛子) 最简单臂路由组网 VLAN 设置
  13. 重邮内网外入及其最新版创翼下载
  14. Unity优化大全(七)之 GPU-Ligh和其他
  15. 数据库的主要设计步骤
  16. 单向和双向沟通带来启发
  17. linux qt make文件或目录,rpm,linux_为Qt程序制作rpm包的spec文件里的路径问题,rpm,linux,qt,rpmbuild,spec - phpStudy...
  18. Django项目的创建、Admin后台系统以及数据库迁移
  19. 如何打造智能化舆情研判预警系统
  20. 你的第一篇SCI是怎么发的呢?

热门文章

  1. 【中学提纲】必修一——细胞基本结构
  2. 一个扫雷小游戏带你初识VUE3和typescript
  3. esp12s 第一章 脚位输出
  4. java jdk9.0.1和1.9_jdk1.5-jdk1.9的主要区别
  5. 实验吧web-易-拐弯抹角(url伪静态)
  6. opend和open的区别_open是什么意思
  7. java编写一个ATM取款机小程序
  8. 前三位必须是大写字母的正则,长度限制5位
  9. bzoj4350 括号序列再战猪猪侠
  10. SPARROW架构介绍