使用 GroupDocs.Watermark Java 为 Excel 添加水印

为 Excel 文件添加水印可以改变游戏规则——无论是保护敏感数据、为报告加上品牌标识,还是仅仅提升专业感。在本教程中,您将学习 如何为 Excel 电子表格添加水印,使用 GroupDocs.Watermark for Java,配有清晰的解释、真实案例以及避免常见陷阱的技巧。

快速回答

  • 需要哪个库? GroupDocs.Watermark for Java(最新版本)。
  • 支持哪些 Excel 格式? .xlsx 和 .xls 文件(未加密)。
  • 可以添加图片水印吗? 可以——SDK 支持文本和图片水印。
  • 生产环境需要许可证吗? 非试用部署需要商业许可证。
  • 实现需要多长时间? 基本文本水印约 10‑15 分钟即可完成。

什么是 add watermark to excel

为 Excel 工作簿添加水印是指在每个工作表或嵌入的文档上盖上可见(或半透明)的文字或图片。这有助于声明所有权、标示机密性或在整个文件中强化品牌形象。

为什么使用 GroupDocs.Watermark for Java?

GroupDocs.Watermark 提供了高级 API,抽象了处理 Office Open XML 结构的复杂性。它可以让您:

  • 在一次调用中对多个工作表应用水印。
  • 自动处理嵌入的附件(例如嵌入的 PDF)。
  • 保留原始格式和公式。
  • 支持文本和图片水印(例如 add image watermark java)。

前置条件

  • Java 开发环境 – Java 8 或更高(JDK)。
  • GroupDocs.Watermark for Java SDK – 从 此处 下载最新发布。
  • IDE – IntelliJ IDEA、Eclipse 或任何兼容 Java 的编辑器。
  • 示例电子表格 – 您想要保护的 .xlsx 文件。

您可以通过 Maven、Gradle 或手动将 JAR 文件放置在类路径上来将 SDK 添加到项目中。

导入包

这些导入为您提供对核心水印类、电子表格处理和字体工具的访问。

import com.groupdocs.watermark.Watermarker;
import com.groupdocs.watermark.examples.Constants;
import com.groupdocs.watermark.domain.DocumentInfo;
import com.groupdocs.watermark.domain.FileType;
import com.groupdocs.watermark.domain.content.SpreadsheetContent;
import com.groupdocs.watermark.domain.content.SpreadsheetWorksheet;
import com.groupdocs.watermark.domain.content.SpreadsheetAttachment;
import com.groupdocs.watermark.domain.document.IDocumentInfo;
import com.groupdocs.watermark.domain.loadoptions.SpreadsheetLoadOptions;
import com.groupdocs.watermark.domain.wrappers.TextWatermark;
import java.awt.Font;

如何 watermark spreadsheet – 步骤指南

下面是一个实用的编号演练,准确展示 如何为电子表格添加水印 的步骤。每一步都包含简短说明以及原始代码块(保持不变)。

步骤 1:设置水印对象

为什么? 该对象定义了您将要应用的印章的视觉外观。

TextWatermark watermark = new TextWatermark("Confidential", new Font("Arial", 19));

步骤 2:加载电子表格

为什么? 打开工作簿后,SDK 才能获得编辑句柄。

SpreadsheetLoadOptions loadOptions = new SpreadsheetLoadOptions();
Watermarker watermarker = new Watermarker("your-file-path.xlsx", loadOptions);

步骤 3:访问电子表格内容和工作表

为什么? Excel 文件可能包含多个工作表;您需要遍历每一个。

SpreadsheetContent content = watermarker.getContent(SpreadsheetContent.class);
for (SpreadsheetWorksheet worksheet : content.getWorksheets()) {
    // Process each worksheet
}

步骤 4:遍历每个工作表中的附件

为什么? 某些工作表会嵌入其他文档(例如 PDF)。处理它们可确保整个文件的水印一致。

for (SpreadsheetAttachment attachment : worksheet.getAttachments()) {
    IDocumentInfo info = attachment.getDocumentInfo();
    if (info.getFileType() != FileType.Unknown && !info.isEncrypted()) {
        // Process the supported attachment
    }
}

步骤 5:为每个嵌入的文档添加水印

为什么? 您希望在每个嵌入文件上都有相同的 “机密” 印章。

