Java基于的Spire.Doc实现Word文档(DOC/DOCX)文字水印添加

 更新时间:2026年02月05日 11:35:09   作者:Reboot  
这篇文章主要为大家详细介绍了Java基于的Spire.Doc实现Word文档(DOC/DOCX)文字水印添加的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

本文介绍如何在 Java 中为 Word 文档(.doc.docx)添加页面文字水印,示例基于 Spire.Doc for Java,侧重通用实现方式,不依赖具体业务代码。

1. 方案概览

目标:在 Word 文档的每一页添加斜向、浅灰色的文字水印(例如「xx公司」),以页面水印的形式呈现,不直接修改正文内容。

适用格式.doc.docx(如需 .wps 等其他格式,可按同样思路扩展)。

核心技术栈

  • Java 8+;
  • Spire.Doc for Java(本文使用其 Free 版本作为示例)。

2. Maven 依赖与仓库示例

<dependencies>
    <!-- Spire.Doc for Java(Free 版本示例,版本号可按需调整) -->
    <dependency>
        <groupId>e-iceblue</groupId>
        <artifactId>spire.doc.free</artifactId>
        <version>5.2.0</version>
    </dependency>
</dependencies>
​
<repositories>
    <repository>
        <id>com.e-iceblue</id>
        <url>https://repo.e-iceblue.cn/repository/maven-public/</url>
    </repository>
</repositories>

生产环境可根据许可证选择付费或更新版本,并统一管理版本号。

3. 实现思路

使用 Spire.Doc 的 Document 类从文件或输入流加载 Word 文档:

  • DOCX:loadFromStream(..., FileFormat.Docx)
  • DOC:loadFromStream(..., FileFormat.Doc)
  • 或使用 loadFromFile(...) 从物理文件加载。

构造一个 TextWatermark 对象,设置水印文本、字号、颜色和布局。

通过文档的 Section 对象获取 Document 并调用 setWatermark(TextWatermark) 应用水印:官方推荐用 document.getSections().get(0).getDocument().setWatermark(...)

以相应的 FileFormat 保存文档到新文件或输出流,得到带水印的 DOC/DOCX。

4. 示例一:为 DOCX 文档添加文字水印

4.1 从文件加载并输出到新文件

import com.spire.doc.Document;
import com.spire.doc.FileFormat;
import com.spire.doc.TextWatermark;
import com.spire.doc.documents.WatermarkLayout;
​
import java.awt.Color;
​
public class DocxWatermarkExample {
​
    public static void addWatermarkToDocx(String inputPath, String outputPath, String watermarkText) {
        // 1. 加载 DOCX 文档
        Document document = new Document();
        document.loadFromFile(inputPath, FileFormat.Docx);
​
        // 2. 创建文字水印
        TextWatermark watermark = new TextWatermark();
        watermark.setText(watermarkText);              // 如:"xx公司"
        watermark.setFontSize(40);                     // 字号
        watermark.setColor(Color.lightGray);           // 颜色
        watermark.setLayout(WatermarkLayout.Diagonal); // 斜对角
​
        // 3. 通过 Section 的 Document 设置水印(官方推荐方式)
        if (document.getSections().getCount() > 0) {
            document.getSections().get(0).getDocument().setWatermark(watermark);
        } else {
            // 极端情况下没有 section,可退回到直接设置
            document.setWatermark(watermark);
        }
​
        // 4. 保存为新的 DOCX
        document.saveToFile(outputPath, FileFormat.Docx);
        document.close();
    }
}

4.2 从输入流到字节数组(适用于 Web 上传/下载场景)

import com.spire.doc.Document;
import com.spire.doc.FileFormat;
import com.spire.doc.TextWatermark;
import com.spire.doc.documents.WatermarkLayout;
​
import java.awt.Color;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
​
public class DocxWatermarkUtil {
​
    public static byte[] addWatermarkToDocx(InputStream inputStream, String watermarkText) throws Exception {
        try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
            Document document = new Document();
            document.loadFromStream(inputStream, FileFormat.Docx);
​
            TextWatermark watermark = new TextWatermark();
            watermark.setText(watermarkText);
            watermark.setFontSize(40);
            watermark.setColor(Color.lightGray);
            watermark.setLayout(WatermarkLayout.Diagonal);
​
            if (document.getSections().getCount() > 0) {
                document.getSections().get(0).getDocument().setWatermark(watermark);
            } else {
                document.setWatermark(watermark);
            }
​
            document.saveToStream(out, FileFormat.Docx);
            document.close();
            return out.toByteArray();
        }
    }
}

5. 示例二:为 DOC 文档添加文字水印

DOC 文档与 DOCX 实现方式基本相同,仅在 FileFormat 上有所差异。

