久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

利用FastReport傳遞圖片參數(shù)在報(bào)表上展示簽名信息的實(shí)現(xiàn)方法

瀏覽:65日期:2022-06-08 16:21:16
目錄
  • 1、報(bào)表上的設(shè)計(jì)處理
  • 2、報(bào)表傳遞圖片數(shù)據(jù)

在一個(gè)項(xiàng)目中,客戶要求對(duì)報(bào)表中的簽名進(jìn)行仿手寫的簽名處理,因此我們?cè)戎皇秋@示相關(guān)人員的姓名的地方,需要采用手寫方式簽名,我們的報(bào)表是利用FastReport處理的,在利用楷體處理的時(shí)候,開(kāi)發(fā)展示倒是正常效果,不過(guò)實(shí)際上在服務(wù)器運(yùn)行的時(shí)候,出來(lái)的確實(shí)正規(guī)的宋體格式,相應(yīng)的字體都已經(jīng)安裝,不過(guò)還是沒(méi)有生效。因此采用變通的方式,在對(duì)應(yīng)簽名的地方采用圖片的格式顯示,實(shí)際效果達(dá)到要求。本篇隨筆介紹這個(gè)過(guò)程,利用FastReport傳遞圖片參數(shù),在報(bào)表上展示簽名信息的處理。

在一個(gè)項(xiàng)目中,客戶要求對(duì)報(bào)表中的簽名進(jìn)行仿手寫的簽名處理,因此我們?cè)戎皇秋@示相關(guān)人員的姓名的地方,需要采用手寫方式簽名,我們的報(bào)表是利用FastReport處理的,在利用楷體處理的時(shí)候,開(kāi)發(fā)展示倒是正常效果,不過(guò)實(shí)際上在服務(wù)器運(yùn)行的時(shí)候,出來(lái)的確實(shí)正規(guī)的宋體格式,相應(yīng)的字體都已經(jīng)安裝,不過(guò)還是沒(méi)有生效。因此采用變通的方式,在對(duì)應(yīng)簽名的地方采用圖片的格式顯示,實(shí)際效果達(dá)到要求。本篇隨筆介紹這個(gè)過(guò)程,利用FastReport傳遞圖片參數(shù),在報(bào)表上展示簽名信息的處理。

1、報(bào)表上的設(shè)計(jì)處理

例如我們要在報(bào)表落款的附近記錄相關(guān)人員的名字,因此采用簽名的顯示方式會(huì)比較合理。

因此設(shè)計(jì)相關(guān)的報(bào)表,本來(lái)想是采用文本的方式,變化字體的方式來(lái)快捷實(shí)現(xiàn)的

不過(guò)在報(bào)表是在服務(wù)器上生成圖片的方式,導(dǎo)致正常出來(lái)的圖片,卻沒(méi)有變化字體,導(dǎo)致出來(lái)的是正常的宋體格式。

因此考慮使用圖片的格式方式來(lái)處理。在其中放置Picture控件,如下所示。

調(diào)整好Picture控件的高度和寬度,讓它在設(shè)計(jì)的空白上合適的展示即可。

為了實(shí)現(xiàn)圖片格式的顯示,我們需要在報(bào)表的圖片控件的BeforePrint事件中解析數(shù)據(jù)(來(lái)自傳遞參數(shù)),數(shù)據(jù)格式為Base64字符串(從Byte數(shù)據(jù)轉(zhuǎn)換),如下代碼所示。

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、報(bào)表傳遞圖片數(shù)據(jù)

完成了報(bào)表的設(shè)計(jì)處理,我們剩下的就是在實(shí)際的報(bào)表中傳遞對(duì)應(yīng)的參數(shù)數(shù)據(jù)了。

我們把簽名圖片,放在相對(duì)的目錄上,如下所示。

然后編寫一個(gè)公用的讀取圖片為Base64String的函數(shù)處理,如下所示。

//通過(guò)姓名獲取簽名圖片的Base64private 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();

由于我們的報(bào)表,最終是生成PDF或者圖片的方式,方便客戶進(jìn)行在線查詢的,因此可以選擇PDF或者圖片的格式生成。

//運(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)的單元格中即可。

到此這篇關(guān)于利用FastReport傳遞圖片參數(shù)在報(bào)表上展示簽名信息的文章就介紹到這了,更多相關(guān)FastReport傳遞圖片參數(shù)內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: ASP.NET
主站蜘蛛池模板: 欧美成人激情 | 国产在线观看一区二区 | 亚洲国产精品久久久 | 韩国三级午夜理伦三级三 | 日日骚 | 欧美精品成人一区二区三区四区 | 久久综合久久久 | 男人天堂亚洲 | 亚洲成人精品区 | 日韩视频在线观看视频 | 一区二区三区成人 | 日韩免费精品视频 | 国产一区二区视频在线播放 | 国产成人av一区二区 | 午夜小视频免费 | 亚洲精品久久久一区二区三区 | 亚洲第一性理论片 | 国产麻豆一区二区三区 | 最新国产福利在线 | 日韩成人在线播放 | 亚洲综合在线一区二区 | 神马香蕉久久 | 毛片链接 | 狠狠操夜夜操 | 久久成人精品视频 | 国产精品久久精品 | 中文字幕7777 | 国产一区视频网站 | 精品免费视频一区二区 | 男人天堂网av | 看片国产 | 亚洲精品在线视频 | 在线亚洲成人 | 久久夜夜| 日韩一区二区精品视频 | 免费中文字幕 | 在线观看免费国产 | 蜜桃精品久久久久久久免费影院 | 国产成人精品久久二区二区91 | 免费看男女www网站入口在线 | 在线激情网|