轉(zhuǎn)帖|使用教程|編輯:何家巧|2023-02-21 10:22:53.370|閱讀 445 次
概述:在一個(gè)項(xiàng)目中,需要采用手寫方式簽名,我們的報(bào)表是利用FastReport處理的,本篇隨筆介紹這個(gè)過程,利用FastReport傳遞圖片參數(shù),在報(bào)表上展示簽名信息的處理。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
FastReport .Net是一款全功能的Windows Forms、ASP.NET和MVC報(bào)表分析解決方案,使用FastReport .NET可以創(chuàng)建獨(dú)立于應(yīng)用程序的.NET報(bào)表,同時(shí)FastReport .Net支持中文、英語等14種語言,可以讓你的產(chǎn)品保證真正的國(guó)際性。
	
在一個(gè)項(xiàng)目中,客戶要求對(duì)報(bào)表中的簽名進(jìn)行仿手寫的簽名處理,因此我們?cè)戎皇秋@示相關(guān)人員姓名的地方,需要采用手寫方式簽名,我們的報(bào)表是利用FastReport處理的,在利用楷體處理的時(shí)候,開發(fā)展示倒是正常效果,不過實(shí)際上在服務(wù)器運(yùn)行的時(shí)候,出來的確實(shí)正規(guī)的宋體格式,相應(yīng)的字體都已經(jīng)安裝,不過還是沒有生效。因此采用變通的方式,在對(duì)應(yīng)簽名的地方采用圖片的格式顯示,實(shí)際效果達(dá)到要求。本篇隨筆介紹這個(gè)過程,利用FastReport傳遞圖片參數(shù),在報(bào)表上展示簽名信息的處理。
1、報(bào)表上的設(shè)計(jì)處理 
 
	
 
	
 
不過在報(bào)表是在服務(wù)器上生成圖片的方式,導(dǎo)致正常出來的圖片,卻沒有變化字體,導(dǎo)致出來的是正常的宋體格式。
 
 
	
 
調(diào)整好Picture控件的高度和寬度,讓它在設(shè)計(jì)的空白上合適的展示即可。
為了實(shí)現(xiàn)圖片格式的顯示,我們需要在報(bào)表的圖片控件的BeforePrint事件中解析數(shù)據(jù)(來自傳遞參數(shù)),數(shù)據(jù)格式為Base64字符串(從Byte數(shù)據(jù)轉(zhuǎn)換),如下代碼所示。
//生成PDF報(bào)表文檔到具體文件
    Report report = new Report();
    report.Load(reportFile);
    //定義參數(shù)和數(shù)據(jù)格式
    var dict = new Dictionary<string, object>();
    #region 測(cè)試數(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]);
    }
    //運(yùn)行報(bào)表
    report.Prepare();
其中主要注意的是,我們傳遞的圖片數(shù)據(jù)需要采用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;
}
 
	
接著就是根據(jù)對(duì)應(yīng)的報(bào)表進(jìn)行加載,并設(shè)置相關(guān)的參數(shù)進(jìn)行傳遞給報(bào)表即可,如下測(cè)試代碼所示。
 //生成PDF報(bào)表文檔到具體文件
    Report report = new Report();
    report.Load(reportFile);
    //定義參數(shù)和數(shù)據(jù)格式
    var dict = new Dictionary<string, object>();
    #region 測(cè)試數(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]);
    }
    //運(yùn)行報(bào)表
    report.Prepare();
	
	
//運(yùn)行報(bào)表
    report.Prepare();    
    //導(dǎo)出PDF報(bào)表
    //PDFExport export = new PDFExport();
    //多個(gè)圖片導(dǎo)出
    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++;
    }
最后生成的圖片格式如下所示,順利吧簽名的圖片貼在對(duì)應(yīng)的單元格中即可。
想獲取更多產(chǎn)品試用/授權(quán)/價(jià)格信息,請(qǐng)點(diǎn)擊FastReport .Net了解,或者點(diǎn)擊咨詢。
FastReport技術(shù)QQ群:536197826 歡迎進(jìn)群一起討論
	
轉(zhuǎn)載于: ,侵權(quán)請(qǐng)聯(lián)系刪除。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@ke049m.cn