百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

world模板 java world模板怎样增加下一页

feilongw 2025-03-25 18:59 66 浏览

java进行后台数据写入word模板再进行压缩包下载

经常会遇到这样需求,写一个导出功能,进行word模板格式进行导出,数据库相应数据回填到word模板中,再对这个模板进行导出功能。如果一次性需要导出多个模板情况下,就要对多个进行压缩成一个压缩包再一次性导出。

废话不多说直接上代码:

需要导入相应jar包:


controller层:

@GetMapping(value = "/export")
public void export(HttpServletResponse response) {
    try {
        taskServic.exportWordZip(response);
    } catch (Exception e) {
        logger.error("导出失败", e);
    }
}

service层:

/**
 * 获取当前系统的临时目录
 */
public final static String SRC_PATH = System.getProperty("java.io.tmpdir");
/**
 * 导出(zip)
 * @param response
 */
public void exportWordZip( HttpServletResponse response) {
    Listfiles = new ArrayList<>();
   //数据库查出来数据--模拟写个测试数据
    DemoVO vo = new DemoVO();
    vo.setName("测试模板数据"+System.currentTimeMillis());
    String zipFileName = "测试模板数据";
    // 动态获取模板名称
    String templateName = "demo.docx";
    //模板
    String fileName = System.currentTimeMillis()+"";
    //要写入模板里数据
    String tempFileTemplate = generate(vo, templateName, fileName);
    if (tempFileTemplate != null) {
        files.add(new File(tempFileTemplate));
    }
    //压缩包下载
    if (files != null) {
        zipDownload(response, zipFileName + "_" + System.currentTimeMillis() + ".zip", files);
    }
}
/**
 * 生成-模板-数据写入.docx文件模板
 *
 * @return
 */
public String generate(Object object, String templateName, String fileName) {
    // 获取当前系统的临时目录
    String filePath = SRC_PATH;
    String addTimeFileName =  fileName;
    //存储的文件路径  File.separator
    String storeFilePath = filePath + addTimeFileName;
    String docxFilePath = storeFilePath + ".docx";
    //后缀
    String suffix = ".docx";
    XWPFTemplate template = null;
    try (OutputStream os = new FileOutputStream(docxFilePath);
         InputStream inputStream = new ClassPathResource("/templates/" + templateName).getInputStream()) {
        DemoVO vo = (DemoVO) object;
        template = XWPFTemplate.compile(inputStream).render(new HashMap() {{
            put("name", vo.getName());
        }});
        template.write(os);
        os.flush();
        return storeFilePath + suffix;
    } catch (Exception e) {
      //  logger.error("生成模板失败", e);
    } finally {
        if (template != null) {
            try {
                template.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return null;
}
/**
 * zip打包下载
 *
 * @param response
 * @param zipFileName
 * @param fileList
 */
public void zipDownload(HttpServletResponse response, String zipFileName, ListfileList) {
    // zip文件路径
    String zipPath = ZipDownloadUtil.FILE_PATH + zipFileName;
    try {
        //创建zip输出流
        try (ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipPath))) {
            //声明文件集合用于存放文件
            byte[] buffer = new byte[];
            //将文件放入zip压缩包
            for (int i = 0; i < filelist.size i file file='fileList.get(i);' try fileinputstream fis='new' fileinputstreamfile out.putnextentrynew zipentryfile.getname int len zip while len='fis.read(buffer))'> 0) {
                        out.write(buffer, 0, len);
                    }
                    out.closeEntry();
                }
                file.delete();
            }
        }
        //下载zip文件
        ZipDownloadUtil.downFile(response, zipFileName);
    } catch (Exception e) {
      //  logger.error("文件下载出错", e);
    } finally {
        // zip文件也删除
        fileList.add(new File(zipPath));
        ZipDownloadUtil.deleteFile(fileList);
    }
}

看下一个模板内容


demo.docx

看下导出效果:


完美收工。

相关推荐

13款用于Web的流行HTML5视频播放器

开源项目评测之Html5视频播放器推荐Web项目开发中视频播放是一个非常常见的需求,需要播放器能够支持pc端和移动端的使用,并且支持常见的视频格式。我们从github上精选了5款优秀的Html5播放...

