对于最新稳定版本,请使用 Spring Framework 7.0.6spring-doc.cadn.net.cn

PDF 和 Excel

Spring 提供了返回非 HTML 格式输出的方式,包括 PDF 和 Excel 电子表格。 本节将介绍如何使用这些功能。spring-doc.cadn.net.cn

文档视图介绍

HTML 页面并不总是用户查看模型输出的最佳方式,而 Spring 使得从模型数据动态生成 PDF 文档或 Excel 电子表格变得非常简单。该文档即为视图,并以正确的 MIME 类型从服务器流式传输,(希望)能够使客户端计算机自动启动其电子表格或 PDF 查看器应用程序来响应。spring-doc.cadn.net.cn

为了使用 Excel 视图,您需要将 Apache POI 库添加到您的类路径中。 对于 PDF 生成,您需要(最好)添加 OpenPDF 库。spring-doc.cadn.net.cn

如果可能,请使用底层文档生成库的最新版本。特别是,我们强烈推荐使用 OpenPDF(例如 OpenPDF 1.2.12),而不是过时的原始 iText 2.1.7,因为 OpenPDF 目前仍在积极维护,并修复了针对不可信 PDF 内容的一个重要安全漏洞。

PDF 视图

一个用于单词列表的简单 PDF 视图可以继承 org.springframework.web.servlet.view.document.AbstractPdfView 并实现 buildPdfDocument() 方法,如下例所示:spring-doc.cadn.net.cn

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 实例的形式返回此类视图。spring-doc.cadn.net.cn

Excel 视图

自 Spring Framework 4.2 起, org.springframework.web.servlet.view.document.AbstractXlsView 被提供作为 Excel 视图的基类。 它基于 Apache POI,并提供了专门的子类(AbstractXlsxViewAbstractXlsxStreamingView),用以取代过时的 AbstractExcelView 类。spring-doc.cadn.net.cn

该编程模型类似于 AbstractPdfView,以 buildExcelDocument() 作为核心模板方法,控制器可以从外部定义(按名称)返回此类视图,或从处理方法中直接返回一个 View 实例。spring-doc.cadn.net.cn