Watermarker attachedWatermarker = attachment.createWatermarker();
attachedWatermarker.add(watermark);
attachment.updateContent(attachedWatermarker);
attachedWatermarker.close();

步骤 6:保存所有更改

为什么? 将修改持久化到新工作簿。

watermarker.save("your-output-file.xlsx");

步骤 7:关闭资源

为什么? 释放资源可防止内存泄漏,尤其在处理大型工作簿时。

watermarker.close();

综合示例:完整代码

以下类将每一步组合成一个可运行的程序。请勿修改代码块——它与原始示例完全相同。

import com.groupdocs.watermark.Watermarker;
import com.groupdocs.watermark.domain.DocumentInfo;
import com.groupdocs.watermark.domain.FileType;
import com.groupdocs.watermark.domain.content.SpreadsheetContent;
import com.groupdocs.watermark.domain.content.SpreadsheetWorksheet;
import com.groupdocs.watermark.domain.content.SpreadsheetAttachment;
import com.groupdocs.watermark.domain.loadoptions.SpreadsheetLoadOptions;
import com.groupdocs.watermark.domain.wrappers.TextWatermark;
import java.awt.Font;

public class WatermarkSpreadsheet {
    public static void main(String[] args) {
        try {
            // Step 1: Create watermark
            TextWatermark watermark = new TextWatermark("Confidential", new Font("Arial", 19));
            
            // Step 2: Load spreadsheet
            SpreadsheetLoadOptions loadOptions = new SpreadsheetLoadOptions();
            Watermarker watermarker = new Watermarker("path/to/your/spreadsheet.xlsx", loadOptions);
            
            // Step 3: Access content and worksheets
            SpreadsheetContent content = watermarker.getContent(SpreadsheetContent.class);
            for (SpreadsheetWorksheet worksheet : content.getWorksheets()) {
                
                // Step 4: Loop attachments
                for (SpreadsheetAttachment attachment : worksheet.getAttachments()) {
                    DocumentInfo info = attachment.getDocumentInfo();
                    if (info.getFileType() != FileType.Unknown && !info.isEncrypted()) {
                        
                        // Step 5: Watermark attached documents
                        Watermarker attachedWatermarker = attachment.createWatermarker();
                        attachedWatermarker.add(watermark);
                        attachment.updateContent(attachedWatermarker);
                        attachedWatermarker.close(); // Clean up
                    }
                }
            }
            // Step 6: Save modifications
            watermarker.save("path/to/output/spreadsheet_watermarked.xlsx");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // Step 7: Close resources
            // (Ensure resources are closed)
        }
    }
}

常见问题及解决方案

问题产生原因解决方案
加密工作簿被跳过SDK 在没有密码的情况下无法读取加密文件。先解密文件或通过 SpreadsheetLoadOptions.setPassword("pwd") 提供密码。
某些工作表看不到水印工作表可能有自定义视图或保护,隐藏了绘图对象。在添加水印前禁用工作表保护,完成后如有需要再重新启用。
大文件性能下降将整个工作簿加载到内存会占用大量资源。分批处理工作表或增大 JVM 堆大小(-Xmx2g)。
图片水印失真缩放设置不正确。使用 ImageWatermark 并显式设置宽高参数以保持纵横比。

常见问答

问:可以添加图片水印而不是文本吗?
答:可以。使用 SDK 的 ImageWatermark 并传入 java.awt.Image 实例。这对应 add image watermark java 场景。

问:如何控制水印的位置?
答:TextWatermark(或 ImageWatermark)类提供 setHorizontalAlignmentsetVerticalAlignmentsetOpacity 等属性,以微调放置位置和透明度。

问:能否一次性为多个 Excel 文件添加水印?
答:完全可以。将整个工作流放在遍历文件目录的 for 循环中,复用同一个 TextWatermark 实例。

问:如果电子表格包含图表会怎样?
答:图表被视为独立的绘图对象;水印会应用在工作表画布上,图表本身不受影响,但仍会被半透明印章覆盖。

问:能否移除之前添加的水印?
答:SDK 包含 watermarker.remove(watermark) 方法,但您需要保留原始水印对象的引用,或通过文本/内容搜索来定位并删除它。


最后更新: 2026-03-27
测试环境: GroupDocs.Watermark 23.12(Java)
作者: GroupDocs