package cn.flightfeather.supervision.docx4j.simpleDemo; import org.docx4j.XmlUtils; import org.docx4j.jaxb.Context; import org.docx4j.model.structure.SectionWrapper; import org.docx4j.openpackaging.exceptions.InvalidFormatException; import org.docx4j.openpackaging.packages.WordprocessingMLPackage; import org.docx4j.openpackaging.parts.Part; import org.docx4j.openpackaging.parts.WordprocessingML.HeaderPart; import org.docx4j.relationships.Relationship; import org.docx4j.wml.*; import java.io.File; import java.util.List; public class Watermark { public static void main(String[] args) throws Exception { Watermark sample = new Watermark(); sample.addWaterMark(); } static ObjectFactory factory = Context.getWmlObjectFactory(); public void addWaterMark() throws Exception { WordprocessingMLPackage wmlPackage = WordprocessingMLPackage .createPackage(); Relationship relationship = createHeaderPart(wmlPackage); createHeaderReference(wmlPackage, relationship); File f = new File(System.getProperty("user.dir") + "/waterMarksample.docx"); wmlPackage.save(f); } public static Relationship createHeaderPart( WordprocessingMLPackage wordprocessingMLPackage) throws Exception { HeaderPart headerPart = new HeaderPart(); Relationship rel = wordprocessingMLPackage.getMainDocumentPart() .addTargetPart(headerPart); headerPart.setJaxbElement(getHdr(wordprocessingMLPackage, headerPart)); return rel; } public static void createHeaderReference( WordprocessingMLPackage wordprocessingMLPackage, Relationship relationship ) throws InvalidFormatException { List sections = wordprocessingMLPackage.getDocumentModel().getSections(); SectPr sectPr = sections.get(sections.size() - 1).getSectPr(); // There is always a section wrapper, but it might not contain a sectPr if (sectPr==null ) { sectPr = factory.createSectPr(); wordprocessingMLPackage.getMainDocumentPart().addObject(sectPr); sections.get(sections.size() - 1).setSectPr(sectPr); } HeaderReference headerReference = factory.createHeaderReference(); headerReference.setId(relationship.getId()); headerReference.setType(HdrFtrRef.DEFAULT); sectPr.getEGHdrFtrReferences().add(headerReference); } public static Hdr getHdr(WordprocessingMLPackage wordprocessingMLPackage, Part sourcePart) throws Exception { Hdr hdr = factory.createHdr(); String openXML = "" + "" + "" +"" + "" + "" + "" + "" + "" + "" + "" +"" +"" + "" + "" + "" + "" + "" + "" +"" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "" +"" + "" + "" + "" + "" +"" + "" +"" + "" + "" + "" + "" +"" +"" +"" +"" +"" + ""; P p = (P)XmlUtils.unmarshalString(openXML); hdr.getContent().add(p); return hdr; } }