java使用poi-tl自定义word模板导出

文章目录

概要

在软件开发领域,自定义Word模板的使用是导出格式化数据的一种常见做法。poi-tl(Apache POI Template Language)作为一款基于广受认可的Apache POI库的Word模板引擎,它以纯Java组件的形式提供服务,确保了跨平台的兼容性。poi-tl以其简洁高效的代码著称,不仅易于集成,还通过其插件机制实现了功能的高度可扩展性,允许开发者根据项目需求灵活定制。这一特性使得poi-tl成为处理Word文档生成任务时的一个强有力工具。

整体架构流程

官网:poi-tl

java 复制代码
 <!--    POI 依赖 使用xlsx xml的格式(即XSSFWorkbook)   -->
  <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.2</version>
  </dependency>
  <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.2</version>
  </dependency>
  <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-scratchpad</artifactId>
    <version>3.17</version>
  </dependency>
        <!--     poi模板导入,主力包      -->
  <dependency>
    <groupId>com.deepoove</groupId>
    <artifactId>poi-tl</artifactId>
    <version>1.12.1</version>
  </dependency>

创建word模板

核心代码

java 复制代码
       try {
            String pictureUrl = "D:\\file\\test\\image\\bigPicture10.jpeg";
            if (pictureUrl != null && !pictureUrl.isEmpty()) {
                PictureRenderData picture = Pictures.ofLocal(pictureUrl).size(40, 30).create();
                finalMap.put("signPicture", picture);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 从classpath加载Word模板文件到临时文件
        try (InputStream inputStream = TestWord.class.getClassLoader().getResourceAsStream("template.docx")) {
            if (inputStream == null) {
                throw new RuntimeException("无法找到模板文件:template.docx");
            }

            // 创建一个临时文件用于XWPFTemplate处理
            Path tempFilePath = Files.createTempFile("word-template-", ".docx");
            Files.copy(inputStream, tempFilePath, StandardCopyOption.REPLACE_EXISTING);

            // 使用临时文件作为模板
            File wordTemplate = tempFilePath.toFile();
            LoopRowTableRenderPolicy policy = new LoopRowTableRenderPolicy();
            Configure build = Configure.builder().bind(policy, "workList").build();

            XWPFTemplate render = XWPFTemplate.compile(wordTemplate, build).render(finalMap);

            // 定义输出路径
            String outputPath = "D:\\file\\htht\\project\\260\\开发\\output.docx"; // 修改为期望的输出文件路径
            File outputFile = new File(outputPath);
            try {
                if (!outputFile.getParentFile().exists()) {
                    outputFile.getParentFile().mkdirs(); // 确保父目录存在
                }
                render.writeToFile(outputFile.getAbsolutePath());
                System.out.println("Word文档成功导出到: " + outputPath);
            } catch (IOException e) {
                throw new RuntimeException("无法写入文件: " + e.getMessage(), e);
            }

            // 删除临时文件(可选)
            Files.deleteIfExists(tempFilePath);

        } catch (IOException e) {
            throw new RuntimeException("读取模板文件失败: " + e.getMessage(), e);
        }

导出结果

资源提取:https://download.csdn.net/download/yy12345_6_/90275767

相关推荐
蜗牛一步步往上爬1 小时前
第十六章 C++语言在深度学习中的应用
开发语言·c++·深度学习
IT_陈寒1 小时前
Redis内存暴涨,没想到是AOF重写捣的鬼
前端·人工智能·后端
ikoala1 小时前
让 Codex 自己查账:一个省 token 的小技巧
前端·后端·ai编程
这个昵称不容易3 小时前
SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在
java·springboot·毕设
计算机毕设定制辅导-无忧学长3 小时前
《基于微信小程序的居家医疗陪护预约系统设计与实现》
java·spring boot·微信小程序·uniapp·居家医疗陪护预约系统
张张123y3 小时前
DSH 插件调试避坑:client.js 设置面板、热重载与高频报错排查表
开发语言·javascript·人工智能·开源·ecmascript·后端开发·ai agent
文丑颜不良啊4 小时前
LeetCode2221~2240题目解析
java·leetcode
秋饼4 小时前
Computer Use Agent Java 落地实战:感知-行动循环、执行器与安全围栏生产级实现
java·ai·技术分享·后端开发
wo_jack5 小时前
C++ 入门笔记(十六):第16课 vector 模拟实现十问十答 —— 从三指针到迭代器失效
c++·后端·面试·stl·vector
量化分析码农6 小时前
【Python量化波动率实战 02】波动率会传染:EWMA 指数加权给近期行情更大话语权
后端