第一步:引入依赖
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-words</artifactId>
<version>16.6.0</version>
</dependency>
第二步:添加水印
1、添加一个文字水印到内容中
/**
* 为word文档添加 一个 文字 水印
* @param doc word文档模型
* @param watermarkText 需要添加的水印字段
* @throws Exception
*/
public static void insertWatermarkText(Document doc, String watermarkText) throws Exception {
Shape watermark = new Shape(doc, ShapeType.TEXT_PLAIN_TEXT);
//1水印内容
watermark.getTextPath().setText(watermarkText);
//2水印字体
watermark.getTextPath().setFontFamily("宋体");
//3水印宽度
watermark.setWidth(100);
//4水印高度
watermark.setHeight(20);
//5旋转水印
watermark.setRotation(-40);
//6水印颜色 浅灰色
watermark.getFill().setColor( Color.lightGray);
watermark.setStrokeColor(Color.lightGray);
//7将水印放置在页面中心
//7.1 设置相对水平位置
watermark.setRelativeHorizontalPosition(RelativeHorizontalPosition.PAGE);
//7.2 设置相对垂直位置
watermark.setRelativeVerticalPosition(RelativeVerticalPosition.PAGE);
//7.3 设置包装类型
watermark.setWrapType(WrapType.NONE);
//7.4 设置垂直对齐
watermark.setVerticalAlignment(VerticalAlignment.CENTER);
//7.5 设置文本水平对齐方式
watermark.setHorizontalAlignment(HorizontalAlignment.CENTER);
// 创建一个新段落并在该段中添加水印。
Paragraph watermarkPara = new Paragraph(doc);
watermarkPara.appendChild(watermark);
// 在每个部分中,最多可以有三个不同的标题,因为我们想要出现在所有页面上的水印,插入到所有标题中。
for (Section sect : doc.getSections())
{
// 每个区段可能有多达三个不同的标题,因为我们希望所有页面上都有水印,将所有的头插入。
insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_PRIMARY);
insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_FIRST);
insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_EVEN);
}
System.out.println("Watermark Set");
}
/**
* 插入水印
* @param watermarkPara
* @param sect
* @param headerType
* @throws Exception
*/
private static void insertWatermarkIntoHeader(Paragraph watermarkPara, Section sect, int headerType) throws Exception {
HeaderFooter header = sect.getHeadersFooters().getByHeaderFooterType( headerType );
if (header == null) {
header = new HeaderFooter( sect.getDocument(), headerType );
sect.getHeadersFooters().add( header );
}
// 在头部插入一个水印的克隆
header.appendChild( watermarkPara.deepClone( true ) );
}
2、插入多个水印到文档中
/**
* 插入多个文字水印
* @param mdoc
* @param wmText
* @throws Exception
*/
public static void WaterMarkMore(Document mdoc, String wmText)throws Exception{
Paragraph watermarkPara = new Paragraph(mdoc);
for (int j = 0; j < 500; j = j + 100)
{
for (int i = 0; i < 700; i = i + 85)
{
Shape waterShape = ShapeMore(mdoc, wmText, j, i);
watermarkPara.appendChild(waterShape);
}
}
for (Section sect : mdoc.getSections())
{
insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_PRIMARY);
insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_FIRST);
insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_EVEN);
}
}
/**
* 设置水印属性
* @param doc
* @param wmText
* @param left
* @param top
* @return
* @throws Exception
*/
public static Shape ShapeMore(Document doc, String wmText, double left, double top)throws Exception{
Shape waterShape = new Shape(doc, ShapeType.TEXT_PLAIN_TEXT);
//水印内容
waterShape.getTextPath().setText(wmText);
//水印字体
waterShape.getTextPath().setFontFamily("宋体");
//水印宽度
waterShape.setWidth(40);
//水印高度
waterShape.setHeight(13);
//旋转水印
waterShape.setRotation(-40);
//水印颜色 浅灰色
/*waterShape.getFill().setColor(Color.lightGray);
waterShape.setStrokeColor(Color.lightGray);*/
waterShape.setStrokeColor(new Color(210,210,210));
//将水印放置在页面中心
waterShape.setLeft(left);
waterShape.setTop(top);
//设置包装类型
waterShape.setWrapType(WrapType.NONE);
return waterShape;
}
3、页眉页脚 插入文字
//页眉页脚 插入文字
private static void insertFooterAndHeader(Document document,String watermarkText) throws Exception{
// 文档构建工具类,可对当前加入的模板进行编辑、新增等部分功能。
DocumentBuilder builder = new DocumentBuilder(document);
// 1、开始插入页眉
// 将光标移动到页眉位置
builder.moveToHeaderFooter(HeaderFooterType.HEADER_PRIMARY);
// 添加页眉线
Border borderHeader = builder.getParagraphFormat().getBorders().getBottom();
borderHeader.setShadow(true);
borderHeader.setDistanceFromText(2);
borderHeader.setLineStyle(LineStyle.SINGLE);
// 设置页脚边距
builder.getPageSetup().setHeaderDistance(35.9);
builder.getPageSetup().setFooterDistance(36);
//设置页眉的内容和字体
Paragraph header = builder.insertParagraph();
Run runHeader = new Run(document,watermarkText);
runHeader.getFont().setSize(7.5);
runHeader.getFont().setName("宋体");
header.appendChild(runHeader);
// 2、开始插入页脚
// 将光标移动到页脚位置
builder.moveToHeaderFooter(HeaderFooterType.FOOTER_PRIMARY);
// 添加页脚线
Border borderFooter = builder.getParagraphFormat().getBorders().getTop();
borderFooter.setShadow( true );
borderFooter.setDistanceFromText(2);
borderFooter.setLineStyle(LineStyle.SINGLE);
// 设置页脚边距
builder.getPageSetup().setHeaderDistance(35.9);
builder.getPageSetup().setFooterDistance(36);
//设置页教的内容和字体
Paragraph paragraph = builder.insertParagraph();
Run run = new Run(document,watermarkText);
run.getFont().setSize(7.5);
run.getFont().setName("宋体");
paragraph.appendChild(run);
}
4、页眉和页脚 插入图片
//页眉和页脚 插入图片
private static void insertImageToHeader(Document document,String picUrl) throws Exception{
// 文档构建工具类,可对当前加入的模板进行编辑、新增等部分功能。
DocumentBuilder builder = new DocumentBuilder(document);
// 1、开始插入页眉
// 将光标移动到页眉位置
builder.moveToHeaderFooter(HeaderFooterType.HEADER_PRIMARY);
// 添加页眉线
Border borderHeader = builder.getParagraphFormat().getBorders().getBottom();
borderHeader.setShadow(true);
borderHeader.setDistanceFromText(22);
borderHeader.setLineStyle(LineStyle.SINGLE);
// 设置页脚边距
builder.getPageSetup().setHeaderDistance(35.9);
builder.getPageSetup().setFooterDistance(36);
//设置页眉的图片
builder.insertImage(picUrl, RelativeHorizontalPosition.MARGIN, 0, RelativeVerticalPosition.TOP_MARGIN, 44, 97, 27, WrapType.THROUGH);
builder.getParagraphFormat().setAlignment(ParagraphAlignment.LEFT);
// 2、开始插入页脚
// 将光标移动到页脚位置
builder.moveToHeaderFooter(HeaderFooterType.FOOTER_PRIMARY);
// 添加页脚线
Border borderFooter = builder.getParagraphFormat().getBorders().getTop();
borderFooter.setShadow( true );
borderFooter.setDistanceFromText(2);
borderFooter.setLineStyle(LineStyle.SINGLE);
// 设置页脚边距
builder.getPageSetup().setHeaderDistance(35.9);
builder.getPageSetup().setFooterDistance(36);
//设置页脚的图片
builder.insertImage(picUrl, RelativeHorizontalPosition.MARGIN, 0, RelativeVerticalPosition.TOP_MARGIN, 44, 97, 27, WrapType.THROUGH);
builder.getParagraphFormat().setAlignment(ParagraphAlignment.LEFT);
}
第三步: 测试
public static void main(String[] args) {
try {
Document document = new Document("F:\\result\\期中检测3.doc");
insertWatermarkText(document,"我的水印");
//insertFooterAndHeader(document,"我的水印");
insertImageToHeader(document,"F:\\result\\favicon.ico");
//文件输出路径
document.save("F:\\result\\期中检测4.doc");
} catch (Exception e) {
e.printStackTrace();
}
}
第四步:效果