作者wangsz,想写一些关于word的工具,所以就写了这篇文章
1.首先,先导入所需要的依赖(poi相关依赖即可)
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.doc</artifactId>
<version>11.10.3</version>
</dependency>
<!-- POI -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.2</version>
</dependency>
<!-- poi-tl -->
<!-- https://mvnrepository.com/artifact/com.deepoove/poi-tl -->
<dependency>
<groupId>com.deepoove</groupId>
<artifactId>poi-tl</artifactId>
<version>1.8.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.21</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.28</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.20.0-GA</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.pdfbox/pdfbox -->
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.24</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
2.依赖导入完成后,先了解一些poi基础知识,制作word模板
{{template}}
普通文本,渲染数据为:String或者TextRenderData
{{@template}}
图片,渲染数据为:PictureRenderData
{{#template}}
表格,渲染数据为:TableRenderData
{{*template}}
列表,渲染数据为:NumbericRenderData
3.编写生成word文档代码
//将图片转换成字节数组
public static byte[] getUrlByteArray(String imageUrl) throws IOException {
URL url = new URL(imageUrl);
try (InputStream inputStream = url.openStream();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
return outputStream.toByteArray();
}
}
// 主要工具
public void testPicture(){
Map<String, Object> datas = new HashMap<String, Object>() {
{
//本地图片
// put("photo", new PictureRenderData(100, 116, 图片路径+"/111.jpg"));
put("name","王首zhen");
put("oname","暂无");
put("xb","男");
put("text","我现在很好!!!");
RowRenderData hearder = RowRenderData.build(new TextRenderData("00FF00","姓名"),new TextRenderData("00FF00","学历"),new TextRenderData("00FF00","备注"));
RowRenderData row0 = RowRenderData.build(" ", "研究生");
RowRenderData row2 = RowRenderData.build("小王","本科");
RowRenderData row1 = RowRenderData.build("小孙","研究生");
put("thinkTable",new MiniTableRenderData(hearder, Arrays.asList(row0,row1,row2)));
put("liebiao",new NumbericRenderData(new ArrayList<TextRenderData>(){{
add(new TextRenderData("FF00FF", "你好,世界"));
add(new TextRenderData("FF00FF", "Hello,world"));
add(new TextRenderData("FF00FF", "你好,好久不见"));
add(new TextRenderData("FF00FF", "Hello,It’s been so long"));
}}));
// //本地图片byte数据
// put("localBytePicture", new PictureRenderData(100, 120, ".png", BytePictureUtils.getLocalByteArray(new File("/logo.png"))));
// //网路图片
// put("urlPicture", new PictureRenderData(100, 100, ".png", BytePictureUtils.getUrlByteArray("https://avatars3.githubusercontent.com/u/1394854?v=3&s=40")));
// // java 图片
// put("bufferImagePicture", new PictureRenderData(100, 120, ".png", BytePictureUtils.getBufferByteArray(bufferImage)));
}
};
XWPFTemplate template = XWPFTemplate.compile("C:\\Users\\53129\\Desktop\\111.docx")
.render(datas);
FileOutputStream out;
try {
out = new FileOutputStream("C:\\Users\\53129\\Desktop\\out.docx");
template.write(out);
out.flush();
out.close();
template.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
4.测试代码
public static void main(String[] args) {
long l = System.currentTimeMillis();
new testPotPi().testPicture();
long l1 = System.currentTimeMillis();
System.err.println("运行时长"+(l1-l));
}
5.封装工具类
/*
tempath :模板文件地址
decPath : 生成文件地址
*/
public static void testPicture(Map<String, Object> datas , String temPath , String decPath){
XWPFTemplate template = XWPFTemplate.compile(temPath)
.render(datas);
FileOutputStream out;
try {
out = new FileOutputStream(decPath);
template.write(out);
out.flush();
out.close();
template.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}