重复水印,也称为多行水印,是一种在 Word 文档的页面上以固定间隔多次出现的水印。与普通水印相比,重复水印更难去除或遮盖,因此可以为文档提供更好的保护,防止未经授权的复制和分发。本文将使用 Spire.Doc for Java 演示如何通过程序插入重复文本水印和重复图像水印到 Word 文档。
安装 Spire.Doc for Java
首先,您需要在 Java 程序中添加 Spire.Doc.jar 文件作为依赖项。您可以从此链接下载 JAR 文件;如果您使用 Maven,则可以通过在 pom.xml 文件中添加以下代码导入 JAR 文件。
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.doc</artifactId>
<version>12.11.0</version>
</dependency>
</dependencies>
插入重复文本水印到 Word 文档
我们可以通过在页眉中以指定间隔添加重复的艺术字来向 Word 文档插入重复文本水印。具体步骤如下:
- 创建一个 Document 的对象。
- 使用 Document.loadFromFile() 方法载入 Word 文档。
- 创建一个 ShapeObject 的对象,并使用 ShapeObject.getWordArt().setText() 方法设置艺术字的文本。
- 指定旋转角度、垂直重复次数和水平重复次数。
- 使用 ShapeObject 类下的方法设置形状的格式。
- 通过循环遍历文档中的各个节,使用 Paragraph.getChildObjects().add(ShapeObject) 方法将艺术字多次添加到每个节的页眉中,从而实现以指定的间隔插入重复水印。
- 使用 Document.saveToFile() 方法保存文档。
- Java
import com.spire.doc.Document;
import com.spire.doc.HeaderFooter;
import com.spire.doc.Section;
import com.spire.doc.documents.Paragraph;
import com.spire.doc.documents.ShapeLineStyle;
import com.spire.doc.documents.ShapeType;
import com.spire.doc.fields.ShapeObject;
import java.awt.*;
public class insertRepeatingTextWatermark {
public static void main(String[] args) {
//创建Document的对象
Document doc = new Document();
//载入Word文档
doc.loadFromFile("示例.docx");
//创建ShapeObject的对象并设置艺术字的文本
ShapeObject shape = new ShapeObject(doc, ShapeType.Text_Plain_Text);
shape.getWordArt().setText("草稿");
//设置文本水印的旋转角度以及垂直和水平重复次数
double rotation = 315;
int ver = 5;
int hor = 3;
//设置艺术字的格式
shape.setWidth(60);
shape.setHeight(20);
shape.setVerticalPosition(30);
shape.setHorizontalPosition(20);
shape.setRotation(rotation);
shape.getWordArt().setFontFamily("HarmonyOS Sans SC");
shape.setFillColor(Color.BLUE);
shape.setLineStyle(ShapeLineStyle.Single);
shape.setStrokeColor(Color.CYAN);
shape.setStrokeWeight(1);
//循环遍历文档中的节
for (Section section : (Iterable extends Section>) doc.getSections()
) {
//获取节的页眉
HeaderFooter header = section.getHeadersFooters().getHeader();
//添加一个段落到页眉中
Paragraph paragraph = header.addParagraph();
for (int i = 0; i < ver; i++) {
for (int j = 0; j < hor; j++) {
//将艺术字添加到页眉中
shape = (ShapeObject) shape.deepClone();
shape.setVerticalPosition((float) (section.getPageSetup().getPageSize().getHeight()/ver * i + Math.sin(rotation) * shape.getWidth()/2));
shape.setHorizontalPosition((float) ((section.getPageSetup().getPageSize().getWidth()/hor - shape.getWidth()/2) * j));
paragraph.getChildObjects().add(shape);
}
}
}
//保存文档
doc.saveToFile("重复文本水印.docx");
doc.dispose();
}
}
插入重复图片水印到 Word 文档
同样,我们也可以通过在文档的页眉中按照指定间隔添加重复的图片来实现向 Word 文档插入重复图像水印。具体步骤如下:
- 创建一个 Document 的对象。
- 使用 Document.loadFromFile() 方法载入 Word 文档。
- 使用 DocPicture.loadImage() 方法载入一张图片。
- 使用 DocPicture.setTextWrappingStyle(TextWrappingStyle.Behind) 方法将图片的文本环绕方式设置为衬于文字下方。
- 指定垂直和水平重复次数。
- 通过循环遍历文档中的各个节,使用 Paragraph.getChildObjects().add() 方法将图片多次添加到每个节的页眉中,从而实现以指定的间隔插入重复图片水印。
- 使用 Document.saveToFile() 方法保存文档。
- Java
import com.spire.doc.Document;
import com.spire.doc.FileFormat;
import com.spire.doc.HeaderFooter;
import com.spire.doc.Section;
import com.spire.doc.documents.Paragraph;
import com.spire.doc.documents.TextWrappingStyle;
import com.spire.doc.fields.DocPicture;
public class insertRepeatingPictureWatermark {
public static void main(String[] args) {
//创建Document的对象
Document doc = new Document();
//载入Word文档
doc.loadFromFile("示例.docx");
//载入图片
DocPicture pic = new DocPicture(doc);
pic.loadImage("水印.png");
//将图片的文本环绕方式设置为衬于文字下方
pic.setTextWrappingStyle(TextWrappingStyle.Behind);
//设置垂直和水平重复次数
int ver = 4;
int hor = 3;
//循环遍历文档中的节
for (Section section : (Iterable extends Section>) doc.getSections()
) {
//获取节的页眉
HeaderFooter header = section.getHeadersFooters().getHeader();
//在页眉中添加一个段落
Paragraph paragraph = header.addParagraph();
for (int i = 0; i < ver; i++) {
for (int j = 0; j < hor; j++) {
//添加图片到页眉中
pic = (DocPicture) pic.deepClone();
pic.setVerticalPosition((float) ((section.getPageSetup().getPageSize().getHeight()/ver) * i));
pic.setHorizontalPosition((float) (section.getPageSetup().getPageSize().getWidth()/hor - pic.getWidth()/2) * j);
paragraph.getChildObjects().add(pic);
}
}
}
//保存文档
doc.saveToFile("重复图片水印.docx", FileFormat.Auto);
doc.dispose();
}
}
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。