java使用freemarker导出word
2017-09-14 14:27
435 查看
百度freemarker下载最新jar包。
步骤:
1、编写word模板test.docx,如下:
2、另存为xml文件test.xml。
3、插入循环操作的标签:
4、重命名为test.ftl(作为word的导出模板)。
5、编写生成word的代码,源码如下:
6、右键运行WordAction,导出结果为:
7、注意事项:
word生成xml文件时,${user.name} 会被拆解开,中间夹杂一些标签,如下:
java运行的时候就会报错,如下:
原因:手动输入时,word误以为每个单词是一个对象,中间就会加载空格,导出就会有标签。
处理方法:
(1)生成xml之后,手动删除变量之间的标签
(2)编写word模板时,在其他编辑器中编号${user.name}这种变量,然后粘贴到word中
步骤:
1、编写word模板test.docx,如下:
2、另存为xml文件test.xml。
3、插入循环操作的标签:
4、重命名为test.ftl(作为word的导出模板)。
5、编写生成word的代码,源码如下:
package word; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author LD */ public class WordAction { public static void createWord() { /** 用于组装word页面需要的数据 */ Map<String, Object> dataMap = new HashMap<String, Object>(); /** 组装数据 */ dataMap.put("remark", "这是其它内容这是其它内容这是其它内容这是其它内容这是其它内容这是其它内容这是其它内容这是其它内容这是其它内容这是其它内容这是其它内容这是其它内容这是其它内容"); List<Map<String, Object>> userList = new ArrayList<Map<String, Object>>(); for (int i = 1; i <= 10; i++) { Map<String, Object> map = new HashMap<String, Object>(); map.put("number", i); map.put("name", "name" + i); map.put("age", "age" + i); userList.add(map); } dataMap.put("userList", userList); /** 生成word */ WordUtil.createWord(dataMap, "test1.ftl", "C:/Users/LD/Desktop/", "test_export.doc"); System.out.println("生成成功!"); } public static void main(String[] args) { createWord(); } }
package word; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.Map; import freemarker.template.Configuration; import freemarker.template.Template; /** * 生成word工具类 * @author LD * */ public class WordUtil { /** * * @param dataMap 数据 * @param templateName 模板名称 * @param filePath 导出文件路径 * @param fileName 导出文件名称 */ @SuppressWarnings({ "deprecation" }) public static void createWord(Map<String, Object> dataMap, String templateName, String filePath, String fileName) { try { // 创建配置实例 Configuration configuration = new Configuration(); // 设置编码 configuration.setDefaultEncoding("UTF-8"); // ftl模板文件统一放至 src/word 包下面 configuration.setClassForTemplateLoading(WordUtil.class, "/word/"); // 获取模板 Template template = configuration.getTemplate(templateName); // 输出文件 File outFile = new File(filePath + File.separator + fileName); // 如果输出目标文件夹不存在,则创建 if (!outFile.getParentFile().exists()) { outFile.getParentFile().mkdirs(); } // 将模板和数据模型合并生成文件 Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8")); // 生成文件 template.process(dataMap, out); // 关闭流 out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } }
6、右键运行WordAction,导出结果为:
7、注意事项:
word生成xml文件时,${user.name} 会被拆解开,中间夹杂一些标签,如下:
java运行的时候就会报错,如下:
原因:手动输入时,word误以为每个单词是一个对象,中间就会加载空格,导出就会有标签。
处理方法:
(1)生成xml之后,手动删除变量之间的标签
(2)编写word模板时,在其他编辑器中编号${user.name}这种变量,然后粘贴到word中
相关文章推荐
- 超详细 Java使用freemarker模板技术导出word
- Java 使用Freemarker导出word 文档,解决当一段内容中既有文字又有图片的问题
- java使用Freemarker+xml导出word
- java使用freemarker完成试卷的Word导出
- java中使用freemarker导出word文档
- Java使用freemarker导出word文档
- java使用freemarker模板导出word(带有合并单元格)文档
- java 使用freemarker 导出word 和图片
- Java使用freemarker导出word和excel
- iText的使用例子说明(利用Itext画模板导出word、pdf,纯java实现)
- java使用freemarker生成word文档
- 使用 freemarker 导出 word
- jsp导出word,java导入access,freemarker
- JAVA FreeMarker导出word含图片
- JAVA FreeMarker导出word
- Java使用freemarker导出word模板
- java导出word之freemarker导出
- java:使用freemarker操作word
- 使用freemarker导出Word
- Java用freemarker导出word