java 根据Word模板生成文件(freemarker)

1.需要包freemarker.jar

2.首先处理模板文档

 先把文档中需要数据填充的用占位符处理,${}

 需要循环引入list ,我起了个别名product

3.把word用文档另存为的方式,生成xml文件

4.检查,处理循环数据

freemarker循环有多种方式,

我这里用的是<#list product as product></#list>,

注意检查占位符字段是否完整。

5.修改文件名后缀为".ftl"

6.上代码

import freemarker.template.Configuration;
import freemarker.template.Template;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.math.BigDecimal;
import java.nio.channels.SeekableByteChannel;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.io.BufferedWriter;

public  String  createTemplate(Map dataMap,String template_Name,HttpServletRequest request,HttpServletResponse response,String flag){
         String    fileName=null;
         String    fileUrl=null;
         try {
             //创建配置实例 
             Configuration configuration = new Configuration(); 
             //设置编码
             configuration.setDefaultEncoding("UTF-8");
             // configuration.setClassForTemplateLoading(ContractService.class,"/files"); 这是一种查找模板文件的方法,但是测试的时候我没找到文件位置  ,所以我用了另一种
             String filePath = request.getSession().getServletContext().getRealPath("");// 项目路径
             //filePath = filePath.substring(0,filePath.lastIndexOf(File.separator));
             filePath= filePath+File.separator+"files";
             System.out.println(filePath);
             configuration.setDirectoryForTemplateLoading(new File(filePath));
             //获取模板 
             Template template = configuration.getTemplate(template_Name,"UTF-8");
             //你要生成文件的名字
             fileName= "你要生成文件的名字";
             String path = request.getSession().getServletContext().getRealPath("");// 项目路径
              path = path.substring(0,path.lastIndexOf(File.separator));// 项目上一级路径
              String url = File.separator + "upload" + File.separator + "contractTj" + File.separator;            
             String storePath= path + url;
             File outFile = new File(storePath+fileOnlyName);
             fileUrl=url+fileOnlyName;
             if (!outFile.getParentFile().exists()   ){
                 outFile.getParentFile().mkdirs();
             } 
             Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8"));
             template.process(dataMap, out);
             out.flush();
             out.close();
         } catch (Exception e) {
             e.printStackTrace();
         }
         return fileUrl;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值