目录

关于poi-tl

关于poi-tl区块对

poi-tl中分页符如何表示

实现的例子

准备文档模板

实现的代码

测试结果

总结


关于poi-tl

poi-tl是基于Apache POI的Word模板引擎,它使用java语言来实现,它可以将word文档中的“标签”渲染为用户指定的文字、表格、图片等。使用模板引擎生成word比使用Apache POI的API来生成来说,快捷了不少。关于poi-tl的具体介绍请看poi-tl作者网站。相信能够进来阅读博客的朋友都对此有一定了解的。

关于poi-tl区块对

这里直接引用poi-tl作者的原话,“区块对由前后两个标签组成,开始标签以?标识,结束标签以/标识:{{?sections}}{{/sections}}”。

区块对的作用之一是可以遍历java集合(java.util.Collection),将集合内的内容渲染为用户指定的对象。如:

应用场景一:在一个文档中动态生成段落文本及图片。

应用场景二:用户想在同一个批量生成一些样式重复、内容不同的表格,可以使用区块对来实现。

poi-tl中分页符如何表示

最简单的方法就是直接在word模板中插入分页符。但是这种方式不太灵活,比如说在动态生成段落时,有些段落结尾后,需要分页,而有些段落不需要分页。

基于此情况,本人认为应该使用布尔值结合Apache POI的API来生成分页符。在POI中org.apache.poi.xwpf.usermodel.XWPFRun类有插入分页符的方法addBreak。而在poi-tl中使用POI的API一般来说需要结合自定义插件(即实现com.deepoove.poi.policy.AbstractRenderPolicy)。

实现的例子

准备文档模板

如下

实现的代码

这里为了便于测试,将所有类和方法都写在一个文件中。

import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.policy.AbstractRenderPolicy;
import com.deepoove.poi.render.RenderContext;
import org.apache.poi.xwpf.usermodel.BreakType;
import org.apache.poi.xwpf.usermodel.XWPFRun;import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;/*** poi-tl中自定义插入分页符标签的例子,不可直接用于生产环境**/
public class PageBreakTest {static String templatePath = "E:\\测试.docx";public static void main(String[] args) throws IOException {pageBreakDemo("E:\\测试输出.docx");}public static void pageBreakDemo(String outPut) throws IOException {List<MyParagraph> wordDataList = new ArrayList<>();//生成数据setWordDataList(wordDataList);//这里绑定了一个自定义的插件到isPageBreak标签Configure config = Configure.builder().useSpringEL().bind("isPageBreak", new AbstractRenderPolicy<Boolean>() {@Overridepublic void doRender(RenderContext<Boolean> context) throws Exception {XWPFRun where = context.getWhere();boolean thing = context.getThing();where.setText("", 0);if (thing)where.addBreak(BreakType.PAGE);}}).build();XWPFTemplate.compile(templatePath, config).render(new HashMap<String, Object>() {{put("paragraphList", wordDataList);}}).writeToFile(outPut);}/*** 生成测试数据* @param wordDataList*/private static void setWordDataList(List<MyParagraph> wordDataList){wordDataList.add(new MyParagraph("明月几时有,把酒问青天。",false));wordDataList.add(new MyParagraph("不知天上宫阙,今夕是何年?",false));wordDataList.add(new MyParagraph("我欲乘风归去,又恐琼楼玉宇,高处不胜寒。",true));wordDataList.add(new MyParagraph("大江东去,浪淘尽,千古风流人物。",false));}
}/*** 测试实体类*/
class MyParagraph {private String content;private Boolean isPageBreak;public MyParagraph(String content, Boolean isPageBreak) {this.content = content;this.isPageBreak = isPageBreak;}public MyParagraph() {}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public Boolean getIsPageBreak() {return isPageBreak;}public void setIsPageBreak(Boolean pageBreak) {isPageBreak = pageBreak;}
}

测试结果

这里使用word大纲模式展示

总结

实现在poi-tl中用自定义的布尔值在word文档中插入分页符,实现的核心还是在poi-tl中实现自定义插件。因为有自定义插件的存在,也使得poi-tl生成文档变得更加灵活。

在poi-tl的区块对中实现用布尔值插入Word分页符的一种方法相关推荐

  1. java poi doc转docx_Java 插入Word分页符、分节符

    在Word文档中,插入分页符或分节符是一种规范文档内容布局的有效方式.特别是对于一些文档格式要求严格,排版布局严谨的文档,如论文.书籍.期刊等等,通过插入的分页符或分节符可以将每部分内容加以合理区分, ...

  2. matlab制作的表格引入word文档,在Excel表格中插入Word文档的三种方法

    在Excel文档中,插入或链接Word数据一般有利用复制粘贴插入Word文档内容.直接插入Word文档.将Excel表格的内容链接到Word文档3种方法. 一.利用复制粘贴插入Word文档内容 如果用 ...

