使用poi操作word文档实现套打功能
本文目的是为了分享一个实现套打功能,但是不同于简单的word的文本替换而是采用poi对word的文本框就行操作实现的功能:
- poi中各种jar的说明
- 套打的实现思路
- poi操作word文本框中的数据
- *代码实现
POI各个jar的说明以及本文使用jar包
这里引用一个表格,只要看一下这个表格就知道自己需要哪个jar包了,本文中需要引入的是如下几个jar包(maven项目导入方式)。
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.11</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.11</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>ooxml-schemas</artifactId>
<version>1.1</version>
</dependency>
<!-- word poi-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.9</version>
</dependency>
项目 | 价格 |
---|---|
Computer | $1600 |
Phone | $12 |
Pipe | $1 |
可以使用冒号来定义对齐方式:
Component | Application type | Maven artifactId | Notes |
---|---|---|---|
POIFS | OLE2 Filesystem | poi | Required to work with OLE2 / POIFS based files |
HPSF | OLE2 | Property Sets | poi |
HSSF | Excel XLS | poi | For HSSF only, if common SS is needed see below |
HSLF | PowerPoint | PPT | poi-scratchpad |
HWPF | Word DOC | poi-scratchpad | |
HDGF | Visio VSD | poi-scratchpad | |
HPBF | Publisher PUB | poi-scratchpad | |
HSMF | Outlook MSG | poi-scratchpad | |
OpenXML4J | OOXML | poi-ooxml | plus one of |
poi-ooxml-schemas | ooxml-schemas | Only one schemas jar is needed, see below for differences | |
XSSF | Excel XLSX | poi-ooxml | |
XSLF | PowerPoint PPTX | poi-ooxml | |
XWPF | Word DOCX | poi-ooxml | |
Common SS | Excel XLS and XLSX | poi-ooxml | WorkbookFactory and friends all require poi-ooxml, not just core poi |
套打实现思路
既然是套打,那么打印的文本一定有一个固定的格式,如果通过前端的html的css去控制,那么有个问题就是可能出现预留长度不够那么打印出来的排版就会出现问题,如果使用word文档的空格和tab去实现格式,然后用打印的文本去替换模板文件中的内容也同样会出现css一样的问题,那现在有一个方法就是将需要打印的内容放到word文档的文本框中,不管预留的长度是否足够,都不会出现整个布局乱套的问题,因为word文档中的文本框的布局是固定的。有可能有人会问,这么简单不就直接使用replaceText就可以替换了么?那就很可能是因为你小看了word的文本框。
这篇博客讲解了poi操作word,我认为讲的已经很详细了(但是没有对文本框的操作),再加上本文,那么你就掌握了poi对word操作的大部分技能。
POI操作word文本框
word文档其实也是一种特殊的xml文件,有其他的方法操作word文档的时候是先要将word转换成xml文档,然后在对xml文档进行操作。同样的,poi操作word文档内部实现其实也是讲word文档转换成了xml文档(只不过该步骤不需要我们手动去完成,poi帮助我们自动完成了)。既然要解析xml,所以本文中的代码就需要用到poi的解析xml的jar包了(ooxml-schemas)。既然poi是对xml文件操作