ETJava Beta | Java    注册   登录
  • POI读取word模板并生成word文档 案例2

    发表于 2024-07-04 01:57:00     阅读(220)     博客类别:J2SE

    POI读取word模板并生成word文档 案例2

     

    要读取的模板

    添加依赖

    <dependency>
          <groupId>com.deepoove</groupId>
          <artifactId>poi-tl</artifactId>
          <version>1.10.0</version>
        </dependency>

    案例

    package com.et.com.et.test;
    
    import com.alibaba.fastjson.JSON;
    import com.deepoove.poi.XWPFTemplate;
    import com.deepoove.poi.config.Configure;
    import com.deepoove.poi.data.PictureRenderData;
    import com.deepoove.poi.data.PictureType;
    import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
    import org.apache.commons.collections.map.HashedMap;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FilenameFilter;
    import java.util.*;
    
    public class WordTest2 {
    
        static int i=0;
        static Map<String,Object> map = new HashedMap();
    
        public static void main(String[] args) {
            try {
                // 模板文件地址
                String filePath = "D:\\demo2.docx";
                // 读取模板后保存生成word的地址
                String outPath = "D:\\作业封面.docx";
    
                readFileName(new File("C:\\Users\\etjav\\Desktop\\宋老师打印资料\\学生作业1"));
                // 读取模板、数据并渲染
                XWPFTemplate template = XWPFTemplate.compile(new File(filePath)).render(
                        // 创建一个map并设置为只读map
                        Collections.unmodifiableMap(map)
                );
    
               
                // 生成word保存在指定目录
                template.writeToFile(outPath);
                template.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    
    // 封装子目录中所有的文件名称
        private static Map<String,Object> readFileName(File file){
            if(file.listFiles()!=null){
                File[] files = file.listFiles(new FilenameFilter() {
                    @Override
                    public boolean accept(File dir, String name) {
                        File ff = new File(dir, name);
                        if (dir.isDirectory()) {
                            readFileName(ff);
                        }
                        return name.toLowerCase().endsWith(".doc") ||
                                name.toLowerCase().endsWith(".docx")||
                                name.toLowerCase().endsWith(".pdf");// 返回子目录中任意格式的所有文件
                    }
                });
    
                for (File file1 : files) {
                    i++;
                    map.put("stuNum"+i,file1.getName().split("\\+")[0]);
                    map.put("stuName"+i,file1.getName().split("\\+")[1].split("\\.")[0]);
                    map.put("classNum"+i,file1.getAbsolutePath().split("\\\\")[6]);
                }
            }
            return map;
        }
    }
    

    子目录及对应的文件

    生成的文件