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,具有专门的子类(AbstractXlsxViewAbstractXlsxStreamingView),取代了过时的AbstractExcelView类。

编程模型类似于AbstractPdfView,其中buildExcelDocument()是中心模板方法,控制器可以从外部定义(按名称)返回这样的视图,或作为处理程序方法中的View实例返回。