您好,欢迎访问一九零五行业门户网

使用Java SpringBoot集成POI实现Word文档导出

知识准备需要理解apache poi遵循的标准(office open xml(ooxml)标准和微软的ole 2复合文档格式(ole2)), 这将对应着api的依赖包。
什么是poiapache poi 是用java编写的免费开源的跨平台的 java api,apache poi提供api给java程序对microsoft office格式档案读和写的功能。poi为“poor obfuscation implementation”的首字母缩写,意为“简洁版的模糊实现”。
apache poi 是创建和维护操作各种符合office open xml(ooxml)标准和微软的ole 2复合文档格式(ole2)的java api。更多请参考 官方文档。
实现案例这里展示springboot集成poi导出用户信息的word例子。
pom依赖引入poi的依赖包
<dependency><groupid>org.apache.poi</groupid><artifactid>poi</artifactid><version>5.2.2</version></dependency><dependency><groupid>org.apache.poi</groupid><artifactid>poi-ooxml</artifactid><version>5.2.2</version></dependency>
导出wordusercontroller中导出的方法
package tech.pdai.springboot.file.word.poi.controller;import java.io.outputstream;import javax.servlet.http.httpservletresponse;import io.swagger.annotations.apioperation;import org.apache.poi.xwpf.usermodel.xwpfdocument;import org.springframework.beans.factory.annotation.autowired;import org.springframework.web.bind.annotation.getmapping;import org.springframework.web.bind.annotation.requestmapping;import org.springframework.web.bind.annotation.restcontroller;import tech.pdai.springboot.file.word.poi.service.iuserservice;/*** @author pdai*/@restcontroller@requestmapping("/user")public class usercontroller {@autowiredprivate iuserservice userservice;@apioperation("download word")@getmapping("/word/download")public void download(httpservletresponse response){try {xwpfdocument document = userservice.generatewordxwpfdocument();response.reset();response.setcontenttype("application/vnd.ms-excel");response.setheader("content-disposition","attachment;filename=user_world_" + system.currenttimemillis() + ".docx");outputstream os = response.getoutputstream();document.write(os);os.close();} catch (exception e) {e.printstacktrace();}}}
userserviceimple中导出word方法
package tech.pdai.springboot.file.word.poi.service.impl;import java.io.fileinputstream;import java.io.filenotfoundexception;import java.io.ioexception;import java.io.inputstream;import java.math.biginteger;import java.util.arraylist;import java.util.list;import lombok.extern.slf4j.slf4j;import org.apache.poi.openxml4j.exceptions.invalidformatexception;import org.apache.poi.util.units;import org.apache.poi.xwpf.usermodel.breaktype;import org.apache.poi.xwpf.usermodel.document;import org.apache.poi.xwpf.usermodel.paragraphalignment;import org.apache.poi.xwpf.usermodel.xwpfdocument;import org.apache.poi.xwpf.usermodel.xwpfparagraph;import org.apache.poi.xwpf.usermodel.xwpfrun;import org.apache.poi.xwpf.usermodel.xwpftable;import org.apache.poi.xwpf.usermodel.xwpftablecell;import org.openxmlformats.schemas.wordprocessingml.x2006.main.cttblpr;import org.openxmlformats.schemas.wordprocessingml.x2006.main.cttblwidth;import org.springframework.core.io.classpathresource;import org.springframework.core.io.resource;import org.springframework.stereotype.service;import tech.pdai.springboot.file.word.poi.entity.user;import tech.pdai.springboot.file.word.poi.service.iuserservice;/*** @author pdai*/@slf4j@servicepublic class userserviceimpl implements iuserservice {@overridepublic xwpfdocument generatewordxwpfdocument(){xwpfdocument doc = new xwpfdocument();// titlecreatetitle(doc, "java 全栈知识体系");// chapter 1createchapterh1(doc, "1. 知识准备");createchapterh2(doc, "1.1 什么是poi");createparagraph(doc, "apache poi 是创建和维护操作各种符合office open xml(ooxml)标准和微软的ole 2复合文档格式(ole2)的java api。用它可以使用java读取和创建,修改ms excel文件.而且,还可以使用java读取和创建ms word和mspowerpoint文件。更多请参考[官方文档](https://poi.apache.org/index.html)");createchapterh2(doc, "1.2 poi中基础概念");createparagraph(doc, "生成xls和xlsx有什么区别?poi对excel中的对象的封装对应关系?");// chapter 2createchapterh1(doc, "2. 实现案例");createchapterh2(doc, "2.1 用户列表示例");createparagraph(doc, "以导出用户列表为例");// 表格list<user> userlist = getuserlist();xwpfparagraph paragraph = doc.createparagraph();xwpftable table = paragraph.getdocument().createtable(userlist.size(), 5);table.setwidth(500);table.setcellmargins(20, 20, 20, 20);//表格属性cttblpr tablepr = table.getcttbl().addnewtblpr();//表格宽度cttblwidth width = tablepr.addnewtblw();width.setw(biginteger.valueof(8000));for(int i = 0; i< userlist.size(); i++) {list<xwpftablecell> tablecells = table.getrow(i).gettablecells();tablecells.get(0).settext(userlist.get(i).getid()+"");tablecells.get(1).settext(userlist.get(i).getusername());tablecells.get(2).settext(userlist.get(i).getemail());tablecells.get(3).settext(userlist.get(i).getphonenumber()+"");tablecells.get(4).settext(userlist.get(i).getdescription());}createchapterh2(doc, "2.2 图片导出示例");createparagraph(doc, "以导出图片为例");// 图片inputstream stream = null;try {xwpfparagraph paragraph3 = doc.createparagraph();resource resource = new classpathresource("pdai-guli.png");stream = new fileinputstream(resource.getfile());xwpfrun run = paragraph3.createrun();run.addpicture(stream, document.picture_type_png, "generated", units.toemu(256), units.toemu(256));} catch (ioexception | invalidformatexception e) {e.printstacktrace();}return doc;}private void createtitle(xwpfdocument doc, string content){xwpfparagraph title = doc.createparagraph();title.setalignment(paragraphalignment.center);xwpfrun r1 = title.createrun();r1.setbold(true);r1.setfontfamily("宋体");r1.settext(content);r1.setfontsize(22);}private void createchapterh1(xwpfdocument doc, string content){xwpfparagraph acttheme = doc.createparagraph();acttheme.setalignment(paragraphalignment.left);xwpfrun runtext1 = acttheme.createrun();runtext1.setbold(true);runtext1.settext(content);runtext1.setfontsize(18);}private void createchapterh2(xwpfdocument doc, string content){xwpfparagraph acttype = doc.createparagraph();xwpfrun runtext2 = acttype.createrun();runtext2.setbold(true);runtext2.settext(content);runtext2.setfontsize(15);}private void createparagraph(xwpfdocument doc, string content){xwpfparagraph acttype = doc.createparagraph();xwpfrun runtext2 = acttype.createrun();runtext2.settext(content);runtext2.setfontsize(11);}private list<user> getuserlist(){list<user> userlist = new arraylist<>();for (int i = 0; i < 5; i++) {userlist.add(user.builder().id(long.parselong(i + "")).username("pdai" + i).email("pdai@pdai.tech" + i).phonenumber(121231231231l).description("hello world" + i).build());}return userlist;}}
导出:
导出后的word:
以上就是使用java springboot集成poi实现word文档导出的详细内容。
其它类似信息

推荐信息