Springboot导出文件
时间: 2025-05-20 19:46:38 浏览: 5
### Spring Boot 中实现文件导出的方法
在 Spring Boot 应用程序中,可以通过多种方式实现文件导出功能。以下是几种常见的文件导出方法及其对应的示例代码。
#### Excel 文件导出
通过使用 Apache POI 库,可以在 Spring Boot 中轻松实现列表数据到 Excel 文件的转换。以下是一个简单的示例:
```java
import org.apache.poi.ss.usermodel.*;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@Service
public class ExcelExportService {
public void exportToExcel(HttpServletResponse response, List<String> data) throws IOException {
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Data");
int rowNum = 0;
for (String item : data) {
Row row = sheet.createRow(rowNum++);
Cell cell = row.createCell(0);
cell.setCellValue(item);
}
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment; filename=data.xlsx");
workbook.write(response.getOutputStream());
workbook.close();
}
}
```
此代码片段展示了如何创建一个工作簿并将其写入 HTTP 响应流中[^1]。
---
#### Word 文件导出
对于 Word 文件导出,可以采用两种主要技术:Apache POI 和 FreeMarker 模板引擎。下面分别展示这两种方法的实现。
##### 使用 Apache POI 导出 Word 文件
以下是一个基于 Apache POI 的 Word 文件导出示例:
```java
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@Service
public class WordExportService {
public void exportToWord(HttpServletResponse response, List<String> contentList) throws IOException {
XWPFDocument document = new XWPFDocument();
for (String content : contentList) {
XWPFParagraph paragraph = document.createParagraph();
paragraph.setAlignment(ParagraphAlignment.LEFT);
paragraph.createRun().setText(content);
}
response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
response.setHeader("Content-Disposition", "attachment; filename=document.docx");
document.write(response.getOutputStream());
document.close();
}
}
```
这段代码演示了如何向文档中添加段落并将生成的 `.docx` 文件返回给客户端[^2]。
##### 使用 FreeMarker 模板引擎导出 Word 文件
FreeMarker 是一种强大的模板引擎,适合用于生成复杂结构的 Word 文档。以下是一个基本示例:
```java
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.Version;
import org.springframework.core.io.ClassPathResource;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
public class FreemakerWordExporter {
public static void exportWithFreemarker(HttpServletResponse response, Map<String, Object> model) throws Exception {
Configuration cfg = new Configuration(new Version("2.3.31"));
cfg.setClassForTemplateLoading(FreemakerWordExporter.class, "/templates/");
Template template = cfg.getTemplate("document.ftl", StandardCharsets.UTF_8.name());
response.setContentType("application/msword");
response.setHeader("Content-Disposition", "attachment;filename=generated_document.doc");
try (OutputStreamWriter writer = new OutputStreamWriter(response.getOutputStream(), StandardCharsets.UTF_8)) {
template.process(model, writer);
}
}
}
```
在此示例中,`document.ftl` 是 FreeMarker 模板文件的位置,而 `model` 包含要填充的数据[^3]。
---
#### PDF 文件导出
除了 Excel 和 Word 外,还可以使用 iText 或 JasperReports 来导出 PDF 文件。这里给出一个基于 iText 的简单例子:
```java
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@Service
public class PdfExportService {
public void exportPdf(HttpServletResponse response, String content) throws IOException {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
PdfWriter pdfWriter = new PdfWriter(byteArrayOutputStream);
PdfDocument pdfDoc = new PdfDocument(pdfWriter);
Document doc = new Document(pdfDoc);
doc.add(new Paragraph(content));
doc.close();
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=output.pdf");
response.getOutputStream().write(byteArrayOutputStream.toByteArray());
}
}
```
该代码实现了将字符串内容保存为 PDF 并发送至浏览器的功能。
---
### 总结
上述代码涵盖了三种常见类型的文件导出(Excel、Word 和 PDF),每种都提供了详细的实现逻辑和工具库支持。开发者可以根据实际需求选择合适的解决方案。
阅读全文
相关推荐
















