在一些报表模块中,需要我们根据用户操作的名称,来动态根据人员姓名,更新报表的签名图片,也就是电子手写签名效果,本篇随笔介绍一下使用FastReport报表动态更新人员签名图片。

1、设计FastReport报表,使用图片来代替签名效果

例如我们设计了以上的FastReport报表,其中签字盖章哪里,我们用来图片组件来承载相关医生的电子签名,电子签名的图片,根据数据库记录的图片地址,进行生成时刻的替换即可。

报表以PDF的方式生成,手机端利用PDF.js库可以查看PDF文件。

我们看到以上的签字图片,设计的时候用一张默认图片代替效果,我们切换报表的C#代码部分,来实现报表签名的动态更新。

各个部分的图片替换处理逻辑是一样的,都是首先根据传递的参数名称,来设置图片的路径即可。

2、动态根据数据库配置的图片地址,进行参数处理

FastReport报表呈现,可以赋值参数,以及数据源等,我们可以通过再数据库获取到图片信息后赋值给参数名称,以及数据记录作为数据源绑定到报表即可,如下是相关的处理代码。

//定义参数和数据格式
var dict = new Dictionary<string, object>();

然后封装一个根据医生名称,读取里面的数据库图片地址的函数,如下所示。

        /// <summary>
/// 获取医生的签名图片,如果没有,则返回空图片文件
/// </summary>
/// <param name="doctorName">医生姓名</param>
/// <returns></returns>
private string GetDoctorSign(string doctorName)
{
//转换为物理路径
string signImage = "/Report/EmptySign.png";
var signImagePath = Server.MapPath(signImage);
if(!string.IsNullOrEmpty(signImage))
{
var signInfo = BLLFactory<DoctorSign>.Instance.FindSingle($"DoctorName='{doctorName}'");
if(signInfo != null && !string.IsNullOrEmpty(signInfo.PicturePath))
{
signImagePath = signInfo.PicturePath;
}
}
return signImagePath;
}

接着就是把这些图片地址作为对应医生的参数赋值到字典集合。

    //相关医生签名图片
dict.Add("SignChufang", GetDoctorSign(info.ShopDoctor));
dict.Add("SignShenfang", GetDoctorSign(info.CheckPharmacistName));
dict.Add("SignTiaopei", GetDoctorSign(info.Tiaopei));
dict.Add("SignFuhe", GetDoctorSign(info.Fayao));

而处方单的记录,我们可以构建一个DataTable的数据集合,根据数据库记录写入DataTable赋值即可。

var dt = DataTableHelper.CreateTable("ProductName,Quantity|int,Unit,Specification,HowTo,Frequency,UseAmount");
foreach (var item in detailList)
{
var dr = dt.NewRow();
var displayName = item.ProductName;
if(!string.IsNullOrEmpty(item.Specification))
{
displayName += $"({item.Specification})";
}
dr["ProductName"] = displayName;
dr["Quantity"] = item.Quantity;
dr["Unit"] = item.Unit;
dr["Specification"] = item.Specification;
dr["HowTo"] = item.HowTo;
dr["Frequency"] = item.Frequency;
dr["UseAmount"] = item.UseAmount;
dt.Rows.Add(dr);
}

有了参数和数据源,赋值给报表对象进行处理即可,如下代码。

    //刷新数据源
report.RegisterData(dt, "Detail");
foreach (string key in dict.Keys)
{
report.SetParameterValue(key, dict[key]);
} //运行报表
report.Prepare();

最后使用PDFExport生成PDF文件,如下所示。

生成PDF文件,我们在服务端的API接口返回路径给pdf.js前端处理显示。

//导出PDF的相对文件路径
string exportPdfPath = string.Format("/GenerateFiles/Pres/NewReport_{0}.pdf", id); //转换为物理路径
string realPath = Server.MapPath(exportPdfPath); var export = new PDFExport();
report.Export(export, realPath);
report.Dispose();

最后报表的H5界面显示效果如下。

以上就是基于FastReport对报表处理的过程,FastReport还可以用在Winform、Vue的BS端,以及WPF应用程序上,我的博客里面都有相关的介绍,因此利用FastReport设计的报表,可以重用在多个终端上,非常方便。

