Home  >  Article  >  Java  >  Using Java SpringBoot to integrate POI to export Word documents

Using Java SpringBoot to integrate POI to export Word documents

WBOY
WBOYforward
2023-04-21 12:19:081264browse

Knowledge preparation

You need to understand the standards that Apache POI follows (Office Open XML (OOXML) standard and Microsoft's OLE 2 compound document format (OLE2)), which will correspond to the API's dependency packages .

What is POI

Apache POI is a free and open source cross-platform Java API written in Java. Apache POI provides an API for Java programs to read Microsoft Office format files. and write functions. POI is the abbreviation of "Poor Obfuscation Implementation", which means "concise version of fuzzy implementation".

Apache POI is a Java API that creates and maintains operations compliant with the Office Open XML (OOXML) standard and Microsoft's OLE 2 Composite Document Format (OLE2). Please refer to the official documentation for more information.

Using Java SpringBoot to integrate POI to export Word documents

Implementation Case

Here is a Word example of SpringBoot integrating POI to export user information.

Pom dependency

Introducing the dependency package of poi


org.apache.poi
poi
5.2.2


org.apache.poi
poi-ooxml
5.2.2

Exporting Word

Methods exported in UserController

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 {

@Autowired
private 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 Export Word method

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
@Service
public class UserServiceImpl implements IUserService {

@Override
public XWPFDocument generateWordXWPFDocument(){
XWPFDocument doc = new XWPFDocument();

// Title
createTitle(doc, "Java 全栈知识体系");

// Chapter 1
createChapterH1(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 2
createChapterH1(doc, "2. 实现案例");
createChapterH2(doc, "2.1 用户列表示例");
createParagraph(doc, "以导出用户列表为例");

// 表格
List 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 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 getUserList(){
List 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;
}
}

Export:

Using Java SpringBoot to integrate POI to export Word documents

##Exported word:

Using Java SpringBoot to integrate POI to export Word documents

The above is the detailed content of Using Java SpringBoot to integrate POI to export Word documents. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete