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))
}
}
}
控制器可以从外部视图定义(通过名称引用)或作为处理程序方法中的 View
实例返回此类视图。
Excel 视图
自 Spring Framework 4.2 起,org.springframework.web.servlet.view.document.AbstractXlsView
被提供为 Excel 视图的基类。它基于 Apache POI,具有专门的子类(AbstractXlsxView
和 AbstractXlsxStreamingView
),取代了过时的 AbstractExcelView
类。
编程模型类似于 AbstractPdfView
,其中 buildExcelDocument()
作为中心模板方法,并且控制器能够从外部定义(按名称)或作为处理程序方法中的 View
实例返回此类视图。