使用FastReport报表动态更新人员签名图片的更多相关文章

  1. 基于Python实现matplotlib中动态更新图片(交互式绘图)

    最近在研究动态障碍物避障算法,在Python语言进行算法仿真时需要实时显示障碍物和运动物的当前位置和轨迹,利用Anaconda的Python打包集合,在Spyder中使用Python3.5语言和mat ...

  2. iOS 利用 Framework 进行动态更新

    http://nixwang.com/2015/11/09/ios-dynamic-update/ 前言 目前 iOS 上的动态更新方案主要有以下 4 种: HTML 5 lua(wax)hotpat ...

  3. 使用FastReport报表工具生成图片格式文档

    之前我在随笔<使用FastReport报表工具生成报表PDF文档>介绍过使用FastReport.Net来根据报表模板进行生成PDF,以及随笔<使用FastReport报表工具生成标 ...

  4. FastReport报表控件使用技巧总结

    FastReport报表控件使用技巧总结 1.FastReport中如何访问报表中的对象? 可以使用FindObject方法. TfrxMemoView(frxReport1.FindObject(' ...

  5. WPF柱状图(支持数据库动态更新)

    之前我们讲到wpf组件基类以及组件开发,现在我们围绕之前的内容去开发一个组件. 效果图请加群查看,在群共享里面. 做出这个呢  是比较繁琐的. 首先要使用我们的基类 继承基类的模板自动生成如下几个文件 ...

  6. FastReport报表MVC显示步骤

    FastReport报表MVC使用步骤如下: 1.创建MVC网站项目 最终DEMO如下图所示 2.引用相关DLL FastReport.dll FastReport.Web.dll 3.Web.con ...

  7. FastReport报表设计(仔细看)

    FastReport报表设计 2011-06-16 16:56:19|  分类: 系统开发|举报|字号 订阅     下载LOFTER我的照片书  |     目录 5.1 前言 5.2 基本概念及操 ...

  8. FastReport报表设计

    [转载]FastReport报表设计 (2012-10-24 20:37:26) 转载▼ 标签: 转载   原文地址:FastReport报表设计作者:小黑 FastReport报表设计 目录 5.1 ...

  9. Android零基础入门第67节:RecyclerView数据动态更新

    列表的数据往往会跟随业务逻辑不断刷新,所呈现出来的数据需要动态更新,那么RecyclerView是如何动态更新数据的呢? 之前在学习ListView的时候如果数据改变,需要调用notifyDataSe ...

  10. 使用FastReport报表工具生成报表PDF文档

    在我们开发某个系统的时候,客户总会提出一些特定的报表需求,固定的报表格式符合他们的业务处理需要,也贴合他们的工作场景,因此我们尽可能做出符合他们实际需要的报表,这样我们的系统会得到更好的认同感.本篇随 ...

随机推荐

  1. windows server2012 挂载linux的nfs共享目录

    1.安装NFS客户端 首先win-server上添加角色-----选择文件服务-----网络文件系统(或者NFS客户端)-安装 2.挂载nfs目录 先cmd检查服务端的共享目录 然后执行:showmo ...

  2. OpenVoiceV2本地部署教程,苹果MacOs部署流程,声音响度统一,文字转语音,TTS

    最近OpenVoice项目更新了V2版本,新的模型对于中文推理更加友好,音色也得到了一定的提升,本次分享一下如何在苹果的MacOs系统中本地部署OpenVoice的V2版本. 首先下载OpenVoic ...

  3. Windows远程连接工具有哪些

    Windows远程连接工具,一般称为远程桌面软件,更准确的叫远程访问软件或远程控制软件,可以让你从一台电脑远程控制另一台电脑.远程桌面软件允许您控制连接的计算机,就好像它就在您面前一样. 远程桌面工具 ...

  4. Splashtop :符合 HIPAA 标准的远程桌面软件

    如果您正在寻找可帮助您保持 HIPAA 遵从性的远程桌面软件,那么 Splashtop 就是您的最佳选择. 如果您的公司属于美国医疗保健行业,则您知道您必须遵守有关敏感和私人患者信息的联邦 HIPAA ...

  5. MQ消息积压,把我整吐血了

    前言 我之前在一家餐饮公司待过两年,每天中午和晚上用餐高峰期,系统的并发量不容小觑. 为了保险起见,公司规定各部门都要在吃饭的时间轮流值班,防止出现线上问题时能够及时处理. 我当时在后厨显示系统团队, ...

  6. 【winform】 WeifenLuo.WinFormsUI.Docking.dll 组件学习

    这个组件是用来 对窗体的布局用的,可搭建一个管理系统的ui框架. 使用例子:https://blog.csdn.net/zzzzzzzert/article/details/80791554

  7. Go 指针逃逸分析

    引用 https://my.oschina.net/renhc/blog/2222104

  8. navicat安装和破解

    navicat16.0 下载地址: https://download.navicat.com.cn/download/navicat160_premium_cs_x64.exe 破解教程&破解 ...

  9. WEB攻防-代码特性

    WEB攻防-代码特性 目录 WEB攻防-代码特性 ASP 如何判断网站搭建是否是asp ASP常见的搭配组合 ASP语言的漏洞点(从哪一方面入手) ASP-数据库-MDB下载 ASP-数据库-ASP后 ...

  10. cors解决跨域 服务器代理方式

    // cors 方法         // 后端程序员通过定义后端程序,让跨域访问,可以正常执行,可以获取响应体内容         // 前端程序员不需要做任何的调整         // 后端程序 ...