Freemarker生成HTML模版页面

一 : 首先第一步
        放freemark的jar包
<!-- freemarker模版jar -->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.20</version>
        </dependency>
二 : 第二步

新建包

将FreemarkerUtil放进去 
package cn.jbit.jd.freemarker;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

public class FreemarkerUtil {


    public void createWord(String path,Map<String, Object> dataMap) {

        Configuration configuration = new Configuration();
        configuration.setDefaultEncoding("UTF-8");  
        // ========================获取模板=========================================
        configuration.setClassForTemplateLoading(FreemarkerUtil.class, "html"); // FTL文件所存在的位置
        Template t = null;
        try {
            t = configuration.getTemplate("index.ftl"); // 文件名
            t.setEncoding("UTF-8");
        } catch (IOException e) {
            e.printStackTrace();
        }
        //===========================生成页面========================================
        File outFile = new File(path);
        Writer out = null;
        try {
            out = new BufferedWriter(new OutputStreamWriter(
                    new FileOutputStream(outFile),"UTF-8"));
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        try {
            t.process(dataMap, out);
        } catch (TemplateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Index.ftl示例模版

<html>
<head>
<meta charset="UTF-8">
<title>${title}</title>
<link rel="stylesheet" href="css/main.css">
</head>
<body>
    <div class="top"></div>
    <!--导航 Start-->
    <div class="menu">
        <div class="all-sort">
            <h2>
                <a href="">${alltype}</a>
            </h2>
        </div>
        <div class="ad">
            <a href=""> <img
                src="images/rBEhVlJEA84IAAAAAAAZY9Mm2-UAADmFQNaVy4AABl7123.jpg"
                width="141" height="40" /> </a>
        </div>
        <div class="nav">
            <ul class="clearfix">
                <li><a href="http://sc.chinaz.com" class="current">${index}</a>
                </li>
                <li><a href="http://sc.chinaz.com">${dress}</a>
                </li>
                <li><a href="http://sc.chinaz.com">${supermarket}</a>
                </li>
                <li><a href="http://sc.chinaz.com">${teamBuy}</a>
                </li>
                <li><a href="http://sc.chinaz.com">${auction}</a>
                </li>
                <li><a href="http://sc.chinaz.com">${OnlineGame}</a>
                </li>
            </ul>
        </div>
    </div>
    <!--导航 End-->

<!--所有分类 Start-->
            <#list goodsCetegory as goodsCetegory >
    <div class="wrap">
        <div class="all-sort-list">
            <div class="item bo">
                <h3><span>·</span><a href="">${goodsCetegory.name}</a><!-- <a href="">图书</a>、<a href="">音像</a>、<a href="">数字商品</a> --></h3>
                <div class="item-list clearfix">
                    <div class="close">x</div>
                    <div class="subitem">
                    <#list goodsTwoCetegory as goodsTwoCetegory >
                        <dl class="fore1">
                                <#if (goodsTwoCetegory.pid == goodsCetegory.id ) >
                                        <dt><a href="#">${goodsTwoCetegory.name }</a></dt>
                                <#list goodsThreeeCetegory as goodsThreeeCetegory >
                                <#if (goodsThreeeCetegory.pid == goodsTwoCetegory.id) >
                                        <dd><em><a href="#">${goodsThreeeCetegory.name }</a></em></dd>
                                    </#if>
                                </#list>
                                </#if>
                        </dl>
                    </#list>
                    </div>
                        <!---------------------------------------------循环体-------------------------------------------------------->
                        <div class="cat-right">
                            <dl class="categorys-promotions"
                                clstag="homepage|keycount|home2013|0601c">
                                <dd>
                                    <ul>
                                        <li><a href="#" target="_blank"><img
                                                src="images/rBEhWFJTydgIAAAAAAAiD8_1J3AAAD5mAMC0SYAACIn230.jpg"
                                                width="194" height="70" title="特价书满减"> </a>
                                        </li>
                                        <li><a href="#" target="_blank"><img
                                                src="images/rBEhVlJTyt8IAAAAAAAiq1D-0D8AAD7_gIE2KUAACLD102.jpg"
                                                width="194" height="70" title="重磅独家"> </a>
                                        </li>
                                    </ul>
                                </dd>
                            </dl>
                            <dl class="categorys-brands"
                                clstag="homepage|keycount|home2013|0601d">
                                <dt>推荐品牌出版商</dt>
                                <dd>
                                    <ul>
                                        <li><a href="#" target="_blank">中华书局</a>
                                        </li>
                                        <li><a href="#" target="_blank">人民邮电出版社</a>
                                        </li>
                                        <li><a href="#" target="_blank">上海世纪出版股份有限公司</a>
                                        </li>
                                        <li><a href="#" target="_blank">电子工业出版社</a>
                                        </li>
                                        <li><a href="#" target="_blank">三联书店</a>
                                        </li>
                                        <li><a href="#" target="_blank">浙江少年儿童出版社</a>
                                        </li>
                                        <li><a href="#" target="_blank">人民文学出版社</a>
                                        </li>
                                        <li><a href="#" target="_blank">外语教学与研究出版社</a>
                                        </li>
                                        <li><a href="#" target="_blank">中信出版社</a>
                                        </li>
                                        <li><a href="#" target="_blank">化学工业出版社</a>
                                        </li>
                                        <li><a href="#" target="_blank">北京大学出版社</a>
                                        </li>
                                    </ul>
                                </dd>
                            </dl>
                        </div>
                    </div>
                </div>
        </div>
            </#list>
    </div>
    <!--所有分类 End-->
    <script type="text/javascript" src="js/jquery.min.js"></script>
    <script type="text/javascript">
        $('.all-sort-list > .item').hover(
                function() {
                    var eq = $('.all-sort-list > .item').index(this), //获取当前滑过是第几个元素
                    h = $('.all-sort-list').offset().top, //获取当前下拉菜单距离窗口多少像素
                    s = $(window).scrollTop(), //获取游览器滚动了多少高度
                    i = $(this).offset().top, //当前元素滑过距离窗口多少像素
                    item = $(this).children('.item-list').height(), //下拉菜单子类内容容器的高度
                    sort = $('.all-sort-list').height(); //父类分类列表容器的高度

                    if (item < sort) { //如果子类的高度小于父类的高度
                        if (eq == 0) {
                            $(this).children('.item-list').css('top', (i - h));
                        } else {
                            $(this).children('.item-list').css('top',
                                    (i - h) + 1);
                        }
                    } else {
                        if (s > h) { //判断子类的显示位置,如果滚动的高度大于所有分类列表容器的高度
                            if (i - s > 0) { //则 继续判断当前滑过容器的位置 是否有一半超出窗口一半在窗口内显示的Bug,
                                $(this).children('.item-list').css('top',
                                        (s - h) + 2);
                            } else {
                                $(this).children('.item-list').css('top',
                                        (s - h) - (-(i - s)) + 2);
                            }
                        } else {
                            $(this).children('.item-list').css('top', 3);
                        }
                    }

                    $(this).addClass('hover');
                    $(this).children('.item-list').css('display', 'block');
                }, function() {
                    $(this).removeClass('hover');
                    $(this).children('.item-list').css('display', 'none');
                });

        $('.item > .item-list > .close').click(function() {
            $(this).parent().parent().removeClass('hover');
            $(this).parent().hide();
        });
    </script>
    <div style="text-align:center;clear:both"></div>
</body>
</html>


test.ftl模版  (用于测试的模版)
<html>
<head>
<meta charset="UTF-8">
<title>京东新版侧栏jquery导航 - 站长素材</title>
<link rel="stylesheet" href="css/main.css">
</head>
<body>
<#list typeList as typeList >
        <a href="">${typeList.name}&nbsp;</a>
</#list>

</body>
</html>

Controller层
    /*
     * 跳转到freemarker生成的页面
     */
    @RequestMapping("toftlHtml")
    public String toftlHtml(){
        return "redirect:/index.html";
    }
    /*
     * 生成页面 test
     */
    @RequestMapping("makeHtml1")
    @ResponseBody
    public boolean makeHtml1(HttpServletRequest request,String name){
        System.out.println("--------------生成页面----------------");
        //查询数据
        ArrayList<Goods_cetegory> typeList = (ArrayList<Goods_cetegory>) this.goods_CetegoryService.getGoodsCetegory();
        HashMap<String,Object> map = new HashMap<String, Object>();
        map.put("typeList", typeList);

        //给定生成路径
        String path = request.getSession().getServletContext().getRealPath("/")+name+".html";
        System.out.println(path);
        //生成html
        FreemarkerUtil freemarkerUtil = new FreemarkerUtil();
        freemarkerUtil.createWord(path, map);

        return true;
    }
    /*
     * 生成页面
     */
    @RequestMapping("makeHtml")
    @ResponseBody
    public boolean makeHtml(HttpServletRequest req,String name){
        System.out.println("--------------生成页面----------------");
        //查询数据
        ArrayList<Goods_cetegory> goodsCetegory = (ArrayList<Goods_cetegory>) this.goods_CetegoryService.getGoodsCetegory();
        ArrayList<Goods_cetegory> goodsTwoCetegory = (ArrayList<Goods_cetegory>) this.goods_CetegoryService.getGoodsTwoCetegory();
        ArrayList<Goods_cetegory> goodsThreeeCetegory = (ArrayList<Goods_cetegory>) this.goods_CetegoryService.getGoodsThreeeCetegory();
        HashMap<String,Object> map = new HashMap<String, Object>();
        map.put("goodsCetegory", goodsCetegory);
        map.put("goodsTwoCetegory", goodsTwoCetegory);
        map.put("goodsThreeeCetegory", goodsThreeeCetegory);
        map.put("title","京东新版侧栏jquery导航 - 站长素材");
        map.put("alltype", "全部商品分类");
        map.put("index", "首页");
        map.put("dress", "服装");
        map.put("supermarket", "京东超市");
        map.put("teamBuy", "团购");
        map.put("auction", "拍卖");
        map.put("OnlineGame", "在线游戏");

        //给定生成路径
        String path = req.getSession().getServletContext().getRealPath("/")+name+".html";

        //生成html
        FreemarkerUtil freemarkerUtil = new FreemarkerUtil();
        freemarkerUtil.createWord(path, map);

        return true;
    }




<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>

  <script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery.min.js"></script></head>
   <script type="text/javascript">

    $(function(){
        $("#makeHtml").click(function(){
            $.ajax({
                url:"<%=request.getContextPath()%>/makeHtml.action",
                type:"post",
                data:{
                    name : $("#fileName").val()
                },
                dataType:"json",
                success:function(ooo){
                    if(ooo){
                        alert("生成成功")
                    }
                    else{
                        alert("生成失败")
                    }
                }   
            });
        });
        $("#makeIndex").click(function(){
            location.href = "<%=request.getContextPath()%>/toftlHtml.action";
        });
    });

  </script>

  <body>
    <input id ="fileName" />
    <button id = "makeHtml">生成页面</button>
    <button id="makeIndex">查看页面</button>
  </body>


</html>

后 : 最后一步 去查看html页面
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Word文档生成HTML模板主要通过将Word文档转换为HTML格式来实现。使用Freemarker作为模板引擎可以更方便地处理模板中的动态数据。 首先,我们需要将Word文档转换为HTML格式。可以使用一些开源的工具或者第三方库来完成这一步骤。例如,可以使用Apache POI来读取Word文档内容,并将其转换为HTML格式。将Word文档的段落、表格、图像等元素转换为相应的HTML标签,保留其基本格式。 然后,我们需要创建Freemarker模板,以定义生成HTML的结构和动态数据。可以使用Freemarker的语法来插入动态数据,如变量、条件判断、循环等。在模板中,我们可以将Word文档中提取的数据通过变量插入到相应的位置,实现动态生成HTML页面的效果。例如,可以将Word文档中的标题、正文、图片等内容与Freemarker模板中的对应部分关联起来。 最后,我们可以通过调用Freemarker模板引擎的相关方法,将模板与数据进行合并,生成最终的HTML文件。在生成过程中,动态数据会根据模板中的定义进行填充,从而生成具有动态内容的HTML页面。 需要注意的是,Word文档和HTML页面的结构和样式是不同的,因此在转换和生成的过程中,需要进行相应的调整和处理。此外,还需注意保留Word文档中的一些特殊格式,如文本样式、超链接、表格边框等,确保转换后的HTML页面效果与原Word文档尽量一致。 总之,通过将Word文档转换为HTML格式,并使用Freemarker模板引擎来处理动态数据,可以实现Word文档生成HTML模板的需求。这样可以更加灵活地处理Word文档中的内容,并在生成HTML页面中实现相应的功能和效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

战神丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值