基于poi 4.1.2 HWPFDocument 添加水印
时间: 2024-05-16 19:16:28 浏览: 494
添加水印是通过在文档中插入图片实现的。以下是一个示例代码,演示了如何使用 HWPFDocument 在 Word 文档中添加水印:
```java
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.HeaderFooter;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.usermodel.Picture;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.hwpf.usermodel.Section;
import org.apache.poi.hwpf.usermodel.Shape;
public class AddWatermark {
public static void main(String[] args) throws IOException {
InputStream is = new FileInputStream("input.doc");
HWPFDocument doc = new HWPFDocument(is);
// 添加水印
addWatermark(doc, "watermark.png");
FileOutputStream fos = new FileOutputStream("output.doc");
doc.write(fos);
fos.close();
}
/**
* 在 Word 文档中添加水印
*
* @param doc Word 文档对象
* @param watermarkPath 水印图片路径
*/
private static void addWatermark(HWPFDocument doc, String watermarkPath) throws IOException {
Range range = doc.getRange();
HeaderFooter header = range.getHeader(0);
if (header == null) {
header = range.createHeader(Section.FIRST);
}
List<Paragraph> paragraphs = header.getParagraphs();
Paragraph watermarkPara;
if (paragraphs.isEmpty()) {
watermarkPara = header.createParagraph();
} else {
watermarkPara = paragraphs.get(0);
}
watermarkPara.setAlignment(Paragraph.ALIGN_CENTER);
Picture watermark = new Picture(watermarkPath, doc);
Shape shape = watermark.getShape();
shape.setWrap(Shape.WRAP_TIGHT);
shape.setAnchor(watermarkPara, watermarkPara.createRun().text().length() + 1, 0, 0, 0, 500, 500, 800, 800);
watermarkPara.addPicture(watermark);
}
}
```
在上面的示例代码中,我们首先通过 `HWPFDocument` 加载 Word 文档,然后使用 `addWatermark` 方法添加水印。该方法首先获取文档的第一个页眉,如果不存在页眉则创建一个。然后在页眉中添加一个段落,并设置其水平居中对齐。接着,从指定路径加载水印图片,并创建一个图片对象。我们可以通过图片对象获取其对应的形状对象,然后设置形状的位置和大小,以及文本环绕方式。最后,将图片添加到段落中即可。
需要注意的是,这段代码使用的是 `HWPFDocument`,只适用于老版本的 Word 文档(.doc 格式)。如果你的 Word 文档是新版本的(.docx 格式),则需要使用 `XWPFDocument` 来操作。
阅读全文