[实用][更新中]Java Apache POI 打印Word文档工具(含文本替换,动态表格功能)

这篇博客介绍了如何使用Apache POI库通过Java操作Word文档,包括文本替换、动态表格功能。作者提供了一个基于Apache POI封装的Word文档工具,支持占位符替换、表格动态增减等,强调了该工具相比其他解决方案的优势和特点,并给出了使用教程及GitHub地址。
摘要由CSDN通过智能技术生成

基于Apache POI对Word进行操作

你好!这是由一个刚毕业的学生,由于项目所需,需要通过Java后台的方式打印Word文档,因此在对大量能操作word的Java API中,选择了Apache POI。以下将简单分享一下这个在学习和开发这个基于POI的word文档打印工具时,一些心得:

  • Apache POI在操作word上非常费劲,在选型的过程中还遇到过很多,如Freemarker,freemarker本人没有研究,但是大概知道是基于word保存为xml后,然后用占位符替换的方式,对xml中整段整段的内容进行文本替换,最终输出word文档,就能得到word文档。
  • Freemarker的缺点(只是看别人总结的,自己没有求证)
    1.freemark在进行文本替换的时候,很难保持原有的样式
    2.在好不容易编辑好word模板后,转成xml的时候,还需要打开xml对里面的内容进行核对,听说会由于word文档一些字符串处理不好,倒是xml中 标签的缺失or错误,需要手动处理。如果word文档少还好,但是如果文档内容多,那就很麻烦(up主的项目所需打印的word文档就很多内容)
  • Apache POI能很好的保持原来的样式,在理解底层接口原理后,还是挺好操作的,但是对于使用者来说,你们就不需要理解底层原理,因为我已经高度封装好了。

接下来,我将会对Apache POI进行讲解。以及我这套工具的一些底层原理,目的是为了和各位大牛交流,以及有人有定制需求的话,可以基于我这个工具进行改写,来适应不同的项目。如果你不想学原理,则只需要跳过本段内容,到最后一小节,我会用最黑盒的方式,来快速教大家上手使用我这套工具

(由于本人技术有限,而且公文写作能力一般,因此有口误的地方请大家指出,并且欢迎大家提出更好的解决建议)
(本工具现在是V1.0版本,代码方面也还没进行过多优化,性能暂时还OK,但还有很大优化空间 )


一、基于Apache POI封装的word文档工具V1.0介绍

已实现的功能

  1. 文本替换
  2. 静态表格的文本替换
  3. 动态表格(行的变化)
  4. 动态表格(整个表格动态增减)
  5. 动态表格(整个表格动态增减,与上面不同的是,这个表格会附带表格标题以及跟随文本
  6. 图片插入

后期可能扩展的方向

  1. 富文本

本工具与网上其他POI打印工具类对比 特点

  1. 文本替换可以灵活的在word文档的任意位置,并且不会受到左右其他文字的影响(网上绝大部分,只是简单封装POI,实际上他们的文本替换需要占据一整行,这是极度不灵活的)
  2. 文本替换功能,在编辑模板的时候,可以设置它的样式。文本替换的时候,会根据你给定的样式替换文本。
  3. 表格内支持样式自定义,很多百度其他封装工具,都不支持样式自定义
  4. 动态表格比较灵活,支持一整块的扩展。
  5. 插入图片支持自定义大小

简单例子
(1)word模板

在这里插入图片描述
(2)通过apache poi打印后
在这里插入图片描述


二、Apache POI 知识

apache poi官方文档:http://poi.apache.org/

1. jar包(maven的,这个不多做解释了)

<properties>
   <java.poi.version>4.0.0</java.poi.version>
</properties>

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>${
   java.poi.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-schemas</artifactId>
    <version>${
   java.poi.version}</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>${
   java.poi.version}</version>
</dependency>

2. poi的类

  • XWPFDocument:一个word文档对应一个document
  • XWPFHeaderFooterPolicy:文档的页眉页脚(可以设置每一页的页眉页脚不同,也可以统一一个默认的页眉页脚作为全局,一般来说,后者用的比较多,因此我的工具里也是后者)
  • XWPFTable:一个表格对应一个XWPFTable对象
  • XWPFTableRow:一个表格的每一行对应一个XWPFTableRow
  • XWPFTableCell:table中的每一个单元格对应一个XWPFTableCell(Cell特别特殊,他的里面相当于一个XWPFDocument,也就是说,一个单元格里面,可以进行插入文字,图片,表格等操作,类似于document
  • XWPFParagraph:一段文本对应一个XWPFParagraph(注意,是一段文本,后面会解释合为一段文本)
  • XWPFRun:一处具有相同样式的文本(一个XWPFParagraph里面包含多个XWPFRun)

他们之间的关系结构如图所示(为了更方便大家的理解,用一个图表示)
结构如下
在这里插入图片描述
因此:

  • 一个Document包含多段Paragraph和多个Table。
  • 一个Paragra
  • 10
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值