1. 程式人生 > >報表開發匯出各種格式檔案的API

報表開發匯出各種格式檔案的API

         檔案輸出的多樣性,準確性和穩定性對於我們常用的報表軟體來說很重要。報表的輸入是指從報表的模板檔案(XML格式的)建立WorkBook物件,輸出則指將報表儲存為各種格式檔案,比如Pdf、Excel、Word這種常見的檔案格式,比如FineReport還支援cpt、Svg、Csv、Image(包含png、 jpg、gif、 bmp、wbmp)等多種檔案格式。

         因為常常會碰到報表的開發工作,這裡總結了幾種格式檔案匯出的API。

1、匯出成內建資料集模板

匯出成內建資料集模板,就是將原模板的資料來源根據引數條件查詢出結果並轉為內建資料集,然後把模板匯出,不需要對原模板進行計算(資料列擴充套件、公式計算等)。

// 將未執行模板工作薄匯出為內建資料集模板
			outputStream = new FileOutputStream(new File("E:\\EmbExport.cpt"));
			EmbeddedTableDataExporter templateExporter = new EmbeddedTableDataExporter();
			templateExporter.export(outputStream, workbook);

2、匯出模板檔案

我們可以將原模板通過程式編輯後再次匯出為模板檔案,或者將某一路徑下的模板儲存至另一路徑下。

// 將模板工作薄匯出模板檔案,在匯出前您可以編輯匯入的模板工作薄,可參考報表呼叫章節
			outputStream = new FileOutputStream(new File("E:\\TmpExport.cpt"));
			((WorkBook) workbook).export(outputStream);

3、匯出Excel檔案

模板工作薄WorkBook執行後為結果工作薄ResultWorkBook,我們可以把計算後的結果匯出成Excel檔案。

// 將結果工作薄匯出為Excel檔案
			outputStream = new FileOutputStream(new File("E:\\ExcelExport.xls"));
			ExcelExporter ExcelExport = new ExcelExporter();
			ExcelExport.export(outputStream, workbook.execute(parameterMap,new WriteActor()));

4、匯出Word檔案

// 將結果工作薄匯出為Word檔案
			outputStream = new FileOutputStream(new File("E:\\WordExport.doc"));
			WordExporter WordExport = new WordExporter();
			WordExport.export(outputStream, workbook.execute(parameterMap,new WriteActor()));

5、匯出Pdf檔案

// 將結果工作薄匯出為Pdf檔案
                            outputStream = new FileOutputStream(newFile("E:\\PdfExport.pdf"));
                            PDFExporter PdfExport = newPDFExporter();
                            PdfExport.export(outputStream,workbook.execute(parameterMap,new WriteActor()));

6、匯出Txt檔案

// 將結果工作薄匯出為Txt檔案(txt檔案本身不支援表格、圖表等,被匯出模板一般為明細表)
			outputStream = new FileOutputStream(new File("E:\\TxtExport.txt"));

7、匯出Csv檔案

// 將結果工作薄匯出為Csv檔案
			outputStream = new FileOutputStream(new File("E:\\CsvExport.csv"));
			CSVExporter CsvExport = new CSVExporter();
			CsvExport.export(outputStream, workbook.execute(parameterMap,new WriteActor()));

8、匯出Svg檔案

//將結果工作薄匯出為SVG檔案  
            outputStream = new FileOutputStream(new File("D:\\SvgExport.svg"));  
            SVGExporter SvgExport = new SVGExporter();  
            SvgExport.export(outputStream, workbook.execute(parameterMap,new WriteActor()));

9、匯出Image檔案

//將結果工作薄匯出為image檔案  
            outputStream = new FileOutputStream(new File("D:\\PngExport.png"));  
            ImageExporter ImageExport = new ImageExporter();  
            ImageExport.export(outputStream, workbook.execute(parameterMap,new WriteActor()));

10、釋放程序

通過匯出API在後臺匯出excel等檔案,會產生很多程序,通過下面的方案釋放程序。在匯出完成之後新增下面程式碼:

outputStream.close();
ModuleContext.stopModules();

例如,一個完整的可執行程式碼:

package com.fr.io;  
  
