Spring 提供了返回 HTML 以外的输出的方法,包括 PDF 和 Excel 电子表格。本节介绍如何使用这些功能。
文档视图介绍
一个 HTML 页面并不总是用户查看模型输出的最佳方式,Spring 使得从模型数据动态生成一个 PDF 文档或 Excel 电子表格变得简单。该文档就是视图,并以正确的内容类型从服务器上流传出来,(希望)能让客户端 PC 运行他们的电子表格或 PDF 查看器应用程序作为回应。
为了使用 Excel 视图,你需要在你的 classpath 中添加 Apache POI 库。对于 PDF 生成,你需要添加(最好是)OpenPDF 库。
:::tips 如果可能的话,你应该使用最新版本的底层文档生成库。特别是,我们强烈推荐 OpenPDF(例如,OpenPDF 1.2.12),而不是过时的原始 iText 2.1.7,因为 OpenPDF 是积极维护的,并且修复了一个针对不可信任的 PDF 内容的重要漏洞。 :::
PDF 视图
一个简单的单词列表的 PDF 视图可以扩展 org.springframework.web.servlet.view.document.AbstractPdfView
并实现buildPdfDocument()
方法,如下例所示:
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));
}
}
}
控制器可以从外部视图定义中返回这样的视图(通过名称引用),或者从处理方法中返回一个视图实例。
Excel 视图
从 Spring Framework 4.2 开始,org.springframework.web.servlet.view.document.AbstractXlsView 被作为 Excel 视图的基类提供。它基于 Apache POI,有专门的子类(AbstractXlsxView 和 AbstractXlsxStreamingView),取代了过时的 AbstractExcelView 类。
编程模型类似于 AbstractPdfView,buildExcelDocument()
是中心模板方法,控制器能够从外部定义(通过名称)返回这样的视图,或者从处理方法返回一个视图实例。