用 Freemarker 怎么生成 .docx ,求代码?我现在只能生成doc文档

helloworld1234 发布于 2014/06/22 21:40
阅读 2K+
收藏 0

用 Freemarker 怎么生成 .docx ,求代码?我现在只能生成doc文档

生成doc文档步骤:

1.新建word模板
2.word另存为xml:xml中需要动态修改内容的地方,换成freemarker的标识符
3.xml另存为ftl

这是生成doc的代码:

 configuration.setClassForTemplateLoading(this.getClass(), "/com/");
        Template t = configuration.getTemplate("1.ftl");
        File outFile = new File("g:/1.doc");
        Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8"));
        t.process(map, out);
如何生成docx呢???

采用楼下的答案:File outFile = new File("g:/1.docx"); 生成docx文件后打开显示“文件已损坏,无法打开”。

加载中
0
hello123
hello123

把后缀名改成 docx 即可
File outFile = new File("g:/1.docx");

h
helloworld1234
有空试下我发的代码,//File outFile = new File("g:/1.docx"); 用docx就会报错!
h
helloworld1234
http://www.oschina.net/question/937299_105738freeman 看下这个帖子吧
0
D2-Studio
D2-Studio

和楼上方法一样,不过不建议使用docx,因为在比较低的IE游览器上,你的服务端没有配置docx的minitype它就会把docx文件当成一个压缩文件处理的……

×

h
helloworld1234
有空试下我发的代码,//File outFile = new File("g:/1.docx"); 用docx就会报错!
0
唐代de豆腐
唐代de豆腐

1楼是答案了,建议楼主学习的时候多想,举一反三。这样会学得更快,更多,更好。

将后缀改成.docx,先用docx方式保存xml文件

h
helloworld1234
回复 @糖度 : 有空试一下我发的代码,
唐代de豆腐
唐代de豆腐
回复 @helloworld1234 : 你先用个简单的模板试试
h
helloworld1234
http://www.oschina.net/question/937299_105738 报错的,如这个帖子
0
h
helloworld1234
package com.test;

/**
 * Created by lt on 2014/6/22.
 */
import freemarker.template.Configuration;
import freemarker.template.Template;
import sun.misc.BASE64Encoder;

import java.io.*;
import java.util.HashMap;
import java.util.Map;

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("name", "lt");
        map.put("age", "100岁");
        map.put("image", getImageStr());

        configuration.setClassForTemplateLoading(this.getClass(), "/com");
        Template t = configuration.getTemplate("1.ftl");
        File outFile = new File("g:/1.doc");
       //File outFile = new File("g:/1.docx");
        Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8"));
        t.process(map, out);
    }

    private String getImageStr() {
        String imgFile = "g:/sjb.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();

    }
}



0
南湖船老大
南湖船老大
报错,报什么错你得说清楚啊,不能让别人猜啊
南湖船老大
南湖船老大
回复 @helloworld1234 : docx格式太新了,而且解析非常复杂,这个没办法
h
helloworld1234
采用楼下的答案:File outFile = new File("g:/1.docx"); 生成docx文件后打开显示“文件已损坏,无法打开”。
0
JAVA开发攻城师
JAVA开发攻城师
据我所知,插件基本上只支持doc、xls,也就是office2003,而不支持docx、xlsx(office2005)
h
helloworld1234
奥,这样子!
0
hello123
hello123
File outFile = new File("g:/1.docx"); 生成docx文件后打开显示“文件已损坏,无法打开”
原因是:需要将xml字符集改成GBK
0
梁野
试试docx4j-ImportXHTML 先xhtml 然后到docx
0
hucheng9110
hucheng9110

 我很好的解决了这个问题 http://hucheng91.github.io/2017/04/09/web/java/freemarker_xdocxreport/

返回顶部
顶部