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,具有專門的子類別(AbstractXlsxView
和 AbstractXlsxStreamingView
),取代了過時的 AbstractExcelView
類別。
程式設計模型與 AbstractPdfView
相似,buildExcelDocument()
作為中心範本方法,控制器能夠從外部定義(依名稱)或作為處理器方法中的 View
實例回傳這樣的視圖。