您现在的位置是:首页 > 正文

Java html转word,用freemark生成复杂word格式

2024-02-01 04:52:03阅读 3

1.**制作模板**,要求word版本2003以上。在word写好预定的格式,在需要显示内容的地方写一个占位符。将word save as 成“Single File Web Page(*.mht, *mhtml)”

nodepad++ 打开mht文件,将占位符加上${name},并将文件中的charset设置为utf-8,有时候需要将格式转换utf-8不然中文会出现乱码.



demo: http://download.csdn.net/detail/rehuojunguan/9857489

2.freemark class 主要读取模板 template,根据map的中数据替换mht文件中的 ${key},最后生成word。

public class FreeMarkerDoc {
	private String templateName = null;
	private String templatePath = null;
	private Configuration configuration = null;
        public FreeMarkerDoc() {
	    configuration = new Configuration(Configuration.VERSION_2_3_21);
	    configuration.setDefaultEncoding("utf-8");
	}

	public void generateDoc(Map<String,Object> dataMap, String fileName) throws IOException, TemplateException {
        Template tempalte = null;
        configuration.setClassForTemplateLoading(this.getClass(), "/com/freemark/template");
        //setServletContextForTemplateLoading(context, "/mht")  /WebRoot/ftl目录。
        //configuration.setDirectoryForTemplateLoading(new File("C:\\Users\\Desktop\\test"));
        ///tempalte.setEncoding("utf-8");
        tempalte = configuration.getTemplate("test.mht");
	    File outFile = new File(fileName);
	    Writer out = null;
	    FileOutputStream fos = null;
        OutputStreamWriter oWriter = null;
        try {
            fos = new FileOutputStream(outFile);
            oWriter = new OutputStreamWriter(fos, "UTF-8");
            out = new BufferedWriter(oWriter);
            tempalte.process(dataMap, out);
        } finally {
            if(null != out){
                out.close();
            }
            if(null != oWriter){
                oWriter.close();
            }
            if(null != fos){
                fos.close();
            }
        }
    }	
}



网站文章

  • docker创建容器并且挂载相应目录

    【代码】docker创建容器并且挂载相应目录。

    2024-02-01 04:51:56
  • 视频直播推流攻略(整理的各大平台推流界面) 热门推荐

    视频直播推流攻略(整理的各大平台推流界面) 热门推荐

    如果我要做一场高端大气的直播活动,需要用高清摄像机拍摄画面,需要接入无人机的高空画面,需要在直播中插入多个镜头,甚至需要把电脑桌面共享到直播画面中...... 该如何将这类现场信号采集并整合起来传输到网络呢? 这个问题不仅牵扯了导播设备的功能性,也涉及了信号“推流”的问题,一般我们将这种前端采集阶段封包好的内容传输到服务器的过程叫做“推流”。 简言之,推流就是将视音频信号传...

    2024-02-01 04:51:49
  • logo自动旋转 html,HTML/CSS3 Logo选择器

    CSS语言:CSSSCSS确定@import "https://fonts.googleapis.com/css?family=Product+Sans";@import "https://fonts...

    2024-02-01 04:51:19
  • Zookeeper

    Zookeeper

    Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知...

    2024-02-01 04:51:14
  • 权限、内部类、Scanner、Random、ArrayList随即名单和final

    权限、内部类、Scanner、Random、ArrayList随即名单和final

    private:类内部可见。default:类内部、包内部可见;无论是方法,还是属性,不写修饰符,就是这个权限。protected:类内部、包内部、子类可见。public:类内部、包内部、子类内部、外...

    2024-02-01 04:51:08
  • python实现连续子序列最大和问题(动态规划)

    说明:子列表指的是列表中索引(下标)连续的元素构成的列表;列表中的元素是int类型,可能包含正整数、0、负整数;程序输入列表中的元素,输出子列表元素求和的最大值,例如: 输入:1 -2 3 5 -3 ...

    2024-02-01 04:50:38
  • flex布局

    flex布局

    总结一下flex布局

    2024-02-01 04:50:31
  • java 动态创建类_Java运行时动态生成类几种方式

    最近一个项目中利用规则引擎,提供用户拖拽式的灵活定义规则。这就要求根据数据库数据动态生成对象处理特定规则的逻辑。如果手写不仅每次都要修改代码,还要每次测试发版,而且无法灵活根据用户定义的规则动态处理逻...

    2024-02-01 04:50:24
  • antv图例出现分页_Echarts和highCharts图表使用总结(附AntV)

    Echarts:1.给y轴上间隔线设置成虚线yAxis: {type: &#39;value&#39;,boundaryGap: [0, &#39;100%&#39;],axisLine: {show...

    2024-02-01 04:49:54
  • 「NodeJs」nodejs 定时任务

    nodejs 定时访问网页。

    2024-02-01 04:49:47