当前位置: 首页 > wzjs >正文

网站制作 广州b站视频推广

网站制作 广州,b站视频推广,建设网站提供资料的函,PHP网站开发用什么电脑Spring Boot 集成Poi-tl实现动态Word文档生成 「gen-pic-word.zip」 链接: https://pan.quark.cn/s/74396770a5c2 前言 在项目开发过程中,遇到了一个需求:将用户输入的数据填充到给定格式的 Word 文档中。简单来说,就是要根据预…

Spring Boot 集成Poi-tl实现动态Word文档生成


「gen-pic-word.zip」
链接: https://pan.quark.cn/s/74396770a5c2

前言

在项目开发过程中,遇到了一个需求:将用户输入的数据填充到给定格式的 Word 文档中。简单来说,就是要根据预定义的模板生成一个新的 Word 文档,并自动填充数据。

什么是 Poi-tl?

官网:http://deepoove.com/poi-tl/

poi-tl(Poi Template Language)是一个强大的 Word 模板引擎,能够根据 Word 模板和数据动态生成新的文档。底层是基于 Apache POI 实现的。

Apache POI 提供了简便的 API 来操作各种 Word 文档元素(如文本、图片、表格、页眉、页脚、图表等),并允许直接操作文档的 XML 结构。

Poi-tl 的功能特点:

功能描述
文本渲染渲染模板中的文本标签
图片渲染渲染模板中的图片标签
表格渲染渲染模板中的表格标签
列表渲染渲染模板中的列表标签
图表渲染渲染不同类型的图表,包括柱状图、折线图等
条件渲染根据条件显示或隐藏内容
循环渲染对文本、图片、表格等内容进行循环渲染
表格行/列循环对表格的行或列进行循环渲染
图片替换替换文档中的指定图片
超链接、书签、锚点支持文档内的超链接、书签、锚点等功能
强大的表达式支持完全支持 SpringEL 表达式,并可扩展至 OGNL、MVEL 等表达式
自定义标签支持支持自定义标签前后缀
文本框支持支持文本框中的标签
样式自定义自定义模板样式,同时代码中也可动态设置样式
模板嵌套支持嵌套模板功能
Word 合并支持 Word 中的合并操作
自定义函数(插件)允许在模板中使用自定义函数

通过这些特性,我们可以轻松地实现模板渲染,生成符合特定格式要求的文档。

如何使用 Poi-tl?

本文以 Spring Boot 项目为例,展示如何集成 Poi-tl 进行模板渲染。小伙伴们可以按照步骤一起实践!

1. 创建 Spring Boot 项目

首先,创建一个 Spring Boot 项目,版本为 2.2.1(可以根据需要调整版本)。在 pom.xml 文件中引入以下依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>

2. 添加 Poi-tl 依赖

接下来,向 pom.xml 中添加 Poi-tl 的依赖:

<dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.9.1</version>
</dependency>

3. 准备 Word 模板

我们需要准备一个 Word 模板。可以手动创建一个 Word 文件,这里我们以 Hello World.docx 为例,模板内容如下:

模板示例

我们将模板存放在 resources 目录下,并定义几个占位符,例如:{{title}}{{text}}{{author}} 等。

4. 渲染模板并生成新文档

我们可以通过 XWPFTemplate 来渲染模板,将数据填充到模板中并生成新的文档。示例代码如下:

@SpringBootTest
public class PoiTlApplicationTest {@Testpublic void test() {// 获取 Word 模板路径String filepath = this.getClass().getClassLoader().getResource("hello-world.docx").getPath();// 渲染数据XWPFTemplate template = XWPFTemplate.compile(filepath).render(new HashMap<String, Object>() {{put("title", "Hello, poi-tl Word模板引擎");put("text", "Hello World");}});// 输出新文档try {template.writeAndClose(new FileOutputStream("output.docx"));} catch (IOException e) {e.printStackTrace();}}
}

执行上述单元测试后,新的文档 output.docx 将会生成,并且内容将如预期渲染。

渲染结果

相关概念

模板

模板是一个 .docx 格式的文件,通常通过 Microsoft Word 或 WPS Office 创建。在模板中,我们使用占位符来标识需要动态渲染的内容。

标签

Poi-tl 使用标签来标识占位符,所有标签都以 {{ 开头,}} 结尾。标签可以出现在 Word 文档的任何位置,包括页眉、页脚、表格内部、文本框等。

数据模型

数据模型是将渲染数据传递给模板的方式,通常使用 Map 或 Java 对象。我们可以选择通过哈希表或对象来传递数据。

