魔法解密:豌豆BI看板Word导出技术详解

2190
0

辰哥 管理员

发表于2019-6-19 11:00

楼主
Word是最常见的文档编辑工具,当数据分析完成之后,将分析数据的图表在Word中展现,进行汇报或者存档是非常具有现实意义。

常见生成Word技术
目前生成Word文档方案所用的主流技术很多,也都各有特点,具体优缺点见下:

Apache POI

优点: 不仅在读写Excel功能强大、操作简单,随着近几年来对Word读写功能的不断提升,对Word的支持程度也大大增强。可跨平台使用。
缺点: 相对POI对Excel的支持程度,在对Word的支持程度还是欠佳。

Jacob

优点: 功能强大。
缺点: 代码量大,设置样式繁琐,需要windows平台支持,无法跨平台。

Java2word

优点: 功能强大,操作简单。
缺点: 能满足一般要求,不支持07格式,国人开发的,参考资料较多,需要windows平台支持。

iText

优点:功能全,能满足一般要求。
缺点:不能直接生成或操作doc文档,只能生成rtf格式的文档,rtf也可以用Word打开。

JSP

优点:操作简单,代码量少。
缺点:能把当前页面导出简单的Word,不能设置样式,美观性差,无法操作Word。

XML

优点:代码量少,样式、内容容易控制,打印不变形,完全符合office标准。
缺点:需要提前设计好Word模板,无法适用于多变的文档结构。

由以上内容不难看出Jacob、Java2word功能强大但是需要windows平台支持,无法做到跨平台。iText功能也比较强大但是生成的文档为rtf格式并不是Word的标准文档格式。JSP虽然操作简单但是样式变形严重,美观性差。XML代码量少,美观性好,完全符合office标准,但是需要提前设计好模板,无法适用于多变的文档结构。相较而言,Apache POI不仅功能全,可导出标准的doc或者docx文档格式,样式和内容都易控制,可适用于复杂的文档结构,不需要Windows平台支持,可跨平台使用。


豌豆BI Word导出技术
豌豆BI看板导出成Word采用的是功能强大且可跨平台使用的Apache POI技术,导出docx格式文档。
利用新版本Word的新特性和豌豆BI看板结构特征我们对导出内容结构进行了创新设计,同时结合Apache POI技术实现了代码结构和布局算法的突破。
1、组件导出内容结构设计

借助docx格式可以在文本框中插入表格和图片的特性,针对不同组件结构不同导出不同结构的一个或者多个文本框,将所有内容放入文本框中,最大限度的保持网页原来的展示效果,解决Word无滚动条导致有些含有滚动条的组件导出只能进行遮盖或者撑开这种破坏布局效果的解决办法。
如下图豌豆BI看板。


在保证了数据全部导出成Word的情况下,布局与页面上布局几乎完全一致。

2、布局算法设计
布局算法主要包括:页面大小和导出比例算法、自动分段算法、组件位置信息算法。


页面大小和导出比例算法


根据设计看板时分辨率、查看看板时浏览器显示的宽高,以及Word本身对纸张大小的限制等多个因数对导出Word页面纸张的大小进行综合计算,优化页面大小和导出比例,以达到最佳的展示效果。

自动分段算法


1.  采取一边遍历所有组件一边将遍历到的组件插入不同段落的方式进行分段,根据组件位置信息计算分析是否存在合适段落或者需要新建段落,新建段落插入到哪里,同时还需计算修改段落信息以及判断是否需对段落的合并处理。

2.  如果前面页面大小是宏观的把控Word导出看板的效果,那么对看板进行自动的段落划分就是细化整个布局的关键步骤,如果分段不正确,组件的位置信息就不可能正确,如果分段不合理,则整个看板导出可能也不会好看。

组件位置信息算法


组件的位置信息是做好布局的最后一步,和浏览器不同,在Word里面它是一个相对段落的位置信息,所以每当段落位置信息更新之后,内部所有组件的位置信息也随之变动需要重新计算。

3、内容友好设计

导出内容可编辑


除一些图片类型组件导出不可编辑外,所有文字表格类型的组件导出后都是可以进行任意的编辑的,如富文本组件、表格组件、摘要组件、预警组件等。

提供表格附录,一次导出所有数据


在数据量较大的情况下,看板会对表格组件进行分页处理,新版Word导出采用编辑文档的一般习惯,如果用户选择导出所有页后,会将其余数据以附录的形式添加到文档末尾。


导出后:


展现数据量可配置


我们对附录表格的最大数据行数进行了限制,同时支持配置,以更好的适应不同的运行环境,如上面43页的表格组件,共4200多行数据,在最大数据行数限制为1000行时,我们导出的全部内容为如下5个Word文档。


最近看过此主题的会员

灰龙

0个回答

只看楼主

登录后可回答问题,请登录注册

快速回复 返回顶部 返回列表

小时

全天响应

分钟

快速处理问题

工程师强势助力

明星产品
解决方案
联系合作

渠道咨询电话:137-0120-6790

技术支持QQ:400-0011-866(工作日9:00-18:00)

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

版权所有© 2006-2024 北京亿信华辰软件有限责任公司 京ICP备07017321号 京公网安备11010802016281号