java 解析word模板(2024-01-25)

本文主要功能是解析word模板

       这是一个word解析类,因为我做的系统用到了而且没有可用的帮助类,只能自己写。之前的实现方式是freemarker 模板解析。但是这次要求用poi不在使用freemarker。实现功能比较少,主要是满足开发需求即可,没有实现其它功能。实现功能如下:

1、word内文本内容解析

2、word内表格内容解析

3、word内图片内容解析

4、word脚注内容解析

     功能实现的比较匆忙没有好好设计,如果可以将图标,图片,脚注等设置为实体类,便于配置管理。

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Base64;
import java.util.List;
import java.util.Properties;

import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFFootnote;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFPicture;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.openxmlformats.schemas.drawingml.x2006.main.STSchemeColorVal;
import org.springframework.util.PropertyPlaceholderHelper;

import com.alibaba.cloud.commons.lang.StringUtils;

/**
 * 通过word模板生成新的word工具类
 **
 */
public class WordUtil {
    public static final PropertyPlaceholderHelper helper = new PropertyPlaceholderHelper("${", "}");

    /**
     * 根据模板生成新word文档 判断表格是需要替换还是需要插入,判断逻辑有$为替换,表格无$为插入
     * 
     * @param textMap 需要替换的信息集合
     * @return 成功返回true,失败返回false
     */
    public static void changWord(InputStream inputStream, Properties properties, int height, int width) {

        // InputStream in = null;
        try {
            // 获取docx解析对象
            XWPFDocument document = new XWPFDocument(inputStream);
            // 解析替换文本段落对象
            WordUtil.changeText(document, properties);
            // 解析替换表格对象
            WordUtil.changeTable(document, properties);
            // 替换文本中的图片
            WordUtil.changePicture(document, properties, height, width);
            // 脚注/尾注解析 footnote
            WordUtil.changeFootNote(document, properties);

            File file = new File("I://实体文件.docx");
            FileOutputStream stream = new FileOutputStream(file);
            document.write(stream);
            stream.close();
            document.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 尾注解析
     * 
     * @param document
     * @param properties
     */
    public static void changeFootNote(XWPFDocument document, Properties properties) {
        List<XWPFFootnote> footNoteList = document.getFootnotes();
        for (XWPFFootnote footnote : f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值