第一步,添加依赖
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.10.0</version>
</dependency>
第二步,创建一个需要加水印的word文档文件,格式为docx,文档中必须有内容
第三部,编写java代码进行添加水印操作
import java.io.*;
import java.util.regex.Pattern;
import org.apache.poi.xwpf.usermodel.*;
import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy;
public class Test5 {
public static void main(String[] args) throws Exception {
String path ="F:\\workspace\\poi";
String name ="/001.docx";
String modelPath = path+name;//设置需要加水印的文件路径
//输入的docx文档
InputStream in = new FileInputStream(new File(modelPath));
XWPFDocument doc= new XWPFDocument(in );
XWPFParagraph paragraph = doc.createParagraph();//创建文本段落
// XWPFRun run=paragraph.createRun();//创建run元素
// run.setText("The Body:");//可以给run元素里写正文内容
XWPFHeaderFooterPolicy headerFooterPolicy = doc.getHeaderFooterPolicy();//获取页面页脚
if (headerFooterPolicy == null) headerFooterPolicy = doc.createHeaderFooterPolicy();//如果没有页眉页脚则创建
headerFooterPolicy.createWatermark("平凉科技局");//设置水印显示的内容
XWPFHeader header = headerFooterPolicy.getHeader(XWPFHeaderFooterPolicy.DEFAULT);
paragraph = header.getParagraphArray(0);
org.apache.xmlbeans.XmlObject[] xmlobjects = paragraph.getCTP().getRArray(0).getPictArray(0).selectChildren(
new javax.xml.namespace.QName("urn:schemas-microsoft-com:vml", "shape"));
if (xmlobjects.length > 0) {
com.microsoft.schemas.vml.CTShape ctshape = (com.microsoft.schemas.vml.CTShape)xmlobjects[0];
ctshape.setFillcolor("#f6f6f6");//设置水印的颜色
ctshape.setStyle(ctshape.getStyle() + ";rotation:315");//设置水印的样式 获取默认样式和旋315度
// ctshape.setStyle(getWaterMarkStyle(ctshape.getStyle(),100) + ";rotation:315");//设置自定义水印的样式,setStyle()方法中需传入样式字符串
}
doc.write(new FileOutputStream("Test5.docx"));
doc.close();
}
/**
* 修改水印样式高度的方法,如果不想改高度可以不用次方法
* @param styleStr 之前的水印样式
* @param height 需要改成的高度
* @return 返回新的修改好的水印样式
*/
public static String getWaterMarkStyle(String styleStr,double height){
//把拿到的样式用";"切割,切割后保存到数组中
Pattern p=Pattern.compile(";");
String[] strs = p.split(styleStr);
//遍历保存的数据,找到高度样式,将高度改为参数传入高度的
for(String str : strs){
if(str.startsWith("height:")){
String heightStr = "height:" + height + "pt";
styleStr = styleStr.replace(str,heightStr);
break;
}
}
return styleStr;//返回改好的样式
}
}