• 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

  • 相关阅读:
    Linux 设备驱动 Edition 3(中文版)
    内核和用户空间共享内存的实现例程proc和mmap
    mmap的详细使用(用户空间)
    使用 I/O 内存from LDD3
    关于strcpy、memset、memcpy的使用详解
    get_free_page 和其友
    Linux调试技术介绍
    关于信息时代的学习
    [恢]hdu 1196
    [恢]hdu 1157
  • 原文地址:https://www.cnblogs.com/IceBlueBrother/p/8745282.html
Copyright © 2020-2023  润新知