如何使用Apache POI在Java中为旧版.doc文件添加文本背景水印?
如何使用Apache POI在Java中为旧版.doc文件添加文本背景水印?
当然可以用Apache POI实现!旧版的.doc文件需要用到POI的HWPF组件来处理——不过要注意,HWPF没有直接提供添加水印的API,我们得通过给页眉添加一个特殊样式的文本框来模拟背景水印效果,这样就能让水印在每一页都显示,而且是半透明斜向的。
下面是完整的实现代码,我会给你标注关键细节:
import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.usermodel.*; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public class DocWatermarkUtil { public static void addTextWatermarkToDoc(String inputPath, String outputPath, String watermarkText) throws IOException { // 打开旧版.doc文档 try (HWPFDocument doc = new HWPFDocument(new FileInputStream(inputPath))) { // 获取文档的页眉(如果没有则创建) Range headerRange = doc.getHeaderStoryRange(); if (headerRange == null) { headerRange = doc.createHeader(); } // 创建文本框承载水印文本 TextBox textBox = new TextBox(headerRange); // 设置文本框覆盖整个A4页面(单位:缇,1缇=1/20磅) textBox.setLeft(0); textBox.setTop(0); textBox.setWidth(8500); textBox.setHeight(11000); // 让文本框透明无框,不遮挡正文 textBox.setFilled(false); textBox.setLineVisible(false); textBox.setLineWidth(0); // 写入水印文本并设置样式 Range textBoxRange = textBox.getRange(); Paragraph para = textBoxRange.insertBefore(watermarkText); CharacterRun cr = para.getCharacterRun(0); cr.setFontSize(48); // 设置大号字体 cr.setColor(0xC0C0C0); // 浅灰色模拟半透明 cr.setTextRotation(45); // 45度斜向 cr.setItalic(true); // 可选:让水印更柔和 // 将文本框添加到页眉 headerRange.insertAfter(textBox); // 保存修改后的文档 try (FileOutputStream out = new FileOutputStream(outputPath)) { doc.write(out); } } } // 测试用例 public static void main(String[] args) throws IOException { addTextWatermarkToDoc("input.doc", "output.doc", "CONFIDENTIAL"); } }
关键细节说明:
- 页眉文本框方案:因为HWPF没有原生水印支持,利用页眉会在每一页重复显示的特性,把覆盖全页的文本框放在页眉里,就实现了类似背景水印的效果。
- 样式控制:用浅灰色替代真正的透明度(HWPF对文本透明度支持有限),斜向旋转让水印更符合常见需求,同时去掉文本框的边框和填充,避免遮挡正文内容。
- 页面适配:代码里用的是A4纸的缇单位尺寸,如果你的文档是其他规格,可以调整
width和height的值。
依赖注意事项:
要确保项目引入了HWPF对应的依赖,比如Maven中添加:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>4.1.2</version> <!-- 建议使用稳定版本 --> </dependency>
备注:内容来源于stack exchange,提问作者msl12
相关产品推荐
相关产品推荐

