在poi-tl的区块对中实现用布尔值插入Word分页符的一种方法
目录
关于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分页符的一种方法相关推荐
- java poi doc转docx_Java 插入Word分页符、分节符
在Word文档中,插入分页符或分节符是一种规范文档内容布局的有效方式.特别是对于一些文档格式要求严格,排版布局严谨的文档,如论文.书籍.期刊等等,通过插入的分页符或分节符可以将每部分内容加以合理区分, ...
- matlab制作的表格引入word文档,在Excel表格中插入Word文档的三种方法
在Excel文档中,插入或链接Word数据一般有利用复制粘贴插入Word文档内容.直接插入Word文档.将Excel表格的内容链接到Word文档3种方法. 一.利用复制粘贴插入Word文档内容 如果用 ...
- windows系统中,在当前目录下打开cmd命令行的两种方法
windows系统中,在当前目录下打开cmd命令行的两种方法 1.在当前路径地址栏中直接输入'cmd',然后回车. 2.在当前路径下,按住'shift'键同时点击鼠标右键,点击"在此处打开P ...
- Java中将List中的值赋给另一个List几种方法实现
Java中引用变量之间进行值传递不可以直接赋值,比如两个数组或者List通过a=b 来直接复制的话,b发生变化a也会改变,因为a,b指向同一地址. List<Integer> a = ne ...
- java中批次号_在一个批次中插入多笔记录的几种方法
插入数据库方法很多,下面Insus.NET列举几种方法,看看你常用的是哪一种: 创建一张表: CREATE TABLE [dbo].[Network_Info] ( [ID] INT NOT NULL ...
- 把python tkinter canvas中的图形图像保存为通用格式文件的5种方法
在计算机上画图未完成,需要保存未完成图形以便以后继续,或者完成画图,要保存为通用格式文件,方便浏览.如使用python tkinter Canvas画图,其好像没有将图像保存通用格式文件的方法,但可以 ...
- html word 分页符,word中分页符有什么作用?word中分页符的作用介绍
①分页符 当文本或图形等内容填满一页时,Word会插入一个自动分页符并开始新的一页.如果要在某个特定位置强制分页,可插入"手动"分页符,这样可以确保章节标题总在新的一页开始.首先, ...
- SQL Server中灾难时备份结尾日志(Tail of log)的两种方法
简介 在数据库数据文件因各种原因发生损坏时,如果日志文件没有损坏.可以通过备份结尾日志(Tail of log)使得数据库可以恢复到灾难发生时的状态. 例如: 上图中.在DB_1中做了完整备份,在Lo ...
- python中字符串的布尔值_Python基础之字符串,布尔值,整数,列表,元组,字典,集合...
一.str字符串 1.capitalize字符串首字母大写 name = "json" v = name.capitalize() print(v) # 输出结果: Json 2. ...
- Python中按值来获取指定键的两种方法
Python字典中的键是唯一的,但不同的键可以对应同样的值,比如说uid,可以是1001.id同样可以是1001.这样的话通过值来获取指定的键,就不止一个!而且也并不太好处理.这里同样提供两种思路来处 ...
最新文章
- Win32 环境下的堆栈
- unity能连jsp吗_Unity3D与JSP TomCat服务器传递数据和文件( 一) 建立Java服务器
- ETSI GS MEC 014,UE 标识 API
- UVa11107 - Life Forms(后缀数组)
- Qt vlc视频开发libvlc_new返回空的问题
- MyBatis入门HelloWorld,注解实现
- 干货:数据仓库架构及基础知识
- amp 显示成转义字符 in html,如何在HTML标签中转换转义字符?(How to convert escape characters in HTML tags?)...
- 2维数组 qt_Qt编写地图综合应用11-动态添加
- [系统安装]_VirtualBox + slackware64-15.0-install-dvd + fiuxbox 窗口管理器 + 终端界面鼠标支持
- 对外汉语语料库有哪些_史上最全最新的语料库资源大全【对外汉语教学研究工具】...
- 电脑计算机人员英语,计算机专业英语词汇新大全(完美打印版).pdf
- 计算机专业数据结构试题答案,2021考研计算机408数据结构试题及答案解析
- 1993年考研数学一解析pdf
- 组装计算机什么配置比较好,组装电脑什么配置好 组装电脑配置推荐
- 计算机双系统,细说如何给电脑安装双系统
- AH快递单打印软件(顺丰申通圆通韵达中通天天EMS) 3.77
- 数据包络分析--Additive Model
- 广东未来科技:书写立体显示事业传奇的行业独角兽
- 线速 包转发率 吞吐率