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

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

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

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

看下导出效果:


完美收工。

相关推荐

linux 测试rs485_如何测试rs485

MODBUS串口调试助手读取RS-仪表数据MODBUS串口调试助手RS-读取仪表数据概述通过Modbus串口软件(各种调试助手)读取仪表中的数据。1配置硬件要求PC操作电脑USB转RS-调试电缆R...

java中model java中model包的作用

java包管理、访问修饰符、static/final关键字一、包管理(Package)核心作用组织代码:将相关类归类到同一目录下(如com.utils、com.model)避免命名冲突:不同包中...

Jira持续集成_持续集成 ci

Jira停售一年后,国产研发管理平台谁能真正站出来?年2月,Atlassian正式终止Server产品的销售和支持,这一决定让国内众多研发团队不得不重新评估自己的项目管理工具。转眼一年过...

linux redhat系统下载_linux redhat安装教程

红帽企业版免费提供给开发者下载使用红帽RedHat宣布,开发者只要免费注册红帽开发者项目后,即可免费下载使用公司的企业发行版RHEL7(RedHatEnterpriseLinux7)。免费...

Excel 文件双击打不开,非要在文件里打开怎么办?

操作无法完成,因为其中的文件夹或文件已在另一程序中打开使用Windows系统用朋友们,应该经常会遇到这个提示,如下图所示:遇到这个问题,如果安装了的话,可以尝试用的解锁功能,在文件夹上点右键,看有没有...

android MotionEvent x

Android学习之手势操作在昨天我们讲了Android的OnTouch触摸事件,有时候触摸和手势是相互联系的,密不可分的关系,所以上节我们讲了触摸事件,今天我们自然而然的就需要讲手势操作了。触摸,手...

FreeNAS 配置 FC 存储模式

三、FreeNAS篇:系统基本设置及存储池管理,实现远程访问上节我们通过U盘成功在蜗牛星际上安装好了FreeNAS系统,本次将在系统层面上进行基本的配置与存储管理,实现远程smb访问硬盘上的资源。1....

hillstone secure connect安卓

山石网科:携手华为鸿蒙打造网络安全方案每经AI快讯,山石网科今日官微消息,近日,华为智慧办公生态峰会在武汉召开,旨在把握原生鸿蒙带来的崭新机遇,携手众多合作伙伴共同探索构建开放共享的智慧办公新生态。山...

jad反编译成java文件指令

达内java培训专家:7款开源Java反编译工具反编译听起来是一个非常高上大的技术词汇,通俗的说,反编译是一个对目标可执行程序进行逆向分析,从而得到原始代码的过程。达内java培训(java.tedu...

centos安装ikev2(centos安装ssh服务)

RockyLinuxRC1正式发布了,第一个完整版本距上个版本发布已经过去了一个多月的时间,从整体测试来看,基本和其他的主流发行版本区别不大,但由于后续不会推出稳定版本,所以还是有些担忧,从此次发...

【Unity3D插件】AVPro Video插件分享《视频播放插件》

揭秘元宇宙带火的产业!NFT发展迅猛、自研VR/AR硬件成主流|智东西内参从Facebook改名Meta,引爆元宇宙概念已经过去近一年时间。在这段时间里,与元宇宙相关的Web3.0、VR/AR、元...

100个非常实用的Shell拿来就用脚本实例

个经典实用的shell脚本,可自由复制,拿来即用建议收藏Shell作为一种命令语言和程序设计语言,其优势显而易见,shell脚本的优势在于它能实现自动化运维,能提高运维效率,帮助运维人员摆脱繁杂的操作...

java的小游戏 java小游戏完整代码

熬夜整理个Java经典小游戏项目开发源代码,含可执行程序及源码我相信现在有很多的小伙伴都已经看到了现在网上都在说Java找不到工作,其实我想说的就是现在的那些找不到Java工作的其实最主要的就是没有项...

Li2023ps2023免费磨皮滤镜插件Portraiture

最新Retouch4me合1来啦!AI智能修图磨皮神器插件简介文件名称:Retouch4me合1支持系统:Windows安装教程:在安装包里获取方式:在底部分享形式:百度网盘【文末提供下载方式】▼...

43. ExtJs控件属性配置详细

超详细的CMDB介绍--概念、架构、模型、表设计及开源选择概述今天主要介绍一下CMDB的一些基础内容,感兴趣的朋友可以看看~一、cmdb是什么?》》百度百科配置管理数据库(Configuration...