开心一笑

感冒了很难受,她闷在被窝里给男朋友发短信"我感冒了..."并决定如果对方回答"多喝点水"就一脚踹了他。过一会儿手机振动起来,短信内容:"开门。"......这个大笨蛋!谁让他来的啦!她起身用最快的速度冲去门口,此时手机再次振动,她一手开门一手兴奋的点开:"多呼吸点新鲜空气,运动运动。

提出问题

Java中如何利用FreeMarker导出word文档???

解决问题

1.先用word准备一个模板,如下图:

这里写图片描述

2.我们把word文档另存为xml格式的文件,用Notepad++工具打开,一下只截取部分内容.

这里写图片描述

3.我们开始处理第一个问题:文字处理,Ctrl+F找到XML文档中文字,将“以下省略一万字”替换为${textDeal},保存文件,将文件的后缀改为.ftl,自此模板制作成功。

4.编码实现文本替换:

package com.hwy.test;

import freemarker.template.Configuration;

import freemarker.template.Template;

import java.io.*;

import java.util.HashMap;

import java.util.Map;

/**

* word导出

* Created by Ay on 2016/6/27.

*/

public class WordDocExportTest {

public static void main(String[] args) throws Exception{

/** 初始化配置文件 **/

Configuration configuration = new Configuration();

/** 设置编码 **/

configuration.setDefaultEncoding("utf-8");

/** 我的ftl文件是放在D盘的**/

String fileDirectory = "D:\\";

/** 加载文件 **/

configuration.setDirectoryForTemplateLoading(new File(fileDirectory));

/** 加载模板 **/

Template template = configuration.getTemplate("FreeMarker中word导出XML.ftl");

/** 准备数据 **/

Map dataMap = new HashMap<>();

/** 在ftl文件中有${textDeal}这个标签**/

dataMap.put("textDeal","一下省略一万字");

/** 指定输出word文件的路径 **/

String outFilePath = "D:\\myFreeMarker.doc";

File docFile = new File(outFilePath);

FileOutputStream fos = new FileOutputStream(docFile);

Writer out = new BufferedWriter(new OutputStreamWriter(fos, "utf-8"),10240);

template.process(dataMap,out);

if(out != null){

out.close();

}

}

}

5.编码实现图片的替换

这里写图片描述

具体代码如下:

package com.hwy.test;

import freemarker.template.Configuration;

import freemarker.template.Template;

import sun.misc.BASE64Encoder;

import java.io.*;

import java.util.HashMap;

import java.util.Map;

/**

* word导出

* Created by Ay on 2016/6/27.

*/

public class WordDocExportTest {

public static void main(String[] args) throws Exception{

/** 初始化配置文件 **/

Configuration configuration = new Configuration();

/** 设置编码 **/

configuration.setDefaultEncoding("utf-8");

/** 我的ftl文件是放在D盘的**/

String fileDirectory = "D:\\";

/** 加载文件 **/

configuration.setDirectoryForTemplateLoading(new File(fileDirectory));

/** 加载模板 **/

Template template = configuration.getTemplate("FreeMarker中word导出XML.ftl");

/** 准备数据 **/

Map dataMap = new HashMap<>();

/** 图片路径 **/

String imagePath = "D:\\apple.jpg";

/** 将图片转化为**/

InputStream in = null;

byte[] data = null;

try {

in = new FileInputStream(imagePath);

data = new byte[in.available()];

in.read(data);

in.close();

} catch (Exception e) {

e.printStackTrace();

}finally {

if(in != null){

in.close();

}

}

/** 进行base64位编码 **/

BASE64Encoder encoder = new BASE64Encoder();

/** 在ftl文件中有${textDeal}这个标签**/

dataMap.put("textDeal","一下省略一万字");

/** 图片数据**/

dataMap.put("myImage",encoder.encode(data));

/** 指定输出word文件的路径 **/

String outFilePath = "D:\\myFreeMarker.doc";

File docFile = new File(outFilePath);

FileOutputStream fos = new FileOutputStream(docFile);

Writer out = new BufferedWriter(new OutputStreamWriter(fos, "utf-8"),10240);

template.process(dataMap,out);

if(out != null){

out.close();

}

}

}

结果,I love you这张图片又出现了:

图片

6.freeMarker表格处理

1)同样道理,找到表格的位置,替换成freeMarker标签,图片如下:

这里写图片描述

具体代码:

package com.hwy.test;

import freemarker.template.Configuration;

import freemarker.template.Template;

import java.io.*;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

/**

* word导出

* Created by Ay on 2016/6/27.

*/

public class WordDocExportTest {

public static void main(String[] args) throws Exception{

/** 初始化配置文件 **/

Configuration configuration = new Configuration();

/** 设置编码 **/

configuration.setDefaultEncoding("utf-8");

/** 我的ftl文件是放在D盘的**/

String fileDirectory = "D:\\";

/** 加载文件 **/

configuration.setDirectoryForTemplateLoading(new File(fileDirectory));

/** 加载模板 **/

Template template = configuration.getTemplate("FreeMarker中word导出XML.ftl");

/** 准备数据 **/

Map> dataMap = new HashMap<>();

/** 表格数据初始化 **/

List studentList = new ArrayList<>();

studentList.add(new Student("100424060","小毅","男","25"));

studentList.add(new Student("100424030","小兰","女","25"));

/** 表格数据 studentList和freemarker标签要对应**/

dataMap.put("studentList",studentList);

/** 指定输出word文件的路径 **/

String outFilePath = "D:\\myFreeMarker.doc";

File docFile = new File(outFilePath);

FileOutputStream fos = new FileOutputStream(docFile);

Writer out = new BufferedWriter(new OutputStreamWriter(fos, "utf-8"),10240);

template.process(dataMap,out);

if(out != null){

out.close();

}

}

}

