java操作word,添加页眉,页眉图片,替换书签,添加水印(全)

1 篇文章 1 订阅

java操作word文档,添加页眉文本,页眉图片,替换书签,水印

原模板截图:
模板文档
生成后的文档效果截图:
生成后的文档

第一步:引入maven

<dependency>
    <groupId>spire.doc</groupId>
    <artifactId>spire.doc</artifactId>
    <version>2.6.2</version>
</dependency>

第二步:编写操作类,直接上代码,方法都有说明

package com.example.poi_test.util;

import com.spire.doc.*;
import com.spire.doc.documents.*;
import com.spire.doc.fields.DocPicture;
import com.spire.doc.fields.TextRange;
import lombok.Data;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Map;

/**
 * @author ShenGuiSong
 * @create 2020-03-09 17:35
 */
@Data
public class WordUtil0309 {

    private Document doc = null;


    /**
     * 替换书签
     * @param bookMarks
     */
    public void replaceBookMark(Map<String,String> bookMarks){
        //定位到书签"SimpleBookmark"
        BookmarksNavigator bookmarkNavigator = new BookmarksNavigator(doc);
        if(bookMarks==null || bookMarks.size()<1) return;
        for(Map.Entry<String,String> entry:bookMarks.entrySet()){
            String key=entry.getKey();
            bookmarkNavigator.moveToBookmark(key);
            String value=entry.getValue();
            //使用文本替换原书签的内容, false表示不保留原来的格式
            bookmarkNavigator.replaceBookmarkContent(value, false);
        }

    }

    /**
     * 设置页边距
     * @param top
     * @param bottom
     * @param left
     * @param right
     */
    public void setMargin(Float top,Float bottom,Float left,Float right){
        Section section = doc.getSections().get(0);
        //设置页边距
        if (top != null) {
            section.getPageSetup().getMargins().setTop(top);
        }
        if (bottom != null) {
            section.getPageSetup().getMargins().setBottom(bottom);
        }
        if (left != null) {
            section.getPageSetup().getMargins().setLeft(left);
        }
        if (right != null) {
            section.getPageSetup().getMargins().setRight(right);
        }
    }

    /**
     * 添加图片到页眉
     * @param pic               图片地址
     * @param horizontalOffset  水平偏移量
     * @param verticalPosition  垂直偏移量
     * @param align             图片依左右边距/上下边距对齐方式
     * @param picWidth          图片宽度
     * @param picHeigth         图片高度
     */
    public void addPicToHeader(String pic,Float horizontalOffset,Float verticalPosition,ShapeHorizontalAlignment align,Float picWidth,Float picHeigth ) {
        Section section = doc.getSections().get(0);
        HeaderFooter header = section.getHeadersFooters().getHeader();
        DocPicture headerPicture=null;
        //添加段落到页眉
        //插入图片到页眉的段落
        if(header.getLastParagraph()!=null){
            headerPicture=header.getFirstParagraph().appendPicture(pic);
        }else{
            headerPicture=header.addParagraph().appendPicture(pic);
        }
        headerPicture.setWidth(picWidth);
        headerPicture.setHeight( picHeigth );
        //设置图片水平位置
        if(horizontalOffset !=null && verticalPosition!=null ){
            headerPicture.setHorizontalPosition(horizontalOffset);
            headerPicture.setVerticalPosition(verticalPosition);
        }else{
            headerPicture.setHorizontalAlignment(align);
        }
        //设置文字环绕方式
        headerPicture.setTextWrappingStyle(TextWrappingStyle.Behind);
    }


