「这是我参与2022首次更文挑战的第2天,活动详情查看:2022首次更文挑战」
- 为了方便后续测试,这里将公共的方法抽离一下
标签
- 上面我们提到
poi-tl中有6大标签,下面我们分别通过demo来了解下。 poi-tl是一种logic-less模板引擎,这里简单说明下什么是login-less.他是一种轻逻辑模板语言。他的模板语法仅支持简单的语法,比如取非等简单逻辑判断。这就叫轻逻辑。他的优势在于应用在多种语言上。比如Javascript、PHP、Python、Perl等。- 关于标签,官网也说明了支持自定义标签。这部分属于进阶部分到后期我会通过一个案列将我之前的
office-multip项目中的一个功能通过自定义标签的形式实现一下。
文本
{{var}}
- 文本标签结构如上所示。在数据模型中我们只需要准备好var 这个变量就可以了。word中针对文本最常见的处理方式是调整样式,比如修改字体颜色等等。另外有部分场景是给文本添加超链接。针对这两个需要
poi-tl提供了专门的数据解析模型。我这里总结为三类数据解析模型。
- String
- TextRenderData
- HyperLinkTextRenderData
| 解析类 | 作用 |
|---|---|
String | 普通文本(类似上面demo中的title) |
TextRenderData | String基础上提供样式的配置(满足基本需求) |
HyperLinkTextRenderData | 超链接文本 |
- 下面我们使用下上面提到的三种解析
在word中我们可以对文本进行改变字体,修改颜色,添加下划线,添加删除线,展现形式是上标还是下标等等设置。这些在
poi-tl中我们都称之为样式
- 上面提到的word的操作都是对应在Style这个类中。
/**
* 文字颜色
*/
private String color;
/**
* 字体
*/
private String fontFamily;
/**
* 字体大小
*/
private int fontSize;
/**
* 粗体
*/
private Boolean isBold;
/**
* 斜体
*/
private Boolean isItalic;
/**
* 删除线
*/
private Boolean isStrike;
/**
* 下划线
*/
private Boolean isUnderLine;
/**
* 文本背景突出显示颜色
*/
private STHighlightColor.Enum highlightColor;
/**
* 间距,单位pt
*/
private int characterSpacing;
/**
* 基线(baseline)、上标(superscript)、下标(subscript)
*/
private String vertAlign;
- 官网的解释很详细了,这里我们看看官网给我们的一份演示数据
{
"text": "Sayi",
"style": {
"strike": false,
"bold": true,
"italic": false,
"color": "00FF00",
"underLine": false,
"fontFamily": "微软雅黑",
"fontSize": 12,
"highlightColor": "green",
"vertAlign": "superscript"
}
}
- 针对boolean类型的我们不需要做过多的解释,基本上看了就理解,需要注意的是这里color需要转换成对应的编码这个前端很熟悉,对于后端来说随便F12 打开都可以取色的。
fontFamily这里对应word中的字体。vertAlign在上面的代码中已经列出了基线/上标/下标三种情况的对应值了- 这里的
highlightColor是背景颜色,那么为什么这里颜色是用英文呢?在代码层面上其实他是颜色的枚举,实际上是一种映射
TextRenderData zxhtoms = new TextRenderData("000000", "zxhtoms");
Style style = new Style();
style.setColor("00FF00");
style.setHighlightColor(STHighlightColor.Enum.forString("green"));
zxhtoms.setStyle(style);
map.put("author", zxhtoms);