import com.spire.doc.Document;
import com.spire.doc.FileFormat;
import com.spire.doc.TextWatermark;
import com.spire.doc.documents.WatermarkLayout;
​
import java.awt.Color;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
​
public class DocWatermarkUtil {
​
    public static byte[] addWatermarkToDoc(InputStream inputStream, String watermarkText) throws Exception {
        try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
            Document document = new Document();
            document.loadFromStream(inputStream, FileFormat.Doc);
​
            TextWatermark watermark = new TextWatermark();
            watermark.setText(watermarkText);
            watermark.setFontSize(40);
            watermark.setColor(Color.lightGray);
            watermark.setLayout(WatermarkLayout.Diagonal);
​
            if (document.getSections().getCount() > 0) {
                document.getSections().get(0).getDocument().setWatermark(watermark);
            } else {
                document.setWatermark(watermark);
            }
​
            document.saveToStream(out, FileFormat.Doc);
            document.close();
            return out.toByteArray();
        }
    }
}

6. 关键点与实践建议

水印文本设计:可以是固定文案(如「xx公司」「内部资料」),也可以结合用户名、时间戳、IP 等生成个性化水印,便于追责和防泄露。

查看模式:Word 中建议使用「打印布局」查看水印;在某些阅读模式下水印可能被隐藏。

Free 版本限制:Spire.Doc Free 版对于页数或功能有一定限制,大规模生产使用时建议评估付费版本或其他库。

与业务集成

  • 上传文件时在写入存储(本地/对象存储)前先加水印;
  • 或在线预览/下载前临时生成带水印副本,不改变原始文件;
  • 可以按租户、用户级别配置不同水印策略。

性能考虑:对于大体积 Word 文档,建议在后台任务中进行水印处理,避免阻塞同步接口。

7. 总结

使用 Spire.Doc 在 Java 中为 Word 文档添加页面文字水印,核心是:加载文档 → 构造 TextWatermark → 通过 Section/Document 设置水印 → 以对应格式保存。上述示例将输入输出封装为 InputStream/byte[] 或文件路径形式,方便在上传、下载或批处理场景中复用,实现对 DOC/DOCX 文档的统一水印控制。

到此这篇关于Java基于的Spire.Doc实现Word文档(DOC/DOCX)文字水印添加的文章就介绍到这了,更多相关Java Word添加文字水印内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java 数据结构单链表的实现

    java 数据结构单链表的实现

    这篇文章主要介绍了java 数据结构单链表的实现的相关资料,需要的朋友可以参考下
    2017-07-07
  • java中log使用小结

    java中log使用小结

    本文主要介绍了java中log使用小结,一文搞清楚java所有日志框架,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-09-09
  • Springboot+SpringSecurity实现图片验证码登录的示例

    Springboot+SpringSecurity实现图片验证码登录的示例

    本文主要介绍了Springboot+SpringSecurity实现图片验证码登录的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • 详解Java的Hibernate框架中的缓存与二级缓存

    详解Java的Hibernate框架中的缓存与二级缓存

    这篇文章主要介绍了Java的Hibernate框架中的缓存与二级缓存,Hibernate是Java的SSH三大web开发框架之一,需要的朋友可以参考下
    2015-12-12
  • 详解Java获取环境变量及系统属性的方法

    详解Java获取环境变量及系统属性的方法

    这篇文章主要介绍了详解Java获取环境变量及系统属性的方法,讲解了System.getEnv()和System.getProperties()这两个核心方法的使用,需要的朋友可以参考下
    2016-05-05
  • 解决idea中yml文件不识别的问题

    解决idea中yml文件不识别的问题

    这篇文章主要介绍了解决idea中yml文件不识别的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • Java 在PDF中添加骑缝章示例解析

    Java 在PDF中添加骑缝章示例解析

    这篇文章主要介绍了Java 在PDF中添加骑缝章示例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 通过Java与Hadoop和Spark结合进行大数据处理

    通过Java与Hadoop和Spark结合进行大数据处理

    随着大数据技术的迅猛发展,数据处理框架已经不再局限于单一机器或传统数据库的处理方式,而是转向分布式计算,Hadoop和Spark作为最广泛使用的大数据处理框架,为我们提供了高效处理海量数据的能力,本文将深入探讨如何使用Java与Hadoop和Spark结合进行大数据处理
    2025-09-09
  • SpringBoot框架的MD5加密方式

    SpringBoot框架的MD5加密方式

    这篇文章主要介绍了SpringBoot框架的MD5加密方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • SpringMvc接受请求参数的几种情况演示

    SpringMvc接受请求参数的几种情况演示

    Springmvc接受请求参数的几种介绍,如何接受json请求参数,本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2021-07-07

最新评论