当前位置: 移动技术网 > IT编程>开发语言>Jquery > spring boot freemarker 导出word 带echarts图形报表

spring boot freemarker 导出word 带echarts图形报表

2019年07月13日  | 移动技术网IT编程  | 我要评论

创建word文件内容如下

将word导出为xml格式

将文件后缀名改为 .ftl

 

打开文件 修改图片的数据内容使用表达式代替

 

修改后

 

后查看${username}是否分家了,如果分家了将其多余部分删除 使其团聚

 

在springboot项目中添加freemarker依赖

<!-- 导出word文档-->
        <dependency>
            <groupid>org.freemarker</groupid>
            <artifactid>freemarker</artifactid>
            <version>2.3.20</version>
        </dependency>

将生成的test.ftl放在 resources/templates文件夹下

html中添加echarts

<div id="container" style="height: 100%;"></div>
<a onclick="exportimage()">导出</a>
var dom = document.getelementbyid("container");
var mychart = echarts.init(dom);
var app = {};
option = null;
option = {
    xaxis: {
        type: 'category',
        data: ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun']
    },
    yaxis: {
        type: 'value'
    },
    series: [{
        data: [820, 932, 901, 934, 1290, 1330, 1320],
        type: 'line'
    }]
};
;
if (option && typeof option === "object") {
    mychart.setoption(option, true);
}

添加导出触发事件方法

function exportimage(){
            //获取echart图形报表生成的base64编码格式的数据
            var imgdata = mychart.getconnecteddataurl();
            $.post('/word',{'imgdata':imgdata},function (data) {
                alert(data);
            })
}

controller 中的方法

@requestmapping("/word")
    @responsebody
    public string generateword(string imgdata){
        // 传递过程中  "+" 变为了 " " ,所以需要替换
        string newimageinfo = imgdata.replaceall(" ", "+");
        // 数据中:data:image/png;base64,ivborw0kggoaaaansuheugaabi4aaaescayaaaclh/jbaaa ...
        // 在"base64,"之后的才是图片信息
        string[] arr = newimageinfo.split("base64,");

        //添加模板数据
        map<string,object> datamap = new hashmap<>();
        datamap.put("username","张三");
        datamap.put("imgdata",arr[1]);

        //文件生成路径
        string wordfilepath = "d:\\ftl";
        //文件生成名称(因为是2003版本的xml模板,这里使用.doc后缀,如果使用.docx后缀生成的文件有问题)
        string wordfilename = "演示文档.doc";
        //模板文件名称
        string templatefilename = "test.ftl";

        //生成word文档
        boolean result = wordutil.writewordreport(wordfilepath, wordfilename, templatefilename, datamap);
        if(result){
            return "success";
        }else {
            return "error";
        }
    }

创建wordutil.java

其中代码如下

private static final string ftl_fp = "/templates/"; //模板路径

private static configuration configuration = null;
    static{
        configuration = new configuration();
        configuration.setdefaultencoding("utf-8");//设置默认的编码
        //读配置文件
//        path = propertiesutil.get("file_path")+"/";

    }

public static boolean writewordreport(string wordfilepath,string wordfilename,string templatefilename, map<string, object> beanparams) {
        writer out = null;
        try {
            configuration.setclassfortemplateloading(wordutil.class,ftl_fp);
            template template = configuration.gettemplate(templatefilename, "utf-8");

            //获取文件目录,如果不存在则创建
            string filepath = "";
            int index = wordfilepath.lastindexof(file.separator);
            if(index != wordfilepath.length()-1){
                filepath = wordfilepath+ file.separator;
            }else {
                filepath = wordfilepath;
            }
            file file1 = new file(filepath);
            if(!file1.exists()){
                file1.mkdirs();
            }

            //输出文件
            file file = new file(filepath+wordfilename);
            fileoutputstream fos = new fileoutputstream(file);
            out = new outputstreamwriter(fos, "utf-8");
            template.process(beanparams, out);
            return true;
        } catch (exception e) {
            e.printstacktrace();
            return false;
        }finally{
            try {
                if(out != null) {
                    out.close();
                }
            } catch (ioexception e) {
                e.printstacktrace();
            }
        }
    }

点击导出可生成word文件!

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网