java 如何将word 转换为ftl_Java之利用FreeMarker导出Word实例
开心一笑
感冒了很难受,她闷在被窝里给男朋友发短信"我感冒了..."并决定如果对方回答"多喝点水"就一脚踹了他。过一会儿手机振动起来,短信内容:"开门。"......这个大笨蛋!谁让他来的啦!她起身用最快的速度冲去门口,此时手机再次振动,她一手开门一手兴奋的点开:"多呼吸点新鲜空气,运动运动。
提出问题
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实例相关推荐
- Java之利用FreeMarker导出Word实例
开心一笑 感冒了很难受,她闷在被窝里给男朋友发短信"我感冒了-"并决定如果对方回答"多喝点水"就一脚踹了他.过一会儿手机振动起来,短信内容:"开门."--这个大笨蛋!谁让他来的啦!她起身用最快的速度冲 ...
- java循环导出word文档_Java使用freemarker导出word文档
通过freemarker,以及JAVA,导出word文档. 共分为三步: 第一步:创建模板文件 第二步:通过JAVA创建返回值. 第三步:执行 分别介绍如下: 第一步: 首先创建word文档,按照想要 ...
- Java中利用freemarker导出word表格并合并单元格
1.word表格的模板 另存为xml格式: 将保存的xml改成.ftl 格式化一下xml,看看文件中的带有${}是否正确 如果出现这种情况,手动修改下(可复制上一个正确的改下名字) 2.Java代码 ...
- ftl文件模板图片_使用Freemarker导出Word文档(包含图片)代码实现及总结
本篇是关于利用FreeMarker导出Word的实现步骤. 优点:采用FreeMarker是导出Word的最佳实现,非常的灵活,能够按照自己指定的样式设置并输出内容,操作简单方便,代码实现也容易.代码 ...
- java利用freemarker导出含有list的数据到word,有demo可供下载
java利用freemarker导出含有list的数据到word,有demo可供下载 前言 FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子 ...
- Java使用freemarker导出word试卷
使用了freemarker模板填充占位符的方式来生成word文档,支持跨平台. Java导出Word的五种方式 制作Word模板 将制作好的Word模板.docx另存为.xml格式,修改xml文件的内 ...
- java使用freemarker导出word标题失效问题
java使用freemarker导出word标题失效问题 如图,导出格式错误切目录不可折叠 另存为xml发现 六级标题变成了其他级别:<w:pStyle w:val="60" ...
- JAVA使用FreeMarker导出Word工具类
<!--freemarker word export--><dependency><groupId>org.freemarker</groupId>&l ...
- freemarker导出Word文档并在其中插入图片
先将word转成xml格式,再用notepad将其转为ftl格式(将要填入数据的地方加个占位符,${name}) import java.io.File; import java.io.FileInp ...
最新文章
- PHP curl_setopt函数用法介绍中篇
- python 语言教程(2)基础语法
- medium font size in reuse project sapUiFontSize
- el table 固定表头和首行_el-table表头根据内容自适应,解决表头错位和固定列错位(完美解决)...
- python如何输出两列数据_Python-如何将一列分为两列?
- Linux学习笔记-配置SAMBA服务
- 苹果概念手机_吊打华为苹果!马云概念手机终于问世?
- Ubuntu编译内核及grub的一些笔记
- leetcode[35]搜索插入位置/Search Insert Position 暴力和二分法详解
- 看网页的宽度设置应该基于1024以上了
- nginx使用ngx_shared_memory_add和ngx_slab_alloc等在共享内存里创建一棵红黑树
- java的基本概念:进制、单位、编码、数据类型、变量声明、ASCII码
- U盘图标更改个性化工具
- 怎么弄自动滚动的图片 html,HTML网页上连续滚动图片的制作
- revit二次开发--Reference
- Mac OS命令行清洗硬盘空间
- java使用pinyin4j实现汉字到拼音转换
- Cytoskeleton 磷酸盐测定试剂盒说明书
- 雅思口语想考7分,到底该说英音还是美音
- vue 或 js 使用谷歌翻译实现国际化