zoukankan      html  css  js  c++  java
  • Freemarker进行非空处理

    1.需求是这样的:

    一个对象可能有图片,也可能没有,在对象有图片的时候输出图片,没有的时候不做处理。

    2.新建一个doc文档,另存为Xml文档(2003版本的)。

    修改Xml文档:用Freemarker的if标签包住图片那一行,如果不为空显示,否则不做处理。

    <#if test.img??>

    <w:p wsp:rsidR="00602F11" wsp:rsidRDefault="00602F11">
    <
    w:r wsp:rsidRPr="009527B6"><w:rPr><w:noProof/></w:rPr><w:pict>
    <
    v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
    <
    v:stroke joinstyle="miter"/>
    <
    v:formulas>
    <
    v:f eqn="if lineDrawn pixelLineWidth 0"/><v:f eqn="sum @0 1 0"/>
    <
    v:f eqn="sum 0 0 @1"/><v:f eqn="prod @2 1 2"/>
    <
    v:f eqn="prod @3 21600 pixelWidth"/>
    <
    v:f eqn="prod @3 21600 pixelHeight"/>
    <
    v:f eqn="sum @0 0 1"/>
    <
    v:f eqn="prod @6 1 2"/>
    <
    v:f eqn="prod @7 21600 pixelWidth"/>
    <
    v:f eqn="sum @8 21600 0"/>
    <
    v:f eqn="prod @7 21600 pixelHeight"/>
    <
    v:f eqn="sum @10 21600 0"/>
    </
    v:formulas>
    <
    v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
    <
    o:lock v:ext="edit" aspectratio="t"/></v:shapetype>

    <
    w:binData w:name="${"wordml://0200000"+test_index+1+".jpg"}" xml:space="preserve">
    ${test.img}
    </w:binData>


    <
    v:shape id="图片 1" o:spid="_x0000_i1025" type="#_x0000_t75" style="236pt;height:144.5pt;visibility:visible;mso-wrap-style:square">
    <
    v:imagedata src="${"wordml://0200000"+test_index+1+".jpg"}" o:title=""/>
    </
    v:shape>
    </
    w:pict>
    </
    w:r>
    </
    w:p>

    </#if>

    4.Java测试代码

    package Test8;
    
    
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStreamWriter;
    import java.io.Writer;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.junit.Test;
    
    import bean.TestFreemarkerBean;
    import freemarker.template.Configuration;
    import freemarker.template.Template;
    import sun.misc.BASE64Encoder;
    
    /**
     * 如果图片不为空才显示图片,为空则不显示。
    * @author: qlq
    * @date :  2017年7月26日下午4:44:59
     */
    public class FreeamrkExport {
    
        @Test
        public void exportSimpleWord() throws Exception {
            // 要填充的数据, 注意map的key要和word中${xxx}的xxx一致
            Map<String, Object> dataMap = new HashMap<String, Object>();
            
    
            // Configuration用于读取ftl文件
            Configuration configuration = new Configuration();
            configuration.setDefaultEncoding("utf-8");
    
            /*
             * 以下是两种指定ftl文件所在目录路径的方式, 注意这两种方式都是 指定ftl文件所在目录的路径,而不是ftl文件的路径
             */
            // 指定路径的第一种方式(根据某个类的相对路径指定)
            configuration.setClassForTemplateLoading(this.getClass(), "");
            // 指定路径的第二种方式,我的路径是C:/a.ftl
            // configuration.setDirectoryForTemplateLoading(new File("C:/"));
    
            List<person> mylist = new ArrayList<person>();
            mylist.add(new person("QQQ", getImageStr("C:/Users/liqiang/Desktop/tupian/kdmt.jpg"), "11111111111111"));
            mylist.add(new person("QQQ", getImageStr("C:/Users/liqiang/Desktop/tupian/2.jpg"), "11111111111111"));
            mylist.add(new person("QQQ", getImageStr("C:/Users/liqiang/Desktop/tupian/1.jpg"), "11111111111111"));
            mylist.add(new person("QQQ", getImageStr("C:/Users/liqiang/Desktop/tupian/3.jpg"), "11111111111111"));
            mylist.add(new person("QQQ", getImageStr("C:/Users/liqiang/Desktop/tupian/4.jpg"), "11111111111111"));
            mylist.add(new person("QQQ", "11111111111111"));
            mylist.add(new person("QQQ", "11111111111111"));
            dataMap.put("mylist", mylist);
            // 输出文档路径及名称
            File outFile = new File("F:/test8.doc");
    
            // 以utf-8的编码读取ftl文件
            Template t = configuration.getTemplate("test8.ftl", "utf-8");
            Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"), 10240);
            t.process(dataMap, out);
            out.close();
        }
        private String getImageStr(String imgFile) throws Exception {
            InputStream inputStream = null;
            byte []data=null;
            inputStream = new FileInputStream(imgFile);
            data = new byte[inputStream.available()];
            inputStream.read(data);
            inputStream .close();
            BASE64Encoder encoder = new BASE64Encoder();
            return encoder.encode(data);
            
        }
    }

     5.结果:

    最后两个img属性为null,则不输出。

  • 相关阅读:
    浅谈我对几个Web前端开发框架的比较
    国内最火的五款HTML5前端开发框架
    比较JSF、Spring MVC、Stripes、Struts 2、Tapestry、Wicket
    请问实现MVC的框架有哪些,实现持久化操作的框架有哪些,还有类似于spring整合的框架又有哪些
    Guice与Spring框架的区别
    致Play Framework开发者们的一封信
    有可能挑战Java优势的四种技术
    大家所说的full-stack框架到底是指什么?
    db_table--Spring Security3.1 最新配置实例
    JEECG平台JWT接口文档
  • 原文地址:https://www.cnblogs.com/qlqwjy/p/7240610.html
Copyright © 2011-2022 走看看