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 类的专用子类(AbstractXlsxViewAbstractXlsxStreamingView)。

编程模型类似于 AbstractPdfView,其中 buildExcelDocument() 是核心模板方法,控制器可以从外部定义(按名称)或从 Handler 方法返回 View 实例来返回此类视图。