PDF 与 Excel

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

文档视图简介

HTML 页面并不总是用户查看模型输出的最佳方式,Infra 使得基于模型数据动态生成 PDF 文档或 Excel 电子表格变得简单。文档即视图,会以正确的内容类型从服务器流式返回,从而(希望) 让客户端 PC 使用其电子表格或 PDF 查看器应用进行响应。

要使用 Excel 视图,需要将 Apache POI 库加入类路径。 生成 PDF 时,需要加入(最好使用)OpenPDF 库。

你应尽量使用文档生成库的最新版本。特别是,我们强烈建议使用 OpenPDF(例如 OpenPDF 1.2.12) 而不是过时的 iText 2.1.7,因为 OpenPDF 仍在积极维护,并修复了处理不可信 PDF 内容的重要漏洞。

PDF 视图

一个用于单词列表的简单 PDF 视图可以继承 infra.web.view.document.AbstractPdfView 并实现 buildPdfDocument() 方法,如下例所示:

  • Java

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));
    }
  }
}

控制器可以通过外部视图定义(按名称引用)或在处理方法中直接返回 View 实例来返回该视图。

Excel 视图

infra.web.mock.view.document.AbstractXlsView 被作为 Excel 视图的基类提供。 它基于 Apache POI,并提供了专用子类(AbstractXlsxViewAbstractXlsxStreamingView) 来取代过时的 AbstractExcelView 类。

编程模型与 AbstractPdfView 类似,buildExcelDocument() 是核心模板方法, 控制器可通过外部定义(按名称)或在处理方法中直接返回 View 实例来返回该视图。