溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java?SpringBoot集成文件之怎么使用POI導(dǎo)出Word文檔

發(fā)布時間:2022-08-01 14:20:58 來源:億速云 閱讀:189 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“Java SpringBoot集成文件之怎么使用POI導(dǎo)出Word文檔”,在日常操作中,相信很多人在Java SpringBoot集成文件之怎么使用POI導(dǎo)出Word文檔問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java SpringBoot集成文件之怎么使用POI導(dǎo)出Word文檔”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

知識準(zhǔn)備

需要理解Apache POI遵循的標(biāo)準(zhǔn)(Office Open XML(OOXML)標(biāo)準(zhǔn)和微軟的OLE 2復(fù)合文檔格式(OLE2)), 這將對應(yīng)著API的依賴包。

什么是POI

Apache POI 是用Java編寫的免費開源的跨平臺的 Java API,Apache POI提供API給Java程序?qū)icrosoft Office格式檔案讀和寫的功能。POI為“Poor Obfuscation Implementation”的首字母縮寫,意為“簡潔版的模糊實現(xiàn)”。

Apache POI 是創(chuàng)建和維護操作各種符合Office Open XML(OOXML)標(biāo)準(zhǔn)和微軟的OLE 2復(fù)合文檔格式(OLE2)的Java API。更多請參考 官方文檔。

Java?SpringBoot集成文件之怎么使用POI導(dǎo)出Word文檔

實現(xiàn)案例

這里展示SpringBoot集成POI導(dǎo)出用戶信息的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>

導(dǎo)出Word

UserController中導(dǎo)出的方法

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中導(dǎo)出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
@Service
public class UserServiceImpl implements IUserService {

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

// Title
createTitle(doc, "Java 全棧知識體系");

// Chapter 1
createChapterH1(doc, "1. 知識準(zhǔn)備");
createChapterH2(doc, "1.1 什么是POI");
createParagraph(doc, "Apache POI 是創(chuàng)建和維護操作各種符合Office Open XML(OOXML)標(biāo)準(zhǔn)和微軟的OLE 2復(fù)合文檔格式(OLE2)的Java API。用它可以使用Java讀取和創(chuàng)建,修改MS Excel文件.而且,還可以使用Java讀取和創(chuàng)建MS Word和MSPowerPoint文件。更多請參考[官方文檔](https://poi.apache.org/index.html)");
createChapterH2(doc, "1.2 POI中基礎(chǔ)概念");
createParagraph(doc, "生成xls和xlsx有什么區(qū)別?POI對Excel中的對象的封裝對應(yīng)關(guān)系?");

// Chapter 2
createChapterH1(doc, "2. 實現(xiàn)案例");
createChapterH2(doc, "2.1 用戶列表示例");
createParagraph(doc, "以導(dǎo)出用戶列表為例");

// 表格
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 圖片導(dǎo)出示例");
createParagraph(doc, "以導(dǎo)出圖片為例");
// 圖片
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;
}
}

導(dǎo)出:

Java?SpringBoot集成文件之怎么使用POI導(dǎo)出Word文檔

導(dǎo)出后的word:

Java?SpringBoot集成文件之怎么使用POI導(dǎo)出Word文檔

到此,關(guān)于“Java SpringBoot集成文件之怎么使用POI導(dǎo)出Word文檔”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI