轉帖|使用教程|編輯:何家巧|2023-02-21 10:22:53.370|閱讀 432 次
概述:在一個項目中,需要采用手寫方式簽名,我們的報表是利用FastReport處理的,本篇隨筆介紹這個過程,利用FastReport傳遞圖片參數,在報表上展示簽名信息的處理。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
FastReport .Net是一款全功能的Windows Forms、ASP.NET和MVC報表分析解決方案,使用FastReport .NET可以創建獨立于應用程序的.NET報表,同時FastReport .Net支持中文、英語等14種語言,可以讓你的產品保證真正的國際性。
在一個項目中,客戶要求對報表中的簽名進行仿手寫的簽名處理,因此我們原先只是顯示相關人員姓名的地方,需要采用手寫方式簽名,我們的報表是利用FastReport處理的,在利用楷體處理的時候,開發展示倒是正常效果,不過實際上在服務器運行的時候,出來的確實正規的宋體格式,相應的字體都已經安裝,不過還是沒有生效。因此采用變通的方式,在對應簽名的地方采用圖片的格式顯示,實際效果達到要求。本篇隨筆介紹這個過程,利用FastReport傳遞圖片參數,在報表上展示簽名信息的處理。
1、報表上的設計處理
不過在報表是在服務器上生成圖片的方式,導致正常出來的圖片,卻沒有變化字體,導致出來的是正常的宋體格式。
調整好Picture控件的高度和寬度,讓它在設計的空白上合適的展示即可。
為了實現圖片格式的顯示,我們需要在報表的圖片控件的BeforePrint事件中解析數據(來自傳遞參數),數據格式為Base64字符串(從Byte數據轉換),如下代碼所示。
//生成PDF報表文檔到具體文件
Report report = new Report();
report.Load(reportFile);
//定義參數和數據格式
var dict = new Dictionary<string, object>();
#region 測試數據源
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("張醫生"));//"張醫生"
dict.Add("CheckPharmacist", GetSignImage("張醫生")); //"李藥師"
dict.Add("SendUser", "王小姐");
dict.Add("QrCode", "http://www.iqidi.com");
dict.Add("BarCode", "1234567890");
//圖片文件
dict.Add("ShopDoctor", GetSignImage("張醫生"));
dict.Add("Tiaopei", GetSignImage("張醫生"));
dict.Add("Fayao", GetSignImage("王小姐"));
#endregion
report.RegisterData(dt, "Detail");
foreach (string key in dict.Keys)
{
report.SetParameterValue(key, dict[key]);
}
//運行報表
report.Prepare();
其中主要注意的是,我們傳遞的圖片數據需要采用Base64String的格式才能正常傳遞和展示。
//通過姓名獲取簽名圖片的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;
}
接著就是根據對應的報表進行加載,并設置相關的參數進行傳遞給報表即可,如下測試代碼所示。
//生成PDF報表文檔到具體文件
Report report = new Report();
report.Load(reportFile);
//定義參數和數據格式
var dict = new Dictionary<string, object>();
#region 測試數據源
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("張醫生"));//"張醫生"
dict.Add("CheckPharmacist", GetSignImage("張醫生")); //"李藥師"
dict.Add("SendUser", "王小姐");
dict.Add("QrCode", "http://www.iqidi.com");
dict.Add("BarCode", "1234567890");
//圖片文件
dict.Add("ShopDoctor", GetSignImage("張醫生"));
dict.Add("Tiaopei", GetSignImage("張醫生"));
dict.Add("Fayao", GetSignImage("王小姐"));
#endregion
report.RegisterData(dt, "Detail");
foreach (string key in dict.Keys)
{
report.SetParameterValue(key, dict[key]);
}
//運行報表
report.Prepare();
//運行報表
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 .Net了解,或者點擊咨詢。
FastReport技術QQ群:536197826 歡迎進群一起討論
轉載于: ,侵權請聯系刪除。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn