使用 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)类提供 setHorizontalAlignment、setVerticalAlignment 和 setOpacity 等属性,以微调放置位置和透明度。
问:能否一次性为多个 Excel 文件添加水印?
答:完全可以。将整个工作流放在遍历文件目录的 for 循环中,复用同一个 TextWatermark 实例。
问:如果电子表格包含图表会怎样?
答:图表被视为独立的绘图对象;水印会应用在工作表画布上,图表本身不受影响,但仍会被半透明印章覆盖。
问:能否移除之前添加的水印?
答:SDK 包含 watermarker.remove(watermark) 方法,但您需要保留原始水印对象的引用,或通过文本/内容搜索来定位并删除它。
最后更新: 2026-03-27
测试环境: GroupDocs.Watermark 23.12(Java)
作者: GroupDocs