博旭范文网 - 每天发现一点点
每天发现一点点!
  • 寓言
  • 谜语
  • 歇后语
  • 谚语
  • 顺口溜
  • 绕口令
  • 三句半
  • 三字经
  • 百家姓
  • 十二生肖
  • 励志
  • 诗词鉴赏
  • 当前位置:博旭范文网 > 实用文档 > 励志 >

    freemark文档

    分类:励志 时间:2017-07-26 本文已影响

    篇一:freemarker中文API手册

    FreeMarker概述

    ?FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java

    编写

    ?FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序 ?虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由

    FreeMarker生成页面,通过模板显示准备的数据(如下图)

    ?FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件 ?FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应

    用于非Web应用程序环境

    ?FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使

    用JSP标记库

    ?FreeMarker是免费的

    1、通用目标

    ?能够生成各种文本:HTML、XML、RTF、Java源代码等等

    ?易于嵌入到你的产品中:轻量级;不需要Servlet环境

    ?插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等 ?你可以按你所需生成文本:保存到本地文件;作为Email发送;从Web应用程序发送

    它返回给Web浏览器

    2、强大的模板语言

    ?所有常用的指令:include、if/elseif/else、循环结构

    ?在模板中创建和改变变量

    ?几乎在任何地方都可以使用复杂表达式来指定值

    ?命名的宏,可以具有位置参数和嵌套内容

    ?名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心

    名字冲突

    ?输出转换块:在嵌套模板片段生成输出时,转换HTML转义、压缩、语法高亮等等;

    你可以定义自己的转换

    3、通用数据模型

    ?FreeMarker不是直接反射到Java对象,Java对象通过插件式对象封装,以变量方式在

    1、快速入门

    (1)模板 + 数据模型 = 输出

    ?FreeMarker基于设计者和程序员是具有不同专业技能的不同个体的观念

    ?他们是分工劳动的:设计者专注于表示——创建HTML文件、图片、Web页面的

    其它可视化方面;程序员创建系统,生成设计页面要显示的数据

    ?经常会遇到的问题是:在Web页面(或其它类型的文档)中显示的信息在设计页

    面时是无效的,是基于动态数据的

    ?在这里,你可以在HTML(或其它要输出的文本)中加入一些特定指令,FreeMarker

    会在输出页面给最终用户时,用适当的数据替代这些代码

    ?下面是一个例子:

    ?这个例子是在简单的HTML中加入了一些由${…}包围的特定代码,这些特定代码

    是FreeMarker的指令,而包含FreeMarker的指令的文件就称为模板(Template) ?至于user、latestProduct.url和latestProduct.name来自于数据模型(data model) ?数据模型由程序员编程来创建,向模板提供变化的信息,这些信息来自于数据库、

    文件,甚至于在程序中直接生成

    ?模板设计者不关心数据从那儿来,只知道使用已经建立的数据模型 ?下面是一个可能的数据模型:

    ?数据模型类似于计算机的文件系统,latestProduct可以看作是目录,而user、url和

    name看作是文件,url和name文件位于latestProduct目录中(这只是一个比喻,实际并不存在)

    ?当FreeMarker将上面的数据模型合并到模板中,就创建了下面的输出:

    (2)数据模型?典型的数据模型是树型结构,可以任意复杂和深层次,如下面的例子:

    ?类似于文件的变量称为scalars,保存单值 ?scalars保存的值有两种类型:字符串(用引号括起,可以是单引号或双引号)和

    数字(不要用引号将数字括起,这会作为字符串处理) ?对scalars的访问从root开始,各部分用“.”分隔,如animals.mouse.price ?另外一种变量是sequences,和hashes类似,只是不使用变量名字,而使用数字索

    引,如下面的例子:

    篇二:使用Java freemarker生成word文档

    使用Java freemarker生成word文档(附源码) 实现思路:

    先创建一个word文档,按照需求在word中填好一个模板,然后将文档保存为xml文档格式,使用文档编辑器打开这个xml格式的文档(这里直接使用eclipse自带的编辑工具),把对应的数据换成变量${xxx},使用Freemarker读取这个文档然后替换掉变量,输出word文档即可。

    具体过程如下:

    1 创建word文档,画好模板

    2将刚刚创建的word文档另存为xml格式

    3 编辑这个xml文档

    4 将想要替换的内容改成${xxx}

    5 将编辑后的xml放到工程中,并从Freemarker官网【下载】最新的开发包,将freemarker.jar

    拷贝到工程中。

    好啦,准备工作都完成了,咱开始编码吧!

    新建WordUtil类,实现根据word模板生成word文件的方法

    package com.word;

    import java.io.IOException;

    import java.io.Writer;

    import java.util.Map;

    import freemarker.template.Configuration;

    import freemarker.template.Template;

    public class WordUtil {

    private Configuration configuration = null;

    public WordUtil() {

    try {

    configuration = new Configuration();

    configuration.setDefaultEncoding("UTF-8");

    } catch (Exception e) {

    System.out.println(e.getMessage());

    e.printStackTrace();

    }

    }

    private Template getTemplate(String templatePath, String templateName)

    throws IOException {

    configuration.setClassForTemplateLoading(this.getClass(), templatePath);Template t = configuration.getTemplate(templateName);

    t.setEncoding("UTF-8");

    return t;

    }

    public void write(String templatePath, String templateName,

    Map<String, String> dataMap, Writer out) {

    try {

    Template t = getTemplate(templatePath, templateName);

    t.process(dataMap, out);

    out.close();

    } catch (Exception e) {

    System.out.println(e.getMessage());

    e.printStackTrace();

    }

    }

    }

    Word生成的代码已经OK了,你还等什么?

    赶紧调用吧!

    package com.word;

    import java.io.FileOutputStream;

    import java.io.OutputStreamWriter;

    import java.io.Writer;

    import java.util.HashMap;

    import java.util.Map;

    public class ExportWord {

    /**

    * @param args

    */

    public static void main(String[] args) {

    Map<String, String> map = new HashMap<String, String>();

    map.put("name", "黑狗");

    map.put("age", "123");

    WordUtil handler = new WordUtil();

    Writer out;

    try {

    out = new OutputStreamWriter(new FileOutputStream(

    "E:\\Study\\测试文件\\testModel.doc"), "UTF-8");//生成文件的保存路径

    handler.write("/com/word/templete", "testModel.xml", map, out);

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    }

    F11执行后看看结果吧O(∩_∩

    )O~

    篇三:用Freemarker生成word文档

    用 Freemarker 生成 word 文档

    1.用word写一个需要导出的word模板,然后存为xml格式。

    2.将xml中需要动态修改内容的地方,换成freemarker的标识符,例如:

    <w:p wsp:rsidR="00D02906" wsp:rsidRDefault="00FA4C58" wsp:rsidP="00FA4C58"> <w:pPr>

    <w:jc w:val="center"/>

    <w:rPr>

    <w:rFonts w:hint="fareast"/>

    </w:rPr>

    </w:pPr>

    <w:r>

    <w:t>${year}</w:t>

    </w:r>

    <w:r>

    <w:rPr>

    <wx:font wx:val="宋体"/>

    </w:rPr>

    <w:t>年度工作报告</w:t>

    </w:r>

    </w:p>

    3.用代码生成:

    import freemarker.template.Configuration;

    import freemarker.template.Template;

    import java.io.*;

    import java.util.HashMap;

    import java.util.Map;

    /**

    * @Class name: CreateDoc

    * <p/>

    * Short description on the purpose of the program.

    * @author : youfeng

    * @modified : 8/29/11

    */

    public class CreateDoc {

    private Configuration configuration = null;

    public CreateDoc() {

    configuration = new Configuration();

    configuration.setDefaultEncoding("utf-8");

    }

    public void create() throws Exception {

    Map<String, Object> map = new HashMap<String, Object>();

    map.put("date", "2011");

    map.put("modifyDate", "2011/8/29");

    map.put("modifyUser", "Zhu You Feng");

    configuration.setClassForTemplateLoading(this.getClass(), "/docTemplate/");

    Template t = configuration.getTemplate("doc1.ftl");

    File outFile = new File("D:/outFile.doc");

    Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile))); t.process(map, out);

    }

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

    new CreateDoc().create();

    }

    }

    添加图片

    如果你需要在word中添加图片,那你就在第一步制作模板时,加入一张图片占位,然后打开xml文档,可

    以看到如下的一片base64编码后的代码:

    <w:binData w:name="wordml://03000001.png" xml:space="preserve">iVBORw0?(很省略很省略)?

    CC</w:binData>

    只要将base64的代码替换成例如:${image},如下:

    <w:binData w:name="wordml://03000001.png" xml:space="preserve">${image}</w:binData> 这里要注意“>${image}<”这尖括号中间不能加任何其他的诸如空格,tab,换行等符号。

    然后用代码生成:

    import freemarker.template.Configuration;

    import freemarker.template.Template;

    import sun.misc.BASE64Encoder;

    import java.io.*;

    import java.util.HashMap;

    import java.util.Map;

    /**

    * @Class name: CreateDoc

    * @author: youfeng

    * @modified: 8/29/11

    */

    public class CreateDocWithImage {

    private Configuration configuration = null;

    public CreateDocWithImage() {

    configuration = new Configuration();

    configuration.setDefaultEncoding("utf-8");

    }

    public void create() throws Exception {

    Map<String, Object> map = new HashMap<String, Object>();

    map.put("year", "2011");

    map.put("person", "Zhu You Feng");

    map.put("image", getImageStr());

    configuration.setClassForTemplateLoading(this.getClass(), "/docTemplate/");

    Template t = configuration.getTemplate("doc2.ftl");

    File outFile = new File("D:/outFile.doc");

    Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile))); t.process(map, out);

    }

    private String getImageStr() {

    String imgFile = "d:/test.jpg";

    InputStream in = null;

    byte[] data = null;

    try {

    in = new FileInputStream(imgFile);

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

    in.read(data);

    in.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    BASE64Encoder encoder = new BASE64Encoder();

    return encoder.encode(data);

    }

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

    new CreateDocWithImage().create();

    }

    }

    自定义载入模板

    import freemarker.cache.TemplateLoader;

    import freemarker.template.Configuration;

    import freemarker.template.Template;

    import freemarker.template.TemplateException;

    import sun.misc.BASE64Encoder;

    import java.io.*;

    import java.util.HashMap;

    import java.util.Map;

    public class DocumentGenerator {

    private Configuration configuration = null;

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

    Map<String, Object> map = new HashMap<String, Object>();

    map.put("date", "2012");

    map.put("modifyDate", "2011/8/29");

    map.put("modifyUser", "Zhu You Feng");

    new DocumentGenerator().createDoc("", "D:/outFile2.doc", map);

    }

    public DocumentGenerator() {

    configuration = new Configuration();

    configuration.setDefaultEncoding("utf-8");

    configuration.setClassicCompatible(true);

    configuration.setTemplateLoader(new ByteArrayStreamTemplateLoader(new ByteArrayInputStream(getBytesFromFile(new

    File("D:/ownProject/freemarkerToDoc/src/main/resources/docTemplate/doc1.ftl"))

    )));

    }

    /**

    * @param fileName

    * @param outFileName

    * @param dataMap

    */

    public void createDoc(String fileName, String outFileName, Map dataMap) {

    Template t = null;

    try {

    t = configuration.getTemplate(fileName);

    } catch (IOException e) {

    e.printStackTrace();

    }

    File outFile = new File(outFileName);

    Writer out = null;

    try {

    out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));

    } catch (FileNotFoundException e1) {

    e1.printStackTrace();

    }

    try {

    t.process(dataMap, out);

    } catch (TemplateException e) {

    e.printStackTrace();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    public byte[] getBytesFromFile(File f) {

    if (f == null) {

    return null;

    }

    try {

    FileInputStream st

    freemark文档

    ream = new FileInputStream(f);

    ByteArrayOutputStream out = new ByteArrayOutputStream(1000);

    byte[] b = new byte[1000];

    int n;

    while ((n = stream.read(b)) != -1)

    out.write(b, 0, n);

    stream.close();

    out.close();

    return out.toByteArray();

    } catch (IOException e) {

    e.printStackTrace();

    }

    return null;

    }

    }

    class ByteArrayStreamTemplateLoader implements TemplateLoader {

    InputStream in = null;

    public ByteArrayStreamTemplateLoader(ByteArrayInputStream inputStream) { in = inputStream;

    }

    public Object findTemplateSource(String name) throws IOException {

    System.out.println("findTemplateSource");

    return in;

    }

    public long getLastModified(Object templateSource) {

    return 0;

    }

    public Reader getReader(Object templateSource, String encoding) throws IOException { System.out.println("getReader");

    return new InputStreamReader(in);

    }

    public void closeTemplateSource(Object templateSource) throws IOException { System.out.println("closeTemplateSource");

    if (in != null) {

    相关热词搜索:文档 freemark 石墨文档 文档下载