Word是最常见的文档编辑工具,当数据分析完成之后,将分析数据的图表在Word中展现,进行汇报或者存档是非常具有现实意义。在此背景之下,全新的Word导出,在豌豆BI 2.1.2 中与大家见面了。

本次豌豆BI的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文档。

总 结

豌豆BI看板导出Word功能,有两大特性,可以用两个词来总结,一个是“革新”,另一个是“友好”。

“革新”主要体现在:

1. 新技术,采用Apache POI最新生成Word技术;

2. 新格式,采用docx 新的Word文档格式;

3. 新结构,将导出内容放在文本框中解决Word中没有滚动条的问题;

4. 新算法,根据豌豆BI看板特性设计符合其特性的布局算法。

“友好”主要体现在:

1. 可编辑,最大范围的可编辑导出形式;

2. 表格附录,在一次性导出所有数据时,采用表格附录,符合一般文档编辑习惯;

3. 可配置,提供一个Word文档导出的数据量的配置,以适应不同的运行环境。

poi word插入图片_豌豆BI工具看板Word导出技术详解相关推荐

  1. poi向word插入图片_如何使用word裁剪图片图形?如何使用word修整图片?

    Word中使用图片与图形的教程: 将图片添加到文档 Word支持从Internet或本地计算机插入图像.如果您能够复制图像,则可以将其粘贴到文档中.您可以使用计算机上存储的自己的图像,也可以从Inte ...

  2. python 数据分组后看每组多少个_【Python】分组统计GroupBy技术详解

    摘要 进行数据分析时,GroupBy分组统计是非常常用的操作,也是十分重要的操作之一.基本上大部分的数据分析都会用到该操作,本文将对Python的GroupBy分组统计操作进行讲解. 1.GroupB ...

  3. python数据科学常国珍_《PYTHON数据科学:全栈技术详解》常国珍//赵仁乾//张秋剑著【摘要 书评 在线阅读】-苏宁易购图书...

    商品参数 作者: 常国珍//赵仁乾//张秋剑著 出版社:机械工业出版社 出版时间:2018-07-01 00:00:00 版次:1 印次:1 印刷时间:2018-07-01 字数:250 页数:422 ...

  4. 解决 Java poi 3.8 等版本 操作 word 插入 图片 不成功的问题

    解决 Java poi 3.8等版本操作word插入图片不成功的问题 问题: 最近有一个需求是将Excel中的数据转换到word中,其中包括了文字和图片, 在使用 poi 3.8 向word中写入图片 ...

  5. Java Poi word 插入图片并添加边框

    Java Poi word 插入图片并添加边框 //得到Picture的Base64编码 Base64Picture p1; //打开Word文件 Resource resource = new Cl ...

  6. VBA 向Word插入图片

    VBA 向Word插入图片 Private Sub Document_open()快捷键设置代码成功 "Fun1" End Sub Sub 快捷键设置代码成功(SubName As ...

  7. 使用poi-tl向word插入图片、文本、表格行循环

    使用poi-tl向word插入图片.文本.表格行循环 工作中难免会向word中操作数据,本文主要介绍poi-tl的使用,先来看效果图 核心介绍: 标签 1.插入文本标签 : {{var}} 2.插入图 ...

  8. word插入图片显示不全

    word插入图片,显示不全,只有部分. 调整步骤 图片尾部 光标定位到图片的尾部 单倍行距 右键,选择"段落",行间距选择"单倍行距" 图片就完成显示了

  9. wps office word 插入图片显示异常 只显示一个长条

    wps office word插入图片显示异常 只显示一个长条 如图: 原因: 可能是网络复制文字的时候含有了某些格式. 建议复制的文字, 复制到网页的地址框里, 再复制到word文档里,可以很好的消 ...

最新文章

  1. 使用openstack构建私有云计算平台
  2. memcache-session-manager(flexjson)
  3. openstack中的server
  4. USACO 3.2 Stringsobits
  5. Spring MVC 启动
  6. 多项式除法,多项式取模
  7. 如何将两部手机内容互换_两部iPhone手机之间如何大量互传照片?
  8. ie不加载jre_国内银行为兼容XP/IE6 竟然篡改IE安全协议把所有用户拖下水
  9. java中关于日期类Calendar的简单使用
  10. [BZOJ2006][NOI2010]超级钢琴
  11. API接口电商平台商品详情,网络爬虫数据(步骤示例,参数返回值说明)
  12. Mysql表和数据的复制操作
  13. Android后端工程师的要求,后端工程师的岗位职责和能力
  14. 计算机如何默认一种打字法,如何设置输入法,教您如何设置电脑的默认输入法...
  15. HDU 6411 带劲的and和【枚举贡献】
  16. Scrapy框架学习 - 爬取豆瓣电影排行榜TOP250所有电影信息并保存到MongoDB数据库中
  17. 关于在dll中申请内存,外部释放的问题
  18. Elemet-UI 中利用穿梭框对表格列进行动态设置
  19. jQuery DOM元素的遍历
  20. linux日志查看命令

热门文章

  1. 确定最小的正整数n,使得n!的结尾恰好有1987个0
  2. NJUST4316(立体几何投影的面积交)
  3. 快速沃尔什变换(FWT)
  4. PostgreSQL学习笔记7之函数和操作符三
  5. 《Windows核心编程》---Interlocked原子访问系列函数
  6. 科普|什么是负载均衡
  7. Redis在持久化时产生的延迟
  8. 为什么QueueingConsumer会被Deprecated?
  9. 分布式链路跟踪中的 traceid 和 spanid 代表什么?
  10. LiveVideoStackCon 2022 上海站 专题抢先看