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

发布于 2021-12-04 11:07:43 字数 695 浏览 945 评论 16

用 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文件后打开显示“文件已损坏,无法打开”。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(16

陌若浮生 2021-12-05 17:46:02

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

小情绪 2021-12-05 17:46:00

试试docx4j-ImportXHTML 先xhtml 然后到docx

冷弦 2021-12-05 17:45:59

奥,这样子!

恋你朝朝暮暮 2021-12-05 17:45:57

据我所知,插件基本上只支持doc、xls,也就是office2003,而不支持docx、xlsx(office2005)

网名女生简单气质 2021-12-05 17:45:55

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

墨洒年华 2021-12-05 17:45:51

回复
docx格式太新了,而且解析非常复杂,这个没办法

刘备忘录 2021-12-05 17:43:19

报错,报什么错你得说清楚啊,不能让别人猜啊

坚持沉默 2021-12-05 17:21:09
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();

    }
}

梅窗月明清似水 2021-12-05 17:03:49

http://www.oschina.net/question/937299_105738 报错的,如这个帖子

做个少女永远怀春 2021-12-05 14:37:22

回复
你先用个简单的模板试试

甜柠檬 2021-12-05 13:06:50

回复
有空试一下我发的代码,

归属感 2021-12-05 13:02:48

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

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

卸妝后依然美 2021-12-05 12:44:03

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

离去的眼神 2021-12-05 12:15:29

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

私藏温柔 2021-12-05 05:53:59

http://www.oschina.net/question/937299_105738freeman 看下这个帖子吧

怎言笑 2021-12-05 02:07:19

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文