Java / Spring Boot + POI 给 Word 添加水印

您所在的位置:网站首页 如何给PPT加水印 Java / Spring Boot + POI 给 Word 添加水印

Java / Spring Boot + POI 给 Word 添加水印

2024-06-28 17:58| 来源: 网络整理| 查看: 265

1、前言(瞎扯)

有个需求:整一个给 Word 加水印的demo,于是我就网上找呗~ 看到那个 Aspose 好像是收费的,然后就把目光转向了 POI,看到各种形形色色的也不知道哪个能用。整了一会,自己拷贝出一个比较精简的能用的 demo 了。

2、人狠话不多,上效果图

我一般都是直接上图的,先看效果图(每一页都有的):

水印的分布如果不理想,只能小伙伴们自行研究调整了~

在这里插入图片描述

3、人狠话不多,直接来代码 3.1、我的代码结构

目录结构

3.2 、直接贴代码了

pom 依赖的版本不要改,修改版本可能会导致一些东西缺失 代码你们可以直接复制这里的使用 或者在码云仓库:点击这里跳转

3.2.1、pom 依赖 4.0.0 org.springframework.boot spring-boot-starter-parent 3.2.2 com.lyk springboot-word-finger 0.0.1-SNAPSHOT springboot-word-finger springboot-word-finger 17 org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test org.jsoup jsoup 1.11.2 org.apache.poi poi 4.1.0 org.apache.poi poi-scratchpad 4.1.0 org.apache.poi poi-ooxml 4.1.0 org.apache.poi poi-ooxml-schemas 4.1.0 org.springframework.boot spring-boot-maven-plugin 3.2.2、处理工具类 import com.microsoft.schemas.office.office.CTLock; import com.microsoft.schemas.vml.*; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.wp.usermodel.HeaderFooterType; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFHeader; import org.openxmlformats.schemas.wordprocessingml.x2006.main.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; import java.util.stream.Stream; /** * @author: lyk * @description: Word 添加水印工具类 **/ public class WatermarkUtil { private static final Logger LOGGER = LoggerFactory.getLogger(WatermarkUtil.class); /** word字体 */ private static final String FONT_NAME = "宋体"; /** 字体大小 */ private static final String FONT_SIZE = "0.2pt"; /** 字体颜色 */ private static final String FONT_COLOR = "#d0d0d0"; /** 一个字平均长度,单位pt,用于:计算文本占用的长度(文本总个数*单字长度)*/ private static final Integer WIDTH_PER_WORD = 10; /** 与顶部的间距 */ private static Integer STYLE_TOP = 0; /** 文本旋转角度 */ private static final String STYLE_ROTATION = "30"; /** * @param inPutPath * @param putPutPath * @param fingerText * @author: lyk * @description: 添加水印入口方法 * @date: 2024/1/25 23:42 **/ public static void waterMarkDocXDocument(String inPutPath, String putPutPath, String fingerText) { long beginTime = System.currentTimeMillis(); try ( OutputStream out = new FileOutputStream(putPutPath); InputStream in = new FileInputStream(inPutPath); OPCPackage srcPackage = OPCPackage.open(in); XWPFDocument doc = new XWPFDocument(srcPackage) ) { // 把整页都打上水印 for (int lineIndex = -5; lineIndex pattern).limit(repeats).forEach(buffer::append); return new String(buffer); } } /** * @author lyk * @version 1.0 * @date 2024/1/25 23:16 * @description */ public class Main { public static void main(String[] args) { final String inPath = "src/main/java/com/lyk/finger/doc/aaaa.docx"; final String outPath = "src/main/java/com/lyk/finger/doc/out.docx"; // 添加水印 WatermarkUtil.waterMarkDocXDocument(inPath, outPath, "落魄程序员在线炒粉"); } } 4、OK 完事~

拿去好好享用吧~ 注意:大文档不确定是否有效,我没有大文档测试,如果那种几百页的文档请自行查看,据网友反馈大文档后面的生成不了水印(200页之后的)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3