freemarker实现报表导出功能-程序员宅基地

技术标签: java  

1.制作word文件。

2.另存为xml文件

3.编辑xml文件

4.将xml文件放入项目根路径

5.导入依赖

6.编辑文件导出接口

@PostMapping("baoBiaoExport")
public void baoBiaoExport(@RequestBody FinancialStatementVo vo, HttpServletResponse response) throws IOException{
    vo.setPrintTime(new Date());
    Map dataMap = JSON.parseObject(JSON.toJSONString(vo), Map.class);
    File outFile = null;
    try {
        outFile = getTempFile(dataMap, "baoBiao.xml",filePath,vo.getInstitutionName());
        //文件下载
        byte[] buffer = new byte[(int) outFile.length()];
        FileInputStream fis = new FileInputStream(outFile);
        fis.read(buffer);
        response.reset();
        response.setContentType("application/octet-stream");
        response.setContentLength(buffer.length);
        response.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder
                .encode(outFile.getName(), "UTF-8"));
        OutputStream os = response.getOutputStream();
        os.write(buffer);
        os.close();
    } catch (FileNotFoundException e) {
        throw e;
    }
}
// 配置信息可以自行查阅
public static Configuration getConfiguration() {
    Configuration configuration = new Configuration();
    configuration.setDefaultEncoding("UTF-8");
    // 对象属性为空时,避免抛出异常
    configuration.setClassicCompatible(true);
    configuration.setOutputFormat(XMLOutputFormat.INSTANCE);
    // 模板路径
    configuration.setClassForTemplateLoading(YiBaoController.class, "/templates");
    return configuration;
}
/**
 * @param dataMap      参数
 * @param templateName 模板名称
 */
public static File getTempFile(Map dataMap, String templateName,String filePath,String name) throws FileNotFoundException {
    Template template = null;
    Writer out = null;
    // 临时文件
    File outFile = null;
    Date date = new Date(System.currentTimeMillis());
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
    String dateFormat = sdf.format(date);
    try {
        template = getConfiguration().getTemplate(templateName);
        filePath = filePath+dateFormat+ name +".doc";
        outFile = new File(filePath);
        out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"));
        // 模板整合内容
        template.process(dataMap, out);
    } catch (Exception e) {
        e.printStackTrace();
    } finally { //finally下面的代码很重要 否则的话你导不出word 必须flush close 一下才行
        if (out != null) {
            try {
                out.flush();
                out.close();
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
    }
    return outFile;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wzh19931008/article/details/137994472

智能推荐

推荐系统_(一)算法详解_基于人口统计学的推荐算法-程序员宅基地

推荐系统的算法详解包括基于人口统计学的推荐算法和基于内容的推荐算法。基于人口统计学的推荐算法主要通过用户画像来进行推荐,而基于内容的推荐算法则通过相似度计算和特征工程来进行推荐。此外,还介绍了ALS和梯度下降算法。

go语言编写php扩展,golang 编写 PHP 扩展-程序员宅基地

文章浏览阅读133次。phper 都知道 php-extension 采用 C/C++ 编写.由于 C/C++ 开发效率问题我们来采用 golang 编写 php-extension充分利用 golang 的开发效率和生态给 PHP 添砖加瓦.环境准备wsl ubuntugolang 1.13php 7.3新建项目php7.3 里面的 ext_skel 和以前版本参数不一样,请查看 help 操作php:./ext..._封装一个go的扩展给php程序调用

python 删除print()两个输出语句之间的空格_print中间有空格-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏3次。python 删除print()两个输出语句之间的空格。回文诗:静思伊久阻归期忆别离时闻漏转。_print中间有空格

题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。-程序员宅基地

文章浏览阅读335次,点赞6次,收藏7次。(2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。System.out.print( "请键入一个正整数: ");(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

caktus ai最适合学生的AI助手(有免费额度)-程序员宅基地

文章浏览阅读1k次。Caktus AI是一个AI写作助手。它会将您的文本输入变成一个完整的家庭作业答案。您可以使用 Caktus 撰写论文解决数学问题和编写代码。该工具有免费试用版和负担得起的计划,供学生无限制使用。简而言之,该工具在几秒钟内生成了大部分原创和独特的内容。它易于使用,但它在令人信服的语气中也犯了一些错误。Caktus 非常适合学生作为 AI 辅助工具,以帮助进行锻炼并提高生产力。该工具可以从头到尾完成练习,但会犯一些错误,有时会生成非原始文本。_caktus ai

jq对象与js对象_js对象中使用jq-程序员宅基地

文章浏览阅读2.9k次,点赞2次,收藏3次。jquery中的$(“#id”)与document.getElementById(“id”)的区别以前一直认为jquery中的$(“#id”)和document.getElementByIdx_x(“id”)得到的效果是一样的,今天做特效的时候才发现并不是这么一回事,通过测试得到:1、alert($(“#div”))得到的是[object Object]2、alert(document_js对象中使用jq

随便推点

【C++学习笔记】1.5 extern “C“_extern c 头文件-程序员宅基地

文章浏览阅读882次,点赞7次,收藏11次。在函数前加extern "C",意思是告诉编译器,将该函数按照C语言规则来编译。_extern c 头文件

vim命令-程序员宅基地

文章浏览阅读48次。vim是从vi发展出来的一个文本编辑器,它为用户提供了许多新特性和命令。在使用vim:启动vim后默认进入的模式,可以使用各种快捷键命令来操作文本。:在此模式下可以输入文本。:可以选择文本,然后进行复制、剪切、粘贴等操作。:可以输入命令,如保存文件或退出vim。以下是一些vim。

【CV第一篇】计算机视觉的四大基本任务_cv任务-程序员宅基地

文章浏览阅读5.2k次,点赞9次,收藏48次。修炼一途,乃窃阴阳,夺造化,转涅槃,握生死,掌轮回。武之极,破苍穹,动乾坤!! ——《武动乾坤》_cv任务

matlab医学图像处理实现读取图片头文件信息,图片三等分及灰度图绘制 ( 医学图像处理教材示例一)_医学图像处理与分析课本示例代码答案-程序员宅基地

文章浏览阅读3k次,点赞9次,收藏43次。matlab实现读取图片头文件信息,图片三等分及灰度图绘制医学图像处理教材示例一此文章是医学图像处理与分析第二版教材示例一代码1 解读下面图像的文件头和位图信息数据程序如下clearfid=fopen('示例一.bmp','r');fileinfo=(fread(fid,54)); %此处54为读取行数读取结果为一个列矩阵每行对应结果如图。15行之后还有其他数据,..._医学图像处理与分析课本示例代码答案

sony电视投屏android,Wow,将苹果Macbook投屏到索尼BRAVIA原来是这样玩…教程分享-程序员宅基地

文章浏览阅读5.5k次。索尼BRAVIA一直以来坚持优秀的音画体验得以成为行业发展的风向标,在进入智能时代之后,丰富有趣的功能体验也倍受关注。今年的索尼BRAVIA高端新品都搭载了Android TV 8.0,在内容丰富性和操作上都有了更出色的体验。图1.jpg (98.61 KB)2020-7-18 09:38 上传索尼BRAVIA智能电视除了能够提供优质丰富的在线流媒体资源,还能将智能手机上的内容通过第三方应用投屏到..._mac连接索尼电视 声音断续

Python数据处理035:结构化数据分析工具Pandas之Pandas概览_python中只能表示结构化算法的算法描述工具-程序员宅基地

文章浏览阅读5.1k次,点赞9次,收藏41次。Python结构化数据分析工具Pandas之Pandas概览_python中只能表示结构化算法的算法描述工具