[ 渗透入门篇 ] 渗透行业必备术语大集合(全 -- 五万字总结)

反渗透系统常用术语(1)淡水:又称渗透水、产品水,是反渗透系统的净化水。(2)供水:又称给水,是进入反渗透膜系统的供给水源。(3)浓水:又称盐水,是反渗透系统的浓缩废液。(4)半透膜:允许溶液中溶剂透...

java-verbose是什么意思 java -verbose

灵魂拷问:为什么short、byte会被提升为int?boolean到底多大?为什么short、byte会被提升为int?在学习Java语法的时候,知道short、byte、byte类型在做运...

Android Hanlder 揭密之路- 深入理解异步消息传递机制Looper、Handler、Message三者关系

Handler知识点梳理:Handler、Looper以及Message三者之间的关系前言Handler、Looper以及Message之间的关系,概括性来说,Looper负责的是创建一个Me...

csdn freemarker jquery 预览word

高质量人才助推高质量发展——西安市高新区“精益创业带动就业示范行动”系列活动西安市高新区“精益创业带动就业示范行动”系列活动已于8月日在高新区软件新城正式启动。本周五(8月日)上午点分,系列活动之“直...

android 修改菜单menu背景

教你把手机的状态栏和通知栏改造成安卓L风格说道颜值,就得吐槽一下安卓及一下的版本了。原生真的是丑,丑到没朋友。到了安卓,谷歌终于大刀阔斧的对安卓的颜值进行了大动刀。【下拉通知栏】那么,安卓有没有办法搞...

DCDC架构中 dcdc类型(dcdc的主要作用)

DC-DC工作原理,看完你就懂了上篇文章说了LDO的原理,那本篇就来说一下DCDC的工作原理吧。开关电源:是一种高频化电能转换装置,其主要利用电力电子开关器件(如晶体管、MOS管、可控晶闸管等),通过...

getPath(),getAbsolutePath(),getCanonicalPath() 区别

java获取文件路径1.前言Java开发中我们经常要获取文件的路径,比如读取配置文件等等。今天我们就关于文件的路径和如何读取文件简单地探讨一下。2.文件的路径文件的路径通常有相对路径与绝对...

android 多任务键app后台重新唤起生命周期 安卓任务管理器快捷键

好用的备忘录待办提醒APP任务管理工具怎么选?在这个信息高速流通的时代,选择一款合适的任务管理应用变得尤为关键。一个好的任务管理工具不仅能帮助我们更好地规划时间、提升效率,还能在快节奏的生活中保持条...

android数据包下载地址 数据包apk

《地牢猎手5》安卓怎么下载APK数据包下载万众期待的地牢猎手5终于推出啦,此次Gameloft在安卓平台首发推出,不过目前谷歌商店还未提供正式下载数据包,不过不用担心,蚕豆网小编为大家带来了地牢猎手...

51c大模型~合集24(c5.0模型)

北大校友打造的个智能体「我的世界」,背后原理揭晓了!来源:量子位北大校友打造的个智能体「我的世界」,背后原理揭晓了!团队全新公开页技术报告,详尽解密AI智能体如何产生专业化分工、社交互动、甚至传播虚拟...

ao3archive of own our如何使用

肖战ao3事件始末揭秘ao3是啥意思肖战粉丝举报AO3为什么惹众怒3月4日凌晨2时分,肖战工作室再次发表声明:肖战海外社交账号已无法正常登陆,任何更改均非本人及工作人员操作,后续动作均与肖战本人无关...

ansible变量运算 ansible查看变量的命令

Python中的Ansible库在Python中集成Ansible功能,主要通过以下两种方式实现,结合官方库和核心API可满足不同场景的自动化需求:一、AnsibleRunner库Ansible官方...

25个简单shell例子(shell实例讲解)

shell编程其实真的很简单(一)如今,不会Linux的程序员都不意思说自己是程序员,而不会shell编程就不能说自己会Linux。说起来似乎shell编程很屌啊,然而不用担心,其实shell编程真的...

ByConity ELT 测试体验

字节跳动开源云原生数仓引擎ByConity技术详解与应用导读本文介绍字节跳动开源的云原生数仓引擎,ByConity。主要包含四个主题:1.ByConity产生背景2.ByConity设计...