Student类如下:这里有一个问题,如果Student类写在WordDocExportTest类中,就会出现问题,很奇怪,只能单独另启一个类了。

package com.hwy.test;

/**

* Created by Ay on 2016/6/29.

*/

public class Student{

private String id;

private String name;

private String sex;

private String age;

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public String getAge() {

return age;

}

public void setAge(String age) {

this.age = age;

}

public Student(String id, String name, String sex, String age) {

this.id = id;

this.name = name;

this.sex = sex;

this.age = age;

}

}

结果如下:

![这里写图片描述](http://upload-images.jianshu.io/upload_images/2321678-fe12900dbb9277fd?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

7.word中字体样式调整

这里写图片描述

1)我们把四种的字体“这里是字体样式......”在word中字体样式改为仿宋_gb2312,大小改为30号如下:

这里写图片描述

2)用同样的方法,把word转变为ftl文件,打开如下

这里写图片描述

所有以后word需要什么的样式,都是在原先word调好样式,在转变为ftl文件即可

8.页眉页脚设置

1)相同道理,在原先word插入页眉“Hello Freemarker”,另存为xml文件,再后缀为ftl文件即可,既是我们要的文件

读书感悟

来自《我脑海中的橡皮擦》

我们破产了!没关系,我来付钱。

不要困扰于过去,时间会治愈一切。

要想原谅一个人,就是要把心里的某个地方留给他。

java 如何将word 转换为ftl_Java之利用FreeMarker导出Word实例相关推荐

  1. Java之利用FreeMarker导出Word实例

    开心一笑 感冒了很难受,她闷在被窝里给男朋友发短信"我感冒了-"并决定如果对方回答"多喝点水"就一脚踹了他.过一会儿手机振动起来,短信内容:"开门."--这个大笨蛋!谁让他来的啦!她起身用最快的速度冲 ...

  2. java循环导出word文档_Java使用freemarker导出word文档

    通过freemarker,以及JAVA,导出word文档. 共分为三步: 第一步:创建模板文件 第二步:通过JAVA创建返回值. 第三步:执行 分别介绍如下: 第一步: 首先创建word文档,按照想要 ...

  3. Java中利用freemarker导出word表格并合并单元格

    1.word表格的模板 另存为xml格式: 将保存的xml改成.ftl 格式化一下xml,看看文件中的带有${}是否正确 如果出现这种情况,手动修改下(可复制上一个正确的改下名字) 2.Java代码 ...

  4. ftl文件模板图片_使用Freemarker导出Word文档(包含图片)代码实现及总结

    本篇是关于利用FreeMarker导出Word的实现步骤. 优点:采用FreeMarker是导出Word的最佳实现,非常的灵活,能够按照自己指定的样式设置并输出内容,操作简单方便,代码实现也容易.代码 ...

  5. java利用freemarker导出含有list的数据到word,有demo可供下载

    java利用freemarker导出含有list的数据到word,有demo可供下载 前言 FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子 ...

  6. Java使用freemarker导出word试卷

    使用了freemarker模板填充占位符的方式来生成word文档,支持跨平台. Java导出Word的五种方式 制作Word模板 将制作好的Word模板.docx另存为.xml格式,修改xml文件的内 ...

  7. java使用freemarker导出word标题失效问题

    java使用freemarker导出word标题失效问题 如图,导出格式错误切目录不可折叠 另存为xml发现 六级标题变成了其他级别:<w:pStyle w:val="60" ...

  8. JAVA使用FreeMarker导出Word工具类

    <!--freemarker word export--><dependency><groupId>org.freemarker</groupId>&l ...

  9. freemarker导出Word文档并在其中插入图片

    先将word转成xml格式,再用notepad将其转为ftl格式(将要填入数据的地方加个占位符,${name}) import java.io.File; import java.io.FileInp ...

最新文章

  1. PHP curl_setopt函数用法介绍中篇
  2. python 语言教程(2)基础语法
  3. medium font size in reuse project sapUiFontSize
  4. el table 固定表头和首行_el-table表头根据内容自适应,解决表头错位和固定列错位(完美解决)...
  5. python如何输出两列数据_Python-如何将一列分为两列?
  6. Linux学习笔记-配置SAMBA服务
  7. 苹果概念手机_吊打华为苹果!马云概念手机终于问世?
  8. Ubuntu编译内核及grub的一些笔记
  9. leetcode[35]搜索插入位置/Search Insert Position 暴力和二分法详解
  10. 看网页的宽度设置应该基于1024以上了
  11. nginx使用ngx_shared_memory_add和ngx_slab_alloc等在共享内存里创建一棵红黑树
  12. java的基本概念:进制、单位、编码、数据类型、变量声明、ASCII码
  13. U盘图标更改个性化工具
  14. 怎么弄自动滚动的图片 html,HTML网页上连续滚动图片的制作
  15. revit二次开发--Reference
  16. Mac OS命令行清洗硬盘空间
  17. java使用pinyin4j实现汉字到拼音转换
  18. Cytoskeleton 磷酸盐测定试剂盒说明书
  19. 雅思口语想考7分,到底该说英音还是美音
  20. vue 或 js 使用谷歌翻译实现国际化

热门文章

  1. halt库卡_库卡指令参数说明.pdf
  2. https遇到自签名证书/信任证书
  3. 2020 简单分析为什么有了实体类pojo还要建一个实体类Vo来继承extend?
  4. Win10非常好用的6个使用技巧
  5. PAT1037 在霍格沃茨找零钱
  6. python处理表格数据
  7. scala Object关键字声明的类直接调用方法、伴生对象
  8. 中断 promise链
  9. 总结了9款Mac端超好用的免费开源软件,你还有更好的推荐吗?
  10. IFERROR 判断函数用法