背景
為了實現(xiàn)一個根據(jù)選擇不同的模板進(jìn)模板內(nèi)容的替換
新建一個Content.java類,他包含了一個根據(jù)模板生成對應(yīng)的字符竄內(nèi)容的方法
package com.drink.admin.print.yly;
import com.drink.admin.print.TemplateData;
public interface Content {
String generateContentByTemplate(TemplateData templateData);
}
新建一個模板的實現(xiàn)類 OneContent.java類
package com.drink.admin.print.yly;
import com.drink.admin.print.TemplateData;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.Version;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
public class OneContent implements Content {
@Override
public String generateContentByTemplate(TemplateData templateData) {
String ticketTemplateOne = "<FB><FW><FH><FS><center>${template.storeName}</center></FS></FH></FW></FB>\n" +
"<FB><FW><FH><FS><center>#${template.orderTakeNo}</center></FS></FH></FW></FB>" + "\n" +
"<FB><center>${template.storeAddress}</center></FB>\r";
ticketTemplateOne += "<FB><FH><center>餐桌號:${template.orderTableCode}</center></FH></FB>";
ticketTemplateOne +=
"<FB>訂單號:${template.orderNo}\r下單時間:${template.orderTime}</FB>\n" +
"<center> ———————————————</center>" + "\r" +
"<FB>收貨人:</FB>${template.receiveName}\r\r" +
"<FB>收貨地址:</FB>${template.receiveAddress}\r\r" +
"<FB>電話號碼:</FB>${template.receivePhone}\r\r" +
"<center>…………………………………………</center>" + "\r${template.itemContent}\n\n" +
"<center>…………………………………………</center>" +
"<table><tr><td>包裝費</td><td></td><td>¥${template.packFee}</td></tr></table>\r" +
"<table><tr><td>配送費</td><td></td><td>¥${template.shipFee}</td></tr></table>\r" +
"<table><tr><td>優(yōu)惠券及活動</td><td></td><td>-¥${template.activityCouponPrice}</td></tr></table>\r" +
"<table><tr><td>合計</td><td>${template.countNumber}</td><td>¥${template.realPayPrice}</td></tr></table>\r" +
"備注: ${template.memo}\r" +
"<center>…………………………………………</center>" +
"<FB>實付金額</FB><table><tr><td></td><td>¥${template.realPayPrice}</td></tr></table>" +
"<center>…………………………………………</center>" +
"<QR>${template.kfQrcode}</QR>\r" +
"<FB><FS><center>如有問題請聯(lián)系客服</center></FS></FB><center>${template.storeTel}</center>";
StringWriter result = new StringWriter();
Map templateMap = new HashMap();
templateMap.put("template", templateData);
Template template = null;
try {
template = new Template("strTpl", ticketTemplateOne, new Configuration(new Version("2.3.23")));
template.process(templateMap, result);
} catch (Exception e) {
e.printStackTrace();
}
return result.toString();
}
}
新建一個枚舉類,包含了所有的模板相關(guān)的信息PrintTemplateEnum.java
package com.drink.admin.print.yly.constant;
import com.drink.admin.print.yly.model.TemplateOneData;
import com.drink.admin.print.yly.model.TemplateTwoData;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.Version;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
import static com.drink.admin.print.yly.constant.YlyTemplate.*;
/**
* @author xu
*/
public enum PrintTemplateEnum {
/**
* 模板一 打印小票
*/
TEMPLATE_ONE(1, new OneContent());
private Integer code;
private Content content;
PrintTemplateEnum(int code, Content content) {
this.code = code;
this.content = content;
}
public Integer getCode() {
return code;
}
public Content getContent() {
return content;
}
}
測試調(diào)用
public static void main(String[] args) {
TemplateData templateData = new TemplateData();
// 選中對應(yīng)的內(nèi)容
for (PrintTemplateEnum value : PrintTemplateEnum.values()) {
if (value.getCode().equals(1)) {
Content content = value.getContent();
String s = content.generateContentByTemplate(templateData);
System.out.println(s);
}
}
}