• 尝试使用freemarker模板引擎生成打印文件


    尝试使用freemarker模板引擎生成打印文件

    参考

    freemarker中文

    freemarker官网

    依赖

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/>
    </parent>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-freemarker</artifactId>
    </dependency>
    

    测试代码

    package com.mozq.freemarker.freemarker01.demo;
    
    import freemarker.template.Configuration;
    import freemarker.template.Template;
    import freemarker.template.TemplateException;
    import freemarker.template.TemplateExceptionHandler;
    
    import java.io.File;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.io.Writer;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;
    
    
    public class Demo_02 {
        public static void main(String[] args) throws IOException, TemplateException {
            // Create your Configuration instance, and specify if up to what FreeMarker
    // version (here 2.3.22) do you want to apply the fixes that are not 100%
    // backward-compatible. See the Configuration JavaDoc for details.
            Configuration cfg = new Configuration(Configuration.VERSION_2_3_22);
    
    // Specify the source where the template files come from. Here I set a
    // plain directory for it, but non-file-system sources are possible too:
            cfg.setDirectoryForTemplateLoading(new File("E:\mozq\demo_project\mozq_01\freemarker-01\src\main\resources\templates"));
    
    // Set the preferred charset template files are stored in. UTF-8 is
    // a good choice in most applications:
            cfg.setDefaultEncoding("UTF-8");
    
    // Sets how errors will appear.
    // During web page *development* TemplateExceptionHandler.HTML_DEBUG_HANDLER is better.
            cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
    
            // Create the root hash
            Map<String, Object> root = new HashMap<>();
    // Put string ``user'' into the root
            root.put("code", "BigJoe");
            root.put("orderQuipment", 6);
            root.put("orderStatus", 1);
            root.put("successDate", new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
            root.put("tableId", "123");
    // Create the hash for ``latestProduct''
            Map<String, Object> latest = new HashMap<>();
    // and put it into the root
            root.put("latestProduct", latest);
    // put ``url'' and ``name'' into latest
            latest.put("url", "products/greenmouse.html");
            latest.put("name", "green mouse");
    
            Template temp = cfg.getTemplate("前台联.ftl");
    
            //将输出打印到控制台
            Writer out = new OutputStreamWriter(System.out);
    
            //将输出结果转换为字符串
            StringWriter stringWriter = new StringWriter();
            temp.process(root, stringWriter);
            String result = stringWriter.toString();
    
            System.out.println(result);
        }
    }
    

    模板文件

    <html>
    <head><meta http-equiv='Content-Type' content='text/html; charset=UTF-8' /></head>
    <body>
    <#if orderQuipment == 1>
        <p style='text-align:center;font-size: 48px;font-weight: bold;'>预点餐前台联</p>
    <#elseif orderQuipment == 6>
        <p style='text-align:center;font-size: 48px;font-weight: bold;'>外卖前台联</p>
    <#else>
        <p style='text-align:center;font-size: 48px;font-weight: bold;'>前台联</p>
    </#if>
    
    <#if tableId?? && tableId != ''>
        <p style='text-align:center;font-size: 48px;font-weight: bold;'>餐桌号:${tableId}</p>
    </#if>
    
    <#if orderStatus?? && orderStatus == 1>
    <p style='Width:100%;text-align: left;font-weight: bold;'>支付时间:${successDate} </p>
        <#if orderQuipment?? && orderQuipment != 5>
    <p style='Width:100%;text-align: left;font-weight: bold;'>支付状态:已支付</p>
        </#if>
    </#if>
    </body>
    </html>
    

    变量判空

    <#if mouse??>
      Mouse found
    <#else>
      No mouse found
    </#if>
    

    bugs

    The following has evaluated to null or missing:
    ==> tableId  [in template "前台联.ftl" at line 12, column 6]
    
    ----
    Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
    ----
    错误代码:
    <#if tableId != null && tableId != ''>
        <p style='text-align:center;font-size: 48px;font-weight: bold;'>餐桌号:${tableId}</p>
    </#if>
    
  • 相关阅读:
    Java实现三人年龄
    从session中获取当前用户的工具类
    全局Session-GlobalSession
    Request获取Session的两种方式
    跨域访问sessionid不一致问题
    获得HttpServletRequest 和HttpSession对象
    eclipse pom.xml 报错org.apache.maven.plugin.war.WarMojo的解决办法
    idea与eclipse项目相互导入的过程
    静态工具类中使用注解注入service实例
    解决静态utils里面注入mapper对象
  • 原文地址:https://www.cnblogs.com/mozq/p/12106856.html
Copyright © 2020-2023  润新知