用户登录
用户注册

分享至

ftl导出word word文档转化成ftl文件

  • 作者: 爱国者I帕克
  • 来源: 51数据库
  • 2020-04-21

word模版,另存成test.xml ,然后修改参数 。将test.xml改为test.ftl.

然后用网上的这段代码生成word文档。 打开时总是提示如下图(数据填入正确)

public void createDoc() {

//要填入模本的数据文件

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

getData(dataMap);

//设置模本装置方法和路径,FreeMarker支持多种模板装载方法。可以重servlet,classpath,数据库装载,

//这里我们的模板是放在com.havenliu.document.template包下面

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

Template t=null;

try {

//test.ftl为要装载的模板

t = configuration.getTemplate("test.ftl");

} catch (IOException e) {

e.printStackTrace();

}

//输出文档路径及名称

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

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();

}finally

{

try {

out.close(); //释放流

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

java freemarker 通过ftl模板导出word文档

循环列表需要加<#list datas as bean></#list>标签的;

<#list datas as bean></#list>加载哪个位置呢?

我写了个例子给你,但是代码太长,发不了,你对着图看看吧

java方式导出word文档需要修改文字样式,跪求高手解决,急,在线等。

问题没说清楚。

对于word的操作,如果是 docx 可以把 docx当做zip来解压缩,解开后会得到文档的xml文件,稍加琢磨可以理解其中的含义,修改后,再更新回原zip更多

我的需求就是根据word模板导出word,然后word里面的内容需要从数据库查出来替换,现在我是使用FreeMarker的方式,把word另存为xml格式,然后改后缀名为ftl格式,现在能把里面的内容替换然后导出来,但是内容的样式不能改变。

哦,把模板中要改变的内容区域替换成 ${document},然后数据库中读到的内容赋值给document不就OK了?

问题是替换掉后,部分内容需要修改字体样式。

不知道你的ftl中的内容如何生成的,如果里面没有样式定义也谈不上改样式,建议你看看我说的docx 解压缩出的 document.xml ,其中是含有样式定义的,

例如:

java freemarker引擎 导出word文档

要生成的数据,在java后台必须是用Map格式,这个你检查一下有没有问题。如果有list,也要放到map里面去。

HashMap<String,Object>dataMap=newHashMap<String,Object>();

Configurationconf=newConfiguration();

Templatet=conf.getTemplate(fileName);

FiledocFile=newFile(filePath+"/"+docName);

out=newOutputStreamWriter(newFileOutputStream(docFile),"UTF-8");

t.process(dataMap,out);

更多

谢谢你朋友 是这样的 我主要是不会编辑ftl模板 看了很多帖子说是要加上

<#list as....>之类的标签 可是我不知道加在哪里

ftl不会写?那还怎么用freemarker。

把你要循环显示的内容删了,空出来的那个位置就是你要写list的地方。

我昨天刚知道有freemarker这玩意的 对它了解不多 我试试

这东西不难,很快就能学会的,你可以看下这个。

http://blog.csdn.net/fhx007/article/details/7902040/

freemarker支持哪些导出

将要导出的Word另存为xml格式的文件,打开xml 在其中添加freemarker标签,然后另存为outChairDoc.ftl文件. 第一步要加入Freemarker.jar包。 Servlet代码如下:在outChairDoc.ftl放在包cn.skyclass.jiaowu.freemarker.template下 public void doGe...

我用freemaker导出word时,有模板,现在想导出的时候,可以自定义的在word中插入单元格

jsp添加事件,上传名字和电话到后台,后台调用ftl模板动态生成表格,ftl模板中用循环标签,不要写死。

maven用freemarker导出word的jsp页面怎么写

整个网站首页的基本结构是通过jsp的include标签将所有通过freemarker生成的静态页面组织起来。后台控制各个部分的静态页生成。这样做将首页进行了拆分,便于了静态页面的维护,当我们需要生成“友情链接”部分的时候就只生成友情链接部分,而不需要将整个页面都从新生成一次。

以下是我生成静态页最核心的方法,使用freemarker。

/**

* 生成静态页面主方法

* @param context ServletContext

* @param data 一个Map的数据结果集

* @param templatePath ftl模版路径

* @param targetHtmlPath 生成静态页面的路径

*/

public static void crateHTML(ServletContext context,Map<String,Object> data,String templatePath,String targetHtmlPath){

Configuration freemarkerCfg = new Configuration();

//加载模版

freemarkerCfg.setServletContextForTemplateLoading(context, "/");

freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8");

try {

//指定模版路径

Template template = freemarkerCfg.getTemplate(templatePath,"UTF-8");

template.setEncoding("UTF-8");

//静态页面路径

String htmlPath = context.getRealPath("/html")+"/"+targetHtmlPath;

File htmlFile = new File(htmlPath);

Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFile), "UTF-8"));

//处理模版

template.process(data, out);

out.flush();

out.close();

} catch (Exception e) {

e.printStackTrace();

}

}