  1. 哈希表(key 为标签名)
Map<String, Object> data = new HashMap<>();
data.put("title", "Hello, poi-tl Word模板引擎");
data.put("text", "Hello World");
data.put("author", "god23bin");
data.put("description", "这还不关注 god23bin?再不关注我可要求你关注了!");
  1. Java 对象(属性为标签名)
public class DataModel {private String title;private String text;private String author;private String description;// 省略 getter 和 setter
}DataModel data = new DataModel();
data.setTitle("Hello, poi-tl Word模板引擎");
data.setText("Hello World");
data.setAuthor("god23bin");
data.setDescription("这还不关注 god23bin?再不关注我可要求你关注了!");

标签写法

Poi-tl 支持多种标签类型,常见的标签包括文本、图片、表格、列表等:

  • 文本标签{{var}}
  • 图片标签{{@var}}
  • 表格标签{{#var}}
  • 列表标签{{*var}}

插件

Poi-tl 支持插件机制,插件允许我们在模板中执行自定义的逻辑。例如,我们可以将 HTML 渲染插件绑定到某个标签上,使其支持 HTML 内容渲染。

Configure configure = Configure.builder().bind("description", new HtmlRenderPolicy()).build();

表格行循环

如果需要在 Word 文档中渲染多行表格数据,可以使用 HackLoopTableRenderPolicy 插件来循环渲染表格的行。

@Test
public void rowLoopTest() {AcWordModel data = getFromDB();  // 假设从数据库获取数据String filepath = this.getClass().getClassLoader().getResource("table-row-loop.docx").getPath();Configure configure = Configure.builder().bind("articles", new HackLoopTableRenderPolicy()).bind("columns", new HackLoopTableRenderPolicy()).build();XWPFTemplate template = XWPFTemplate.compile(filepath, configure).render(data);try {template.writeAndClose(new FileOutputStream("ac-word.docx"));} catch (IOException e) {e.printStackTrace();}
}

封装工具类

为了方便调用,我们可以封装一个工具类来处理 Word 渲染:

public class WordUtil {public static void generateWordFile(String templatePath, String targetPath, Map<String, Object> data) {XWPFTemplate template = XWPFTemplate.compile(templatePath).render(data);try {template.writeAndClose(new FileOutputStream(targetPath));} catch (IOException e) {e.printStackTrace();}}
}

总结

通过 Poi-tl,我们可以轻松实现基于模板的文档渲染。无论是简单的文本填充,还是复杂的表格、图表渲染,都能轻松应对。希望这篇教程能帮助大家更好地使用 Poi-tl 进行文档自动化生成!

http://www.dtcms.com/wzjs/304817.html

相关文章:

  • 免费网站代码下载网络营销方式与工具有哪些
  • 泉州企业网站制作定制百度推广服务费一年多少钱
  • 怎么建网站和网站模块北京优化靠谱的公司
  • 网站做的长图能导出吗软文发稿平台
  • 中建八局第一建设公司网站个人博客网站设计毕业论文
  • 两个网站做响应式网站seo实训报告
  • 做视频网站如何生成url网店推广实训报告
  • 网站建设的6个基本步骤成功的网络营销案例
  • 兰州市城市建设设计院官方网站seo工具查询
  • 网站开发支付功能怎么做可口可乐营销策划方案
  • 企业信息公示管理系统河南成都网站改版优化
  • 上海建网站价格友链申请
  • 乐清市建设路小学网站上海正规seo公司
  • 求助如何做网站推广百度大数据搜索引擎
  • 做女朋友的网站百度关键词推广怎么做
  • 同ip网站怎么做百度公司好进吗
  • 重庆奉节网站建设公司推荐肥城市区seo关键词排名
  • jsp实战网站开发视频搜索引擎大全网站
  • 公司设计网站需要多久做网页怎么做
  • 徐州网站快速优化排名他达拉非片的作用及功效副作用
  • 怎样用自己电脑做网站磐石网站seo
  • 网站建设之前必须 域名备案迅雷下载磁力天堂
  • 玉树电子商务网站建设公司万能软文模板
  • 广州seo优化公司排名保定百度seo公司
  • 网摘网站推广法人民日报最新新闻
  • 湖南做网站的公司站长之家域名
  • 网站建设佰金手指科杰十七在线网页制作工具
  • 网站建设类型域名注册商怎么查
  • b2b和b2c有什么区别北京建站优化
  • 温州网站建设钱宁波seo推广咨询