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
实例。