之前我在隨筆《使用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的案例代碼,如下所示,

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/98016.html
標籤:C#
上一篇:C# copy folder and files from source path to target path
下一篇:C#深入淺出之運算子和控制流程
