利用FastReport傳遞圖片參數(shù)在報表上展示簽名信息的實現(xiàn)方法
在一個項目中,客戶要求對報表中的簽名進行仿手寫的簽名處理,因此我們原先只是顯示相關人員的姓名的地方,需要采用手寫方式簽名,我們的報表是利用FastReport處理的,在利用楷體處理的時候,開發(fā)展示倒是正常效果,不過實際上在服務器運行的時候,出來的確實正規(guī)的宋體格式,相應的字體都已經安裝,不過還是沒有生效。因此采用變通的方式,在對應簽名的地方采用圖片的格式顯示,實際效果達到要求。本篇隨筆介紹這個過程,利用FastReport傳遞圖片參數(shù),在報表上展示簽名信息的處理。
在一個項目中,客戶要求對報表中的簽名進行仿手寫的簽名處理,因此我們原先只是顯示相關人員的姓名的地方,需要采用手寫方式簽名,我們的報表是利用FastReport處理的,在利用楷體處理的時候,開發(fā)展示倒是正常效果,不過實際上在服務器運行的時候,出來的確實正規(guī)的宋體格式,相應的字體都已經安裝,不過還是沒有生效。因此采用變通的方式,在對應簽名的地方采用圖片的格式顯示,實際效果達到要求。本篇隨筆介紹這個過程,利用FastReport傳遞圖片參數(shù),在報表上展示簽名信息的處理。
1、報表上的設計處理
例如我們要在報表落款的附近記錄相關人員的名字,因此采用簽名的顯示方式會比較合理。
因此設計相關的報表,本來想是采用文本的方式,變化字體的方式來快捷實現(xiàn)的
不過在報表是在服務器上生成圖片的方式,導致正常出來的圖片,卻沒有變化字體,導致出來的是正常的宋體格式。
因此考慮使用圖片的格式方式來處理。在其中放置Picture控件,如下所示。
調整好Picture控件的高度和寬度,讓它在設計的空白上合適的展示即可。
為了實現(xiàn)圖片格式的顯示,我們需要在報表的圖片控件的BeforePrint事件中解析數(shù)據(jù)(來自傳遞參數(shù)),數(shù)據(jù)格式為Base64字符串(從Byte數(shù)據(jù)轉換),如下代碼所示。
namespace FastReport { public class ReportScript { private void shopDoctorImg_BeforePrint(object sender, EventArgs e) { var img = GetImage("ShopDoctor"); if(img != null){ shopDoctorImg.Image=img; } } private void tiaopeiImg_BeforePrint(object sender, EventArgs e) { var img = GetImage("Tiaopei"); if(img != null){ tiaopeiImg.Image=img; } } private void CheckDoctorImg_BeforePrint(object sender, EventArgs e) { var img = GetImage("CheckDoctor"); if(img != null){ CheckDoctorImg.Image=img; } } private void CheckPharmacistImg_BeforePrint(object sender, EventArgs e) { var img = GetImage("CheckPharmacist"); if(img != null){ CheckPharmacistImg.Image=img; } } private Image GetImage(string signName) { Image img = null; string imgStr = (string)Report.GetParameterValue(signName); if(!string.IsNullOrEmpty(imgStr)) { byte[] imgData= Convert.FromBase64String(imgStr); using(MemoryStream ms = new MemoryStream(imgData)) { img = System.Drawing.Image.FromStream(ms); } } return img; } } }
其中主要注意的是,我們傳遞的圖片數(shù)據(jù)需要采用Base64String的格式才能正常傳遞和展示。
2、報表傳遞圖片數(shù)據(jù)
完成了報表的設計處理,我們剩下的就是在實際的報表中傳遞對應的參數(shù)數(shù)據(jù)了。
我們把簽名圖片,放在相對的目錄上,如下所示。
然后編寫一個公用的讀取圖片為Base64String的函數(shù)處理,如下所示。
//通過姓名獲取簽名圖片的Base64 private string GetSignImage(string signName) { var result = ""; string imagePath = Path.Combine(baseDir, $"Report/signs/{signName}.png"); if (File.Exists(imagePath)) { var stream = FileUtil.FileToStream(imagePath); var image = FileUtil.StreamToBytes(stream); if (image != null) { result = Convert.ToBase64String(image); } } return result; }
接著就是根據(jù)對應的報表進行加載,并設置相關的參數(shù)進行傳遞給報表即可,如下測試代碼所示。
//生成PDF報表文檔到具體文件 Report report = new Report(); report.Load(reportFile); //定義參數(shù)和數(shù)據(jù)格式 var dict = new Dictionary<string, object>(); #region 測試數(shù)據(jù)源 dict.Add("Name", "張三"); dict.Add("Gender", "男"); dict.Add("Age", 32); dict.Add("Telephone", "18620292076"); dict.Add("CreateTime", "2019-10-13 22:30:15"); dict.Add("CheckDoctor", GetSignImage("張醫(yī)生"));//"張醫(yī)生" dict.Add("CheckPharmacist", GetSignImage("張醫(yī)生")); //"李藥師" dict.Add("SendUser", "王小姐"); dict.Add("QrCode", "http://www.iqidi.com"); dict.Add("BarCode", "1234567890"); //圖片文件 dict.Add("ShopDoctor", GetSignImage("張醫(yī)生")); dict.Add("Tiaopei", GetSignImage("張醫(yī)生")); dict.Add("Fayao", GetSignImage("王小姐")); #endregion report.RegisterData(dt, "Detail"); foreach (string key in dict.Keys) { report.SetParameterValue(key, dict[key]); } //運行報表 report.Prepare();
由于我們的報表,最終是生成PDF或者圖片的方式,方便客戶進行在線查詢的,因此可以選擇PDF或者圖片的格式生成。
//運行報表 report.Prepare(); //導出PDF報表 //PDFExport export = new PDFExport(); //多個圖片導出 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; //Resolution= 300可以提高分辨率 report.Export(new ImageExport() { PageRange = PageRange.Current, CurPage = count, Resolution= 300 }, fileName); count++; }
最后生成的圖片格式如下所示,順利吧簽名的圖片貼在對應的單元格中即可。
到此這篇關于利用FastReport傳遞圖片參數(shù)在報表上展示簽名信息的文章就介紹到這了,更多相關FastReport傳遞圖片參數(shù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Asp.net Core MVC中怎么把二級域名綁定到特定的控制器上
這篇文章主要介紹了Asp.net Core MVC中怎么把二級域名綁定到特定的控制器上,需要的朋友可以參考下2017-06-06利用AJAX與數(shù)據(jù)島實現(xiàn)無刷新綁定
利用AJAX與數(shù)據(jù)島實現(xiàn)無刷新綁定...2007-03-03asp.net?Core中同名服務注冊的實現(xiàn)代碼
Asp.Net?Core中自帶了容器,同時也可以使用AutoFac替換掉默認的容器,以下為兩種方式同名服務的注冊實現(xiàn),對asp.net?Core服務注冊的實現(xiàn)代碼感興趣的朋友一起看看吧2022-03-03ASP.NET Core MVC 中實現(xiàn)中英文切換的示例代碼
這篇文章主要介紹了ASP.NET Core MVC 中實現(xiàn)中英文切換的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-02-02Asp.Net 通用數(shù)據(jù)操作類 (附通用數(shù)據(jù)基類)
以前經常用php的數(shù)據(jù)操作類,這次的asp.net數(shù)據(jù)操作類,是個方法2008-07-07