java实现简单word文档生成

package testModel;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTBody;

public class WordExportTest {

    public static void main(String[] args) {

        System.out.println("-----------------------start");

        List<Map<String, String>> lms = new ArrayList<Map<String,String>>();    
        Map<String, String> map_re = new HashMap<String, String>();
        SimpleDateFormat format =  new SimpleDateFormat("yyyy年MM月dd日");
        map_re.put("name", "李白");
        map_re.put("name2", "太白");
        map_re.put("con", "李白 (唐代著名浪漫主义诗人)");
        map_re.put("con2", "李白(701年-762年) ,字太白,号青莲居士,又号“谪仙人”,是唐代伟大的浪漫主义诗人,被后人誉为“诗仙”,与杜甫并称为“李杜”,"
                + "为了与另两位诗人李商隐与杜牧即“小李杜”区别,杜甫与李白又合称“大李杜”。据《新唐书》记载,李白为兴圣皇帝(凉武昭王李暠)九世孙,与李唐诸王同宗。其人爽朗大方,爱饮酒作诗,喜交友。"
                + "李白深受黄老列庄思想影响,有《李太白集》传世,诗作中多以醉时写的,代表作有《望庐山瀑布》《行路难》《蜀道难》《将进酒》《梁甫吟》《早发白帝城》等多首。" 
                + "李白所作词赋,宋人已有传记(如文莹《湘山野录》卷上),就其开创意义及艺术成就而言,“李白词”享有极为崇高的地位。");
        map_re.put("now_date", format.format(new Date()));
        lms.add(map_re);// 第一份
        //lms.add(map_re);// 第二份(这里与第一份相同了,,因为懒我,)
        replaceWord("D:\\opensour\\apache-tomcat-8.0.30\\webapps\\file-service\\uploadfile\\word\\wordModel.docx", lms, "D:\\opensour\\apache-tomcat-8.0.30\\webapps\\file-service\\uploadfile\\word\\dd.docx");

        System.out.println("-----------------------end");

    }

    @SuppressWarnings({ "resource", "unused" })
    /**
     * 
     * @param mbFilePath 获取word模板路径
     * @param mapRes 数据源
     * @param outFilePath 导出word路径
     */
    public static void replaceWord(String mbFilePath,List<Map<String, String>> mapRes,String outFilePath) {

        ByteArrayOutputStream oStream = new ByteArrayOutputStream(); 
        
        OutputStream out = null; 

        try {

            // 读入模板文件
            InputStream in = new FileInputStream(new File(mbFilePath));
            // InputStream in = WordExportTest.class.getResourceAsStream("/LifeHouseinspectionsExcel/wordModel.docx");

            // 创建一个word对象
            XWPFDocument docu = new XWPFDocument(in);

            CTBody body = docu.getDocument().getBody();

            if(mapRes.size() > 1)
                docu.createParagraph().setPageBreak(true);// 设置分页符
            CTBody mbody = docu.getDocument().getBody();
            String src_mdoc = mbody.xmlText();
            String src_mdoc_start = src_mdoc.substring(0, src_mdoc.indexOf(">") + 1);
            String src_mdoc_main = src_mdoc.substring(src_mdoc.indexOf(">") + 1, src_mdoc.lastIndexOf("<"));
            String src_mdoc_end = src_mdoc.substring(src_mdoc.lastIndexOf("<"));

            StringBuffer bodyt = new StringBuffer();
            bodyt.append(src_mdoc_start);
            for (int i = 0; i < mapRes.size(); i++) {
                String src_mdoc_add = src_mdoc_main;
                Map<String, String> entry = mapRes.get(i);
                List<String> keys = new ArrayList<String>(entry.keySet());
                // 替换内容到  word 中标记的位置
                for (int j = 0; j < keys.size(); j++) {
                    src_mdoc_add = src_mdoc_add.replace("${" + keys.get(j) + "}", entry.get(keys.get(j)));
                }
                bodyt.append(src_mdoc_add);
            }
            bodyt.append(src_mdoc_end);
            // CTBody parse = CTBody.Factory.parse(bodyt.toString());
            docu.getDocument().getBody().set(CTBody.Factory.parse(bodyt.toString()));

            out = new FileOutputStream(outFilePath,true);
            docu.write(oStream);
            out.write(oStream.toByteArray());
            out.flush();

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if(out != null) {
                    out.close();
                }
                oStream.close();
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }

    }
}

word模板:

word生成:

猜你喜欢

转载自blog.csdn.net/weixin_41802726/article/details/85048501