标签式实现文本占位导出

143 阅读3分钟

「这是我参与2022首次更文挑战的第2天,活动详情查看:2022首次更文挑战」

  • 为了方便后续测试,这里将公共的方法抽离一下

标签

  • 上面我们提到poi-tl中有6大标签,下面我们分别通过demo来了解下。
  • poi-tl是一种logic-less模板引擎,这里简单说明下什么是login-less.他是一种轻逻辑模板语言。他的模板语法仅支持简单的语法,比如取非等简单逻辑判断。这就叫轻逻辑。他的优势在于应用在多种语言上。比如Javascript、PHP、Python、Perl等。
  • 关于标签,官网也说明了支持自定义标签。这部分属于进阶部分到后期我会通过一个案列将我之前的office-multip项目中的一个功能通过自定义标签的形式实现一下。

文本

{{var}}

  • 文本标签结构如上所示。在数据模型中我们只需要准备好var 这个变量就可以了。word中针对文本最常见的处理方式是调整样式,比如修改字体颜色等等。另外有部分场景是给文本添加超链接。针对这两个需要poi-tl提供了专门的数据解析模型。我这里总结为三类数据解析模型。
  1. String
  2. TextRenderData
  3. HyperLinkTextRenderData
解析类作用
String普通文本(类似上面demo中的title)
TextRenderDataString基础上提供样式的配置(满足基本需求)
HyperLinkTextRenderData超链接文本
  • 下面我们使用下上面提到的三种解析

在word中我们可以对文本进行改变字体,修改颜色,添加下划线,添加删除线,展现形式是上标还是下标等等设置。这些在poi-tl中我们都称之为样式

image-20211130095940274

  • 上面提到的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);