其实很简单,只要Google一下就有很多这方面的代码。我也是Google的代码然后自己再根据实际情况修改。简单说明一下参数:

ServletContext :这个不用说了吧。做java web的应该都知道,只不过struts2中这样获取ServletActionContext.getServletContext()

Map<String,Object> data : 模版的数据来源。freemarker通过一个Map给ftl模版送数据。

现在已友情链接为列子详细介绍静态页面如何生成。其他模块以此类推。

String templatePath : ftl所在的路径。我这里相对于网站的一个相对路径然后通过ServerContext获取绝对路径。

String targetHtmlPath : 最后生成静态页的路径:我这里相对于网站的一个相对路径然后通过ServerContext获取绝对路径。

友情链接根据这段代码<jsp:include page="/html/index_link.html" flush="true"></jsp:include>我们需要freemarker生成一个index_link.html文件。友情链接数据来源通过数据库查询获取。

然后再写一个方法专门生成友情链接静态页面:

/**

* 生成友情链接的静态页index_link.html

* @param context

* @param data

*/

public static void createIndexFriendLink(ServletContext context,Map<String,Object> data){

crateHTML(context,data,"index_link.ftl","index_link.html");

}

此方法调用上面的createHTML方法。

然后根据以上方法我们就可以再Struts2的action里面从数据库查询数据放入map调用createIndexFriendLink()方法生成静态页了。

这是action中的一个方法:

/**

* 生成友情链接静态页index_link.html

* @return

*/

public String createLink(){

//权限验证

if(! this.isAccess())

return "error";

try{

//得到友情链接

List links = friendLinkDAO.findAll();

//准备数据

HashMap<String,Object> data = new HashMap<String,Object>();

data.put("links", links);

//调用静态页面方法

HTML.createIndexFriendLink(ServletActionContext.getServletContext(), data);

addActionMessage("静态页面生成成功!");

return "message";

}catch(Exception e){

e.printStackTrace();

return "failure";

}

}

List links = friendLinkDAO.findAll();通过spring注入action的hiberate DAO获取数据给list然后通过以下代码

HashMap<String,Object> data = new HashMap<String,Object>();

data.put("links", links);

准备数据调用createIndexFriendLink()方法。

以下是:ftl模版源码:

<#if links?size != 0>

< div class="link">

<strong>友情链接:</strong>

<#list links as link>

<a href="${link.linkUrl}" target="_blank" title="${link.linkName}">${link.linkName}</a>

</#list>

< /div>

< #else>

< div class="link"></div>

< /#if>

freemarker问题,ftl文件制作问题,java问题。

ftl只是一个后缀而已,不一定需要叫xxx.ftl,java封装好data,调用freemarker的process替换其中的${xxx}

能告诉我怎么生成的吗?

那里面6000多行代码肯定不是手写的,所以我觉得 .ftl 的文件是生成的。我的问题就是这个,.ftl文件时通过什么方式生成的。 评论中有部分代码,你看下。放这里字数不够

转载请注明出处51数据库 » ftl导出word word文档转化成ftl文件

软件
前端设计
程序设计
Java相关