使用FastReport報表工具生成圖片格式文檔


之前我在隨筆《使用FastReport報表工具生成報表PDF文檔》介紹過使用FastReport.Net來根據報表模板進行生成PDF,以及隨筆《使用FastReport報表工具生成標簽打印文檔》介紹過生成標簽文檔的處理,基本上都是基於模板進行生成PDF的做法,由於PDF在手機端顯示總是覺得不那么方便,不管使用pdfjs或者直接打開PDF,都不太令客戶滿意,客戶希望直接展示圖片的方式顯示。本篇隨筆介紹如何使用FastReport.Net來直接生成報表格式的圖片文件。

1、報表模板及數據綁定處理

FastReport.Net是一款適用於Windows Forms, ASP.NET和MVC框架的功能齊全的報表分析解決方案。之前使用直接生成PDF的方式構建報表文檔,如下效果所示。

在FastReport設計報表模式里面,我們可以對報表進行設置,以便於在實際運行環境的情況下生成上面的報表文檔。在FastReport設計器里面的效果如下所示。

這個報表包含了主表信息,和明細表的信息,我們主表動態信息,可以通過參數的綁定方式綁定,明細表則通過綁定DataTable的方式動態處理即可。

采用參數綁定,我們需要在報表設計器里面定義好我們需要的參數,如下所示。

 我們一般預先定義好相關的參數,然后綁定在模板里面,並設置好內容的對其格式即可。

如報表頁面里面,我們放置了一個表格,定義好表格的行列和寬度后,雙擊表格單元格,就可以設置表格單元格的文本內容為對應的參數了,如下界面所示。

 

 對於動態展示的明細列表部分,我們需要定義一個數據源的方式,從而可以讓報表模板綁定對應的字段名稱。

 我根據數據表的信息,生成一個用於綁定明細列表的數據源,如下所示。

 這樣我們在代碼綁定的時候,只需要指定Detail的名稱和對應的字段名稱即可,有了這些定義,我們可以在報表設計中使用字段綁定了。

對於運行時刻報表數據的綁定,主要使用對應的對象的注冊數據和設置參數處理函數即可實現。

//刷新數據源
report.RegisterData(dt, "Detail");
foreach (string key in dict.Keys)
{
    report.SetParameterValue(key, dict[key]);
}

//運行報表
report.Prepare();

//導出PDF報表
PDFExport export = new PDFExport();
report.Export(export, realPath);
report.Dispose();

 

2、實現報表生成圖片文檔

圖片生成的處理,和PDF格式的處理大同小異,主要就是先處理數據的綁定和准備,后續在根據對應的文件后綴名進行相應的圖片生成,PDF生成使用PDFExport,圖片生成采用的是ImageExport類處理。

如果是基於Web開發的,我們在控制器上處理對應的報表輸出文件名稱和路徑,如下所示。

//導出PDF的文件路徑
string exportPdfPath = string.Format("/GenerateFiles/Pres/Report_{0}.jpg", id);
//轉換為物理路徑
string realPath = Server.MapPath(exportPdfPath);

加載報表模板並初始化,這個不管PDF或者換圖片格式,處理一樣。

//以報表模板,初始化報表對象
Report report = new Report();
report.Load(reportPath);

BS下生成並輸出圖片文件如下所示

//刷新數據源
report.RegisterData(dt, "Detail");
foreach (string key in dict.Keys)
{
    report.SetParameterValue(key, dict[key]);
}

//運行報表
report.Prepare();

//導出PDF報表
//PDFExport export = new PDFExport();

//導出JPG報表
ImageExport export = new ImageExport();
//export.JpegQuality = 392;
//export.ResolutionY = 226;

report.Export(export, realPath);
report.Dispose();

result = Content(exportPdfPath);//返回Web相對路徑

我們看到,圖片生成的操作和PDF的處理差不多。

最后生成圖片的界面效果如下所示。

如果報表的頁數超過一頁,我們可以通過參數來生成不同的圖片,如下所示。

new ImageExport() { PageRange = PageRange.Current, CurPage = count }

我們來看看另外一個處理代碼,如下所示。

//多個圖片導出
int count = 1;
string firstFileName = exportImgPath.Replace(".png", "");
foreach (PageBase item in report.Pages)
{
    string fileName = string.Format("{0}_{1}.png", firstFileName,  count);
    exportImgPath = fileName;
    report.Export(new ImageExport() { PageRange = PageRange.Current, CurPage = count }, fileName);
    count++;
}

和之前的不同,這個圖片格式指定為PNG,另外可以支持多個頁面的圖片生成。

針對FastReport報表的特性,我在綜合案例里面編寫了一個專門用來處理FastREport的案例代碼,如下所示。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM