PDF and Excel

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()方法,如下例所示:

  1. public class PdfWordList extends AbstractPdfView {
  2. protected void buildPdfDocument(Map<String, Object> model, Document doc, PdfWriter writer,
  3. HttpServletRequest request, HttpServletResponse response) throws Exception {
  4. List<String> words = (List<String>) model.get("wordList");
  5. for (String word : words) {
  6. doc.add(new Paragraph(word));
  7. }
  8. }
  9. }

控制器可以从外部视图定义中返回这样的视图(通过名称引用),或者从处理方法中返回一个视图实例。

Excel 视图

从 Spring Framework 4.2 开始,org.springframework.web.servlet.view.document.AbstractXlsView 被作为 Excel 视图的基类提供。它基于 Apache POI,有专门的子类(AbstractXlsxView 和 AbstractXlsxStreamingView),取代了过时的 AbstractExcelView 类。

编程模型类似于 AbstractPdfView,buildExcelDocument() 是中心模板方法,控制器能够从外部定义(通过名称)返回这样的视图,或者从处理方法返回一个视图实例。