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

2024-04-11 1567阅读

1、前言(瞎扯)

有个需求:整一个给 Word 加水印的demo,于是我就网上找呗~

看到那个 Aspose 好像是收费的,然后就把目光转向了 POI,看到各种形形色色的也不知道哪个能用。整了一会,自己拷贝出一个比较精简的能用的 demo 了。

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

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

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

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

3、人狠话不多,直接来代码

3.1、我的代码结构

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

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页之后的)

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]