  3. windows系统中,在当前目录下打开cmd命令行的两种方法

    windows系统中,在当前目录下打开cmd命令行的两种方法 1.在当前路径地址栏中直接输入'cmd',然后回车. 2.在当前路径下,按住'shift'键同时点击鼠标右键,点击"在此处打开P ...

  4. Java中将List中的值赋给另一个List几种方法实现

    Java中引用变量之间进行值传递不可以直接赋值,比如两个数组或者List通过a=b 来直接复制的话,b发生变化a也会改变,因为a,b指向同一地址. List<Integer> a = ne ...

  5. java中批次号_在一个批次中插入多笔记录的几种方法

    插入数据库方法很多,下面Insus.NET列举几种方法,看看你常用的是哪一种: 创建一张表: CREATE TABLE [dbo].[Network_Info] ( [ID] INT NOT NULL ...

  6. 把python tkinter canvas中的图形图像保存为通用格式文件的5种方法

    在计算机上画图未完成,需要保存未完成图形以便以后继续,或者完成画图,要保存为通用格式文件,方便浏览.如使用python tkinter Canvas画图,其好像没有将图像保存通用格式文件的方法,但可以 ...

  7. html word 分页符,word中分页符有什么作用?word中分页符的作用介绍

    ①分页符 当文本或图形等内容填满一页时,Word会插入一个自动分页符并开始新的一页.如果要在某个特定位置强制分页,可插入"手动"分页符,这样可以确保章节标题总在新的一页开始.首先, ...

  8. SQL Server中灾难时备份结尾日志(Tail of log)的两种方法

    简介 在数据库数据文件因各种原因发生损坏时,如果日志文件没有损坏.可以通过备份结尾日志(Tail of log)使得数据库可以恢复到灾难发生时的状态. 例如: 上图中.在DB_1中做了完整备份,在Lo ...

  9. python中字符串的布尔值_Python基础之字符串,布尔值,整数,列表,元组,字典,集合...

    一.str字符串 1.capitalize字符串首字母大写 name = "json" v = name.capitalize() print(v) # 输出结果: Json 2. ...

  10. Python中按值来获取指定键的两种方法

    Python字典中的键是唯一的,但不同的键可以对应同样的值,比如说uid,可以是1001.id同样可以是1001.这样的话通过值来获取指定的键,就不止一个!而且也并不太好处理.这里同样提供两种思路来处 ...

最新文章

  1. Win32 环境下的堆栈
  2. unity能连jsp吗_Unity3D与JSP TomCat服务器传递数据和文件( 一) 建立Java服务器
  3. ETSI GS MEC 014,UE 标识 API
  4. UVa11107 - Life Forms(后缀数组)
  5. Qt vlc视频开发libvlc_new返回空的问题
  6. MyBatis入门HelloWorld,注解实现
  7. 干货:数据仓库架构及基础知识
  8. amp 显示成转义字符 in html,如何在HTML标签中转换转义字符?(How to convert escape characters in HTML tags?)...
  9. 2维数组 qt_Qt编写地图综合应用11-动态添加
  10. [系统安装]_VirtualBox + slackware64-15.0-install-dvd + fiuxbox 窗口管理器 + 终端界面鼠标支持
  11. 对外汉语语料库有哪些_史上最全最新的语料库资源大全【对外汉语教学研究工具】...
  12. 电脑计算机人员英语,计算机专业英语词汇新大全(完美打印版).pdf
  13. 计算机专业数据结构试题答案,2021考研计算机408数据结构试题及答案解析
  14. 1993年考研数学一解析pdf
  15. 组装计算机什么配置比较好,组装电脑什么配置好 组装电脑配置推荐
  16. 计算机双系统,细说如何给电脑安装双系统
  17. AH快递单打印软件(顺丰申通圆通韵达中通天天EMS) 3.77
  18. 数据包络分析--Additive Model
  19. 广东未来科技:书写立体显示事业传奇的行业独角兽
  20. 线速 包转发率 吞吐率

热门文章

  1. 提高多表关联数据查询效率
  2. 田忌赛马c语言程序设计,关于c语言的田忌赛马问题。
  3. 英特尔服务器芯片组路线图,英特尔处理器路线图:14nm用到2021年 7nm再等3年
  4. 项目上线质量如何评估
  5. 拒绝访问病毒解决方法
  6. CSS<< 更改鼠标样式为自定义图片
  7. matlab 优化 小于,科学网—matlab全局优化与局部优化 - 张凌的博文
  8. AutoRun机制详解
  9. bzoj 4134: ljw和lzr的hack比赛 sg函数+字典树
  10. 外交部官员回应中国免签国都是穷乱国:需要时间