import java.io.File;  
import java.io.FileOutputStream;  
import com.fr.base.FRContext; 
import com.fr.general.ModuleContext;
import com.fr.base.Parameter;
import com.fr.dav.LocalEnv;
import com.fr.io.exporter.CSVExporter;
import com.fr.io.exporter.EmbeddedTableDataExporter;
import com.fr.io.exporter.Excel2007Exporter;
import com.fr.io.exporter.ExcelExporter;
import com.fr.io.exporter.PDFExporter;
import com.fr.io.exporter.TextExporter;
import com.fr.io.exporter.WordExporter;
import com.fr.io.exporter.SVGExporter;
import com.fr.io.exporter.ImageExporter;
import com.fr.main.impl.WorkBook;
import com.fr.main.workbook.ResultWorkBook;
import com.fr.report.module.EngineModule;
import com.fr.stable.WriteActor;

  
public class ExportApi {  
    public static void main(String[] args) {  
        // 定義報表執行環境,才能執行報表  
        String envpath = "D:\\FineReport_8.0\\WebReport\\WEB-INF";  
        FRContext.setCurrentEnv(new LocalEnv(envpath));  
        ModuleContext.startModule(EngineModule.class.getName()); 
        ResultWorkBook rworkbook = null;  
        try {  
            // 未執行模板工作薄  
            WorkBook workbook = (WorkBook) TemplateWorkBookIO  
                    .readTemplateWorkBook(FRContext.getCurrentEnv(),  
                            "\\doc\\Primary\\Parameter\\Parameter.cpt");  
            // 獲取報表引數並設定值,匯出內建資料集時資料集會根據引數值查詢出結果從而轉為內建資料集  
            Parameter[] parameters = workbook.getParameters();  
            parameters[0].setValue("華東");  
            // 定義parametermap用於執行報表,將執行後的結果工作薄儲存為rworkBook  
            java.util.Map parameterMap = new java.util.HashMap();  
            for (int i = 0; i < parameters.length; i++) {  
                parameterMap.put(parameters[i].getName(), parameters[i]  
                        .getValue());  
            }  
            // 定義輸出流  
            FileOutputStream outputStream;  
            // 將未執行模板工作薄匯出為內建資料集模板  
            outputStream = new FileOutputStream(new File("D:\\EmbExport.cpt"));  
            EmbeddedTableDataExporter templateExporter = new EmbeddedTableDataExporter();  
            templateExporter.export(outputStream, workbook);  
            // 將模板工作薄匯出模板檔案,在匯出前您可以編輯匯入的模板工作薄,可參考報表呼叫章節  
            outputStream = new FileOutputStream(new File("D:\\TmpExport.cpt"));  
            ((WorkBook) workbook).export(outputStream);
            // 將結果工作薄匯出為2003Excel檔案  
            outputStream = new FileOutputStream(new File("D:\\ExcelExport.xls"));  
            ExcelExporter ExcelExport = new ExcelExporter();  
            ExcelExport.export(outputStream, workbook.execute(parameterMap,new WriteActor()));   
            // 將結果工作薄匯出為Word檔案  
            outputStream = new FileOutputStream(new File("D:\\WordExport.doc"));  
            WordExporter WordExport = new WordExporter();  
            WordExport.export(outputStream, workbook.execute(parameterMap,new WriteActor()));  
            // 將結果工作薄匯出為Pdf檔案  
            outputStream = new FileOutputStream(new File("D:\\PdfExport.pdf"));  
            PDFExporter PdfExport = new PDFExporter();  
            PdfExport.export(outputStream, workbook.execute(parameterMap,new WriteActor()));  
            // 將結果工作薄匯出為Txt檔案(txt檔案本身不支援表格、圖表等,被匯出模板一般為明細表)  
            outputStream = new FileOutputStream(new File("D:\\TxtExport.txt"));  
            TextExporter TxtExport = new TextExporter();  
            TxtExport.export(outputStream, workbook.execute(parameterMap,new WriteActor()));  
            // 將結果工作薄匯出為Csv檔案  
            outputStream = new FileOutputStream(new File("D:\\CsvExport.csv"));  
            CSVExporter CsvExport = new CSVExporter();  
            CsvExport.export(outputStream, workbook.execute(parameterMap,new WriteActor()));            
            //將結果工作薄匯出為SVG檔案  
            outputStream = new FileOutputStream(new File("D:\\SvgExport.svg"));  
            SVGExporter SvgExport = new SVGExporter();  
            SvgExport.export(outputStream, workbook.execute(parameterMap,new WriteActor()));           
            //將結果工作薄匯出為image檔案  
            outputStream = new FileOutputStream(new File("D:\\PngExport.png"));  
            ImageExporter ImageExport = new ImageExporter();  
            ImageExport.export(outputStream, workbook.execute(parameterMap,new WriteActor()));                      
            outputStream.close();  
            ModuleContext.stopModules();
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}

編譯執行該程式碼後,就會在E盤下生成不同格式的檔案,這樣就匯出成功了。