poi-tl 1.8.x 匯出Word,解析List格式資料(文字、圖片)
阿新 • • 發佈:2020-11-19
poi-tl(poi template language)是Word模板引擎,基於Microsoft Word模板和資料生成新的文件。
1.8.2文件:Poi-tl Documentation
Github:https://github.com/Sayi/poi-tl
文字
如果文字資料是List格式,如
List<String> listStr = new ArrayList<String>() {
{
add("abc");
add("cba");
}
};
傳入的資料結構為:
@Data @Builder @AllArgsConstructor @NoArgsConstructor public class TemplateEO { private List<String> listStr; }
則模板檔案可寫為
{{?listStr}}
{{=#this}}
{{/listStr}}
圖片
如果圖片資料是List格式(每張圖均需為PictureRenderData型別),如
List<PictureRenderData> listPic = new ArrayList<PictureRenderData>() {
{
add(pic1);
add(pic2);
}
};
截至目前的1.8.2版本就不能用=#this
了,=#this
僅可用來引用當前文字物件。轉換成List<Map<String, PictureRenderData>>
List<Map<String, Object>>
型別也會解析出錯。我想到的解決方法是新建一個類,類中宣告一個Object型別的變數,然後構建這個類的List。
新建ObjectEO
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ObjectEO {
private Object obj;
}
@Data @Builder @AllArgsConstructor @NoArgsConstructor public class TemplateEO { private List<ObjectEO> objList; }
對List<PictureRenderData> pics
進行處理
List<ObjectEO> objectEOS = new ArrayList<>();
pics.forEach(pic-> {
ObjectEO imgObj = ObjectEO.builder().obj(pic).build();
objectEOS.add(imgObj);
});
TemplateEO tempateEO = TemplateEO.builder().objList(objectEOS).build();
模板這樣寫:
{{?objList}}
{{@obj}}
{{/objList}}
注意
還有需要注意的一點,如果想讓圖片在一行中顯示,超出換行,不能寫成下面這樣:
{{?objList}}{{@obj}}{{/objList}}
而應該在迴圈的變數後至少加一個空格:
{{?objList}}{{@obj}} {{/objList}}
此外模板對空格也很敏感,比如製作模板時複製貼上文字出現了空格比如{{var }}
都會無法解析。