PDF 和 Excel

Spring 提供了除 HTML 之外的输出方式,包括 PDF 和 Excel 电子表格。本节介绍如何使用这些功能。

自 Spring Framework 7.0 起,`org.springframework.web.servlet.view.document` 包中的视图类已被弃用。取而代之的是,库可以调整此现有代码以通过其自身的 `*View` 类型提供支持。作为替代方案,应用程序可以在 Web 处理器中执行直接渲染。

文档视图简介

HTML 页面并非总是用户查看模型输出的最佳方式,Spring 使从模型数据动态生成 PDF 文档或 Excel 电子表格变得简单。文档是视图,并以正确的 Content-Type 从服务器流式传输,以(希望)使客户端 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` 实例返回此类视图。

© . This site is unofficial and not affiliated with VMware.