zoukankan      html  css  js  c++  java
  • Word根据模板生成数据

    就是有个模板,完全保留模板样式的情况下,在相应的地方更改或保留数据

    第一个类:

     

    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.Map;
    public class WordUtil {
    //参数按顺序分别是模板路径,文件输出到的路径,替换的内容
    public static void WriteWordByMB(String pathIn,String PathOut,Map<String, Object> changeMap){
    try {
    WordTemplate template = null;
    //先获取模板
    File filein = new File(pathIn);
    FileInputStream fileInputStream = null;
    fileInputStream = new FileInputStream(filein);
    template = new WordTemplate(fileInputStream);
    //替换模板内容
    template.replaceTag(changeMap);
    //导出
    File fileout = new File(PathOut);
    FileOutputStream out;
    out = new FileOutputStream(fileout);
    BufferedOutputStream bos = new BufferedOutputStream(out);
    template.write(bos);

                     fileInputStream.close();
                     out.close();
                     bos.close();

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

    }

     

    里面调用的另一个类

    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.List;
    import java.util.Map;

    import org.apache.poi.hwpf.HWPFDocument;
    import org.apache.poi.hwpf.usermodel.Range;
    import org.apache.poi.xwpf.usermodel.XWPFDocument;
    import org.apache.poi.xwpf.usermodel.XWPFParagraph;
    import org.apache.poi.xwpf.usermodel.XWPFTable;

    import com.lowagie.text.Document;

    /**
     * 仅支持对docx文件的文本及表格中的内容进行替换
     * 模板仅支持 ${key} 标签
     * @author JianQiu
     *
     */
    public class WordTemplate {

    private static HWPFDocument document;

    /**
    * 初始化模板内容
    * @param inputStream 模板的读取流(doc文件)
    * @throws IOException
    */
    public WordTemplate(InputStream inputStream) throws IOException{
    document = new HWPFDocument(inputStream);
    }

    public void replaceTag(Map<String, Object> changeMap){
    Range range=document.getRange();
    for (Map.Entry<String,Object> entry: changeMap.entrySet()) {
    range.replaceText("${" + entry.getKey() + "}",
    String.valueOf(entry.getValue()));
            }
    }

    public void write(OutputStream outputStream) throws IOException{
    document.write(outputStream);
    }
    }
     
    文件夹不一定存在的话

    public static void WriteWordByMB(String pathIn, String pathOut, Map<String, Object> changeMap,                 String FileName) {
      try {
        // 先获取模板
        FileInputStream fileInputStream = new FileInputStream(pathIn);
        WordTemplate template = new WordTemplate(fileInputStream);
        // 替换模板内容
        template.replaceTag(changeMap);
        File f = new File(pathOut);
        // 判断文件夹是否已经存在,如果不存在重新建
        if (!f.exists()) {
          f.mkdirs();
        }

    
    

        // 导出
        FileOutputStream out = new FileOutputStream(pathOut + "/" + FileName);
        BufferedOutputStream bos = new BufferedOutputStream(out);
        template.write(bos);
        fileInputStream.close();
        out.close();
        bos.close();
      } catch (Exception e) {
        e.printStackTrace();
      }
    }

     

     

    以上方法只适用于doc

    docx方法可以试试这个(我没试过的……):https://blog.csdn.net/sadwxds/article/details/51331060

  • 相关阅读:
    RocketMQ消息模型
    RabbitMQ消息模型
    消息队列选择
    消息队列使用场景
    synchronized底层实现
    Java 内存模型
    MySql中的字符数据类型
    php页面编码与字符操作
    git学习总结
    SESSION机制
  • 原文地址:https://www.cnblogs.com/IceBlueBrother/p/8745282.html
Copyright © 2011-2022 走看看