poi-tl简单好用

什么是poi-tl

固定布局                                                        
工具条上设置固定宽高
背景可以设置被包含
可以完美对齐背景图和文字
以及制作自己的模板

poi-tl是一个Word模板引擎,它基于Word模板和数据生成新文档。Poi-tl会保留文档模板中的样式。官网上的描述“在文档的任何地方做任何事情(Do Anything Anywhere)是poi-tl的星辰大海”。不过需要注意的是目前poi-tl仅支持docx类型的word文档生成,不支持doc类型。

why poi -tl

固定布局                                                        
工具条上设置固定宽高
背景可以设置被包含
可以完美对齐背景图和文字
以及制作自己的模板

方案

移植性

功能性

易用性

Poi-tl

Java跨平台

Word模板引擎

基于Apache POI,更友好的API

Apache POI

Java跨平台

Apache项目,不仅封装了易用的文档API(文本、图片、表格、页眉、页脚、图表等),也可以在底层直接操作XML结构

文档不全

Freemarker

XML跨平台

仅支持文本,很大的局限性

不推荐,需要维护XML结构,代码后期不可维护

OpenOffice

部署OpenOffice,移植性较差

需要了解OpenOffice的API

HTML浏览器导出

依赖浏览器的实现,移植性较差

HTML不能很好的兼容Word的格式

Jacob、winlib

Windows平台

复杂,完全不推荐使用

表格来源于poitl官网

使用poi-tl生成文档

固定布局                                                        
工具条上设置固定宽高
背景可以设置被包含
可以完美对齐背景图和文字
以及制作自己的模板

引入依赖

<dependency>  <groupId>com.deepoove</groupId>  <artifactId>poi-tl</artifactId>  <version>1.12.1</version></dependency>

文档模板

{{appendices}}是一个标签,绑定的是appendices对象,而{{?appendices}}{{/appendices}}则构成一个区块对,以?标识开始,以/标识结束。区块对中间的appendices是一个list集合,当然也可以包含图片、表格、段落等。区块对中的文档元素根据?appendices可以被渲染0次、1次或n次。如果?appendices为false或空集合,则隐藏区块中所有文档元素,非false且不是集合,渲染一次,非空集合集合循环渲染。

dictionaryEntities.size()>0是一个表达式,如果为true就会遍历dictionaryEntities。我们把dictionaryEntities声明为一个LoopRowTableRenderPolicy对象,它是一个特定场景插件,会循环遍历表格行。中括号[codeNo]中的codeNo为dictionaryEntities集合对象中的属性名。

数据

数据可以是map、字典、树结构、对象等类型。我这里模版中的appendices,dictionaryEntities是List集合。dictionaryCode在文档中需要被设置成锚点,前文中引用CC0100004,从而实现点击跳转。

HyperlinkTextRenderData link = new             HyperlinkTextRenderData(value, \"anchor:\"+dictionaryCode);

渲染数据

LoopRowTableRenderPolicy loopRowTableRenderPolicy = new LoopRowTableRenderPolicy();
Configure config = Configure.builder()                    .bind(\"Appendices\",loopRowTableRenderPolicy)                    .bind(\"dictionaryEntities\",loopRowTableRenderPolicy)                    .useSpringEL() //设置标签为Spring表达式                    .bind();XWPFTemplate template = XWFTemplate                        .compile(intputStream,config)//配置                        .render(data); //数据

生成文档

poi-tl简单好用

代码高亮

再看一下如何使用poi-tl实现代码高亮。先引入poi-tl提供的代码高亮插件。

<dependency>  <groupId>com.deepoove</groupId>  <artifactId>poi-tl-plugin-highlight</artifactId>  <version>1.0.0</version></dependency>|

然后创建HighlightRenderData对象。这里有一个注意的点,如果代码高亮绑定的数据是一个empty的list对象,最后在渲染数据的时候就会抛出异常,但是异常信息并不会说明是代码高亮绑定的数据为empty的原因。所以在处理数据的时候,如果数据是空的,也需要给一个默认的值。

private HighlightRenderData processHighlightCode(DocumentDefinitionEntity request,                                                  Map<String,List<DaDocumentDefinitionCideEntity>>collectCodeMap){    List<DaDocumentDefinitionEntity> requestDefinitionCode = collectCodeMap.get(request.getId);     HighlightRenderData definitionCode = new HighlightRenderData();     if(CollUtil.isEmpty(requestDefinitionCode)){      //如果为空,也要给一个透明主题的代码块,不然渲染数据时会报错      HightlightStyle idea = HighlightStyle.builder().withShowLine(false).withThema(\"idea\").build();       definitionCode.setCode(\" \");      definitionCode.setLanguage(\"json\");       definitionCode.setStyle(idea);       return definitionCode;    }    definitionCode.setCode(requestDefinitionCode.get(0).getDefinitionCode());     definitionCode.setLanguage(MessageEnum.of(request.getType()));     definition.setStyle(codeStyle);     return definitionCode;}

最后渲染一下数据,导出文档,就可以实现代码高亮啦。

HighlightRenderPolicy highlightRenderPolicy = new HighlightRenderPolicy(); Configure config = Configure.builder()                .bind( \"requestParam.requestDefinitionCode\",highlightRenderPolicy)XWPFTemplatetemplate = XWPFTemplatecompile(inputStream, config)                .render(transactionTreeTable);//渲染数据

poi-tl官网地址:Poi-tl Documentation (deepoove.com)

 End 

文章作者:鲍启凡

封面设计:Lina  

?

原创文章,作者:EBCloud,如若转载,请注明出处:https://www.sudun.com/ask/33566.html

(0)
EBCloud's avatarEBCloud
上一篇 2024年4月2日 下午3:28
下一篇 2024年4月2日 下午3:28

相关推荐

  • w7防火墙在哪里设置

    在当今信息爆炸的时代,网络安全问题正日益引起人们的关注。而作为网络安全加速行业中的一员,w7防火墙更是备受瞩目。但是,你知道如何设置w7防火墙吗?它的作用和重要性又是什么呢?如果你…

    行业资讯 2024年4月20日
    0
  • 网站被攻击了怎么处理网警,怎么应对网站被河蟹攻击的情况问题

    随着网络安全威胁的不断增加,保护网站已成为每个网站管理员的必须。通过加强安全防护措施、定期更新软件和插件、加强用户认证措施、定期检查安全漏洞等措施,有效降低您的网站被螃蟹攻击的风险…

    行业资讯 2024年5月17日
    0
  • Windows 11下最佳网络摄像头软件推荐

    现在的网络互联网服务器行业发展迅速,随着Windows 11系统的推出,网络摄像头软件也变得越来越重要。但是,你知道为什么需要网络摄像头软件吗?或许你还没有意识到,Windows …

    行业资讯 2024年4月20日
    0
  • 商业网站设计

    商业网站设计,这个词对于很多人来说并不陌生。但是,你真的了解商业网站设计吗?它究竟是什么?为什么它如此重要?又有哪些关键要素?以及它的流程步骤是怎样的呢?或许你已经开始好奇,想要了…

    行业资讯 2024年3月25日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注