    /**
     * 添加水印
     * @param pic
     * @param horizontalOffset
     * @param verticalPosition
     * @param picWidth
     * @param picHeigth
     */
    public void addWater(String pic,Float horizontalOffset,Float verticalPosition,Float picWidth,Float picHeigth ) {
        Section section = doc.getSections().get(0);
        HeaderFooter header = section.getHeadersFooters().getHeader();
        DocPicture headerPicture=null;
        if(header.getLastParagraph()!=null){
            headerPicture=header.getFirstParagraph().appendPicture(pic);
        }else{
            headerPicture=header.addParagraph().appendPicture(pic);
        }
        headerPicture.setWidth(picWidth);
        headerPicture.setHeight( picHeigth );
        //设置图片水平位置
        headerPicture.setHorizontalPosition(horizontalOffset);
        headerPicture.setVerticalPosition(verticalPosition);
        //设置文字环绕方式
        headerPicture.setTextWrappingStyle(TextWrappingStyle.Behind);
    }

    /**
     * 添加文本到页眉
     * @param headerContent
     */
    public void addTextToHeader(String headerContent) {
        Section section = doc.getSections().get(0);
        HeaderFooter header = section.getHeadersFooters().getHeader();
        //添加段落到页眉
        Paragraph headerParagraph = header.addParagraph();
        //添加文字到页眉的段落
        TextRange text = headerParagraph.appendText(headerContent);
        text.getCharacterFormat().setFontName("宋体");
        text.getCharacterFormat().setFontSize(11);
        headerParagraph.getFormat().setHorizontalAlignment(HorizontalAlignment.Left);
    }



    /**
     * 获取WordUtil工具类实例
     * @param filePath
     * @return
     */
    public static WordUtil0309 getInstance(String filePath){
        WordUtil0309 wordUtil=new WordUtil0309();
        try {
            //加载word示例文档
            wordUtil.doc = new Document();
            wordUtil.doc.loadFromFile(filePath);
        }catch (Exception e){
            System.out.println("读取文档失败");
            e.printStackTrace();
        }
        return wordUtil;
    }



    /**
     * 保存文档
     * @param outFilePath
     */
    public void saveDocument(String outFilePath){
        try {
            doc.saveToFile(outFilePath);
        } catch (Exception e) {
            System.out.println("保存文档失败");
            e.printStackTrace();
        }
    }

    /**
     * 关闭流
     */
    public void close(){
        try {
            if(doc!=null){
                doc.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


}

第三步 .测试调用

package com.example.poi_test.util;

import com.spire.doc.Document;
import com.spire.doc.Section;
import com.spire.doc.ShapeHorizontalAlignment;
import com.spire.doc.documents.BookmarksNavigator;
import com.spire.doc.documents.Paragraph;
import com.spire.doc.documents.TextBodyPart;
import com.spire.doc.fields.TextRange;

import java.text.SimpleDateFormat;
import java.util.*;

/**
 * @author ShenGuiSong
 * @create 2019-10-19 16:33
 */
public class Test {



    /**
     * 测试
     * @param args
     */
    public static void main(String[] args) {
	WordUtil0309wordUtil=WordUtil0309.getInstance("C:/template/boke.docx");

        Map<String,String> map=new HashMap<>();
        map.put("天气","晴");
        map.put("巡视主要工作内容","测试巡视主要工作内容");
        map.put("巡视施工管理人员情况","imya fdskfjsdkfjsdkfjsdf");
        map.put("日期","2020-03-09");

        wordUtil.replaceBookMark(map);

        wordUtil.setMargin(75f,null,null,null);
        //添加页头logo
        wordUtil.addPicToHeader("c:/template/logo1.jpg",-25f,8f,null,25f,25f);
        //项目名称
        wordUtil.addTextToHeader("测试项目名称");
        //页头二维码
        Float width=wordUtil.getDoc().getSections().get(0).getPageSetup().getClientWidth();
        wordUtil.addPicToHeader("c:/template/qr.jpg",width-50f,-20f,null,60f,60f);

        //添加水印
        wordUtil.addWater("c:/template/water1.jpg",50f,100f,60f,60f);

        wordUtil.saveDocument("C:/template/0219/boke"+
                new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()).substring(8,14)+".docx");
        wordUtil.close();
          }
}
  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿松哥哥2018

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值