Java基于的Spire.Doc實現Word文檔(DOC/DOCX)文字水印添加
本文介紹如何在 Java 中為 Word 文檔(.doc、.docx)添加頁面文字水印,示例基于 Spire.Doc for Java,側重通用實現方式,不依賴具體業(yè)務代碼。
1. 方案概覽
目標:在 Word 文檔的每一頁添加斜向、淺灰色的文字水?。ɡ纭竫x公司」),以頁面水印的形式呈現,不直接修改正文內容。
適用格式:.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>
生產環(huán)境可根據許可證選擇付費或更新版本,并統(tǒng)一管理版本號。
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. 創(chuàng)建文字水印
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 從輸入流到字節(jié)數組(適用于 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 版對于頁數或功能有一定限制,大規(guī)模生產使用時建議評估付費版本或其他庫。
與業(yè)務集成:
- 上傳文件時在寫入存儲(本地/對象存儲)前先加水印;
- 或在線預覽/下載前臨時生成帶水印副本,不改變原始文件;
- 可以按租戶、用戶級別配置不同水印策略。
性能考慮:對于大體積 Word 文檔,建議在后臺任務中進行水印處理,避免阻塞同步接口。
7. 總結
使用 Spire.Doc 在 Java 中為 Word 文檔添加頁面文字水印,核心是:加載文檔 → 構造 TextWatermark → 通過 Section/Document 設置水印 → 以對應格式保存。上述示例將輸入輸出封裝為 InputStream/byte[] 或文件路徑形式,方便在上傳、下載或批處理場景中復用,實現對 DOC/DOCX 文檔的統(tǒng)一水印控制。
到此這篇關于Java基于的Spire.Doc實現Word文檔(DOC/DOCX)文字水印添加的文章就介紹到這了,更多相關Java Word添加文字水印內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python單元測試_使用裝飾器實現測試跳過和預期故障的方法
下面小編就為大家?guī)硪黄狿ython單元測試_使用裝飾器實現測試跳過和預期故障的方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-06-06
Spring @ConditionalOnMissingBean 注解的主要作用解析
@ConditionalOnMissingBean是Spring Boot中用于條件化配置的注解,確保只有在指定Bean不存在時才創(chuàng)建,它在自動配置中廣泛應用,提供默認配置并允許用戶自定義Bean,本文給大家介紹Spring @ConditionalOnMissingBean注解的作用,感興趣的朋友一起看看吧2026-01-01

