PDF 和 Excel
Spring 提供了除 HTML 外返回其他输出的方式,包括 PDF 和 Excel 电子表格。本节介绍如何使用这些功能。
文档视图简介
HTML 页面并非总是用户查看模型输出的最佳方式,Spring 可以轻松地从模型数据动态生成 PDF 文档或 Excel 电子表格。文档是视图,并以正确的内容类型从服务器流式传输,以便客户端 PC(希望)能够响应性地运行其电子表格或 PDF 查看器应用程序。
要使用 Excel 视图,您需要将 Apache POI 库添加到类路径中。对于 PDF 生成,您需要添加(最好是)OpenPDF 库。
| 如果可能,您应该使用底层文档生成库的最新版本。特别是,我们强烈建议使用 OpenPDF(例如 OpenPDF 1.2.12)而不是过时的原始 iText 2.1.7,因为 OpenPDF 得到积极维护并修复了针对不受信任 PDF 内容的重要漏洞。 |
PDF 视图
一个简单的单词列表 PDF 视图可以继承 org.springframework.web.servlet.view.document.AbstractPdfView 并实现 buildPdfDocument() 方法,示例如下:
-
Java
-
Kotlin
public class PdfWordList extends AbstractPdfView {
protected void buildPdfDocument(Map<String, Object> model, Document doc, PdfWriter writer,
HttpServletRequest request, HttpServletResponse response) throws Exception {
List<String> words = (List<String>) model.get("wordList");
for (String word : words) {
doc.add(new Paragraph(word));
}
}
}
class PdfWordList : AbstractPdfView() {
override fun buildPdfDocument(model: Map<String, Any>, doc: Document, writer: PdfWriter,
request: HttpServletRequest, response: HttpServletResponse) {
val words = model["wordList"] as List<String>
for (word in words) {
doc.add(Paragraph(word))
}
}
}
控制器可以从外部视图定义(按名称引用)或从 Handler 方法返回 View 实例来返回此类视图。
Excel 视图
自 Spring Framework 4.2 起,提供了 org.springframework.web.servlet.view.document.AbstractXlsView 作为 Excel 视图的基类。它基于 Apache POI,带有取代过时的 AbstractExcelView 类的专用子类(AbstractXlsxView 和 AbstractXlsxStreamingView)。
编程模型类似于 AbstractPdfView,其中 buildExcelDocument() 是核心模板方法,控制器可以从外部定义(按名称)或从 Handler 方法返回 View 实例来返回此类视图。