內容分節
分節控制,一般應用於輸出文件類型的檔案,可因應封面頁、目錄等部分版面配置不同的需求。另一個常見用途是組合不同報表做客制化輸出。
依文件類型特性,分節處理模式自然不同。像是 EXCEL 預設會以獨立 SHEET 輸出各節內容;CSV 預設直接接續輸出所有內容。若有其它較特別的需求,也可以自行覆寫 xxxGenerator 中的相關實作處理。
基本範例 (PDF)
下例 PDFSection 用於輸出基本頁面,產出指定大小頁面配上單一文字。
- PDFSection.java
// PDFSection is a 'PDFGenerator'. public class PDFSection extends AbstractPDFGenerator { private String text; public PDFSection(final Rectangle pageSize, final String text) { super(pageSize); this.text = text; } @Override public void generatePDFContent(final PDFDocument pdfDocument) { pdfDocument.writeText(this.text, 28, DocumentAlign.CENTER); } }
我們可以建立多個 PDFSection 實例,並組裝起來,使其依 1、2、2-1、2-2、2-3、3、4、5 的順序輸出。
組裝方式有二:
- 第一層的項目可以直接用 AbstractPDFGenerator.of( PDFGenerator... ) 產出一個空的 ROOT PDF文件包含指定內容。
- 一般專案實作中,應該要自訂空白 ROOT 文件類別,以便處理專案所需的邏輯,如檔案置放原則等等...。
第二層以後的項目可用 AbstractPDFGenerator 所定義的 addSection() method 加入。
Sample_Sections.java
@Test public void test_PDF_Section() { // 第一層項目 final PDFSection s1 = new PDFSection(PageSize.A6.rotate(), "Chap 1"); final PDFSection s2 = new PDFSection(PageSize.A6.rotate(), "Chap 2"); final PDFSection s3 = new PDFSection(PageSize.A6.rotate(), "Chap 3"); final PDFSection s4 = new PDFSection(PageSize.A6.rotate(), "Chap 4"); final PDFSection s5 = new PDFSection(PageSize.A6.rotate(), "Chap 5"); final AbstractDocumentGenerator root = AbstractPDFGenerator.of(s1, s2, s3, s4, s5); // 第二層以後的項目 s2.addSection(new PDFSection(PageSize.A7, "Chap 2-1")); s2.addSection(new PDFSection(PageSize.A7, "Chap 2-2")); s2.addSection(new PDFSection(PageSize.A7, "Chap 2-3")); // CREATE PDF super.createPDF(root); }
執行結果如下,使用分節特性,可以做出各分節不同的頁面版型效果。
Excel 分節 (多SHEET)
接著拿實作 MultiFormatReportSupport 的 GSS0010 測試。在產出 EXCEL 時,各分節會以不同 SHEET 呈現。
- Sample_Sections.java
@Test public void test_Excel_Section() { final GSS0010 s1 = new GSS0010(); final GSS0010 s2 = new GSS0010("S1"); final GSS0010 s3 = new GSS0010("S2"); final DocumentGenerator root = AbstractSampleReport.of(s1, s2, s3); super.doDocument(root, DocumentFormat.EXCEL); super.doDocument(root, DocumentFormat.PDF); }