freemarker典型场景

  1. 将原始的, 用户给过来的 origin.docx 另存为 xml格式 生成origin.xml
  2. 用https://tool.oschina.net/codeformat/xml 将xml格式化, 便于修改
  3. 定位到要替换的变量
  4. 将origin.xml 改名为 origin.ftl

Over
模板制作完毕,代码里用就可以了

这样做有一个巨大的好处是, docx是用户给的,他需要考虑所有情况,包括字段过长自动扩展列的高度等等所有问题.
开发只需要替换变量就行了.
将处理word格式这个无底洞给了用户, 而且这个也一般是付钱找人设计的.专业的事专业的人做

上代码


import freemarker.cache.ClassTemplateLoader;
import freemarker.cache.TemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.Template;
private static Configuration configuration = null;
    public static void main(String s[]) {
    
    
    	
    	WordUtils m = new WordUtils();
    	
//服务器    	
//    	String templateFolder = File.separator + WordUtils.class.getClassLoader().getResource("/").getPath().replaceAll("^(/)|(/WEB-INF/classes/)$", "")+"/print/templete/ftl/";
//本地开发
    	String templateFolder ="E:/word/";
    	
    	configuration = new Configuration();
        configuration.setDefaultEncoding("utf-8");
        try {
    
    
            configuration.setDirectoryForTemplateLoading(new File(templateFolder));
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
        
    	m.doit();
    }

    public void doit() {
    
    
         
        try {
    
    
          
        	Template template  = configuration.getTemplate("origin.ftl");
        	
        //本地创建空文件  
            String fileName = "E:/word/outFile.doc";
            File outFile = new File(fileName);
            outFile.createNewFile();
            Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8"));
            
            HashMap data = new HashMap();
            data.put("clientId", "helloword哈喽");
            data.put("providerName", "alsdjflksadjkljgsalkg jsaalsdjflksadjkljgsalkgjsa alsdjfljflksadjkljgsalkg jsaalsdjflksadjkljgsalkgjsa alsdjflksadjkljgjflksadjkljgsalkg jsaalsdjflksadjkljgsalkgjsa alsdjflksadjkljgjflksadjkljgsalkg jsaalsdjflksadjkljgsalkgjsa alsdjflksadjkljgksadjkljgsalkgjsa alsdjflksadjkljgsalkgjsa");
            
            
            List<FeeDetail> feeDetailList =new ArrayList<FeeDetail>();
            
            FeeDetail feeDetail_1 = new FeeDetail();
            feeDetail_1.setSDEnglish("additional procedures to construct new crown under existing partial denture framework");
            feeDetail_1.setSDChinese("哈哈哈哈哈");
            feeDetail_1.setIA("11");
            feeDetail_1.setDA("22");
            feeDetail_1.setCT("33");
            feeDetail_1.setCBOI("44");
            feeDetail_1.setOther("5");
            feeDetail_1.setMR("66");
            feeDetail_1.setAC("77");
            feeDetailList.add(feeDetail_1);
            
            FeeDetail feeDetail_2 = new FeeDetail();
            feeDetail_2.setSDEnglish("rofessional Feesrofessional Feesrofessional Feesrofessional Feesrofessional Fees");
            feeDetail_2.setSDChinese("哈哈哈哈9哈");
            feeDetail_2.setIA("191");
            feeDetail_2.setDA("292");
            feeDetail_2.setCT("393");
            feeDetail_2.setCBOI("494");
            feeDetail_2.setOther("59");
            feeDetail_2.setMR("696");
            feeDetail_2.setAC("797");
            feeDetailList.add(feeDetail_2);
            
            data.put("feeDetailList",feeDetailList);
            
            //将内容写进创建的outFile文件中
            template.process(data, out);
            out.close();
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
    }

和list的元素


/*
 * freemarker 需要的list的元素类型, 必须是public类, 且最好变量驼峰命名
 */
public class FeeDetail {
    
     
	String SDEnglish;
	String SDChinese;
	
	String IA;
	String DA;
	String CT;
	String CBOI;
	String other;
	String MR;
	String AC;
	public String getSDEnglish() {
    
    
		return SDEnglish;
	}
	public void setSDEnglish(String sDEnglish) {
    
    
		SDEnglish = sDEnglish;
	}
	public String getSDChinese() {
    
    
		return SDChinese;
	}
	public void setSDChinese(String sDChinese) {
    
    
		SDChinese = sDChinese;
	}
	public String getIA() {
    
    
		return IA;
	}
	public void setIA(String IAa) {
    
    
		IA = IAa;
	}
	public String getDA() {
    
    
		return DA;
	}
	public void setDA(String dA) {
    
    
		DA = dA;
	}
	public String getCT() {
    
    
		return CT;
	}
	public void setCT(String cT) {
    
    
		CT = cT;
	}
	public String getCBOI() {
    
    
		return CBOI;
	}
	public void setCBOI(String cBOI) {
    
    
		CBOI = cBOI;
	}
	public String getOther() {
    
    
		return other;
	}
	public void setOther(String o) {
    
    
		other = o;
	}
	public String getMR() {
    
    
		return MR;
	}
	public void setMR(String mR) {
    
    
		MR = mR;
	}
	public String getAC() {
    
    
		return AC;
	}
	public void setAC(String aC) {
    
    
		AC = aC;
	}
	
}

猜你喜欢

转载自blog.csdn.net/wangduqiang747/article/details/113864562
今日推荐