首页 > 其他分享 >使用FastReport报表动态更新人员签名图片

使用FastReport报表动态更新人员签名图片

时间:2024-07-09 19:01:17浏览次数:16  
标签:string FastReport item 报表 签名 dr 图片

在一些报表模块中,需要我们根据用户操作的名称,来动态根据人员姓名,更新报表的签名图片,也就是电子手写签名效果,本篇随笔介绍一下使用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设计的报表,可以重用在多个终端上,非常方便。

 

标签:string,FastReport,item,报表,签名,dr,图片
From: https://www.cnblogs.com/wuhuacong/p/18291466

相关文章

  • 开源可视化报表,JimuReport 积木报表 v1.7.8 版本发布
    项目介绍一款免费的数据可视化报表工具,含报表和大屏设计,像搭建积木一样在线设计报表!功能涵盖,数据报表、打印设计、图表报表、大屏设计等!Web版报表设计器,类似于excel操作风格,通过拖拽完成报表设计。秉承"简单、易用、专业"的产品理念,极大的降低报表开发难度、缩短开发周......
  • 会计工作的关键一步——用免费可视化工具制作财务报表
    会计工作中,关键一步就是把那些繁杂的财务数据整理成清晰易懂的财务报表,这就像是把一堆拼图块变成一幅完整的图画。山海鲸可视化这款免费工具,支持实时数据刷新,能够随时随地更新你的财务数据,确保你拿到的永远是最新鲜的“出炉”数据。操作也非常简单,零代码拖拽式界面,哪怕你不懂编程,......
  • 探索前端报表:如何实现无预览打印解决方案或静默打印?
    最新技术资源(建议收藏)https://www.grapecity.com.cn/resources/在前端开发中,除了将数据呈现后,我们往往需要为用户提供,打印,导出等能力,导出是为了存档或是二次分析,而打印则因为很多单据需要打印出来作为主要的单据来进行下一环节的票据支撑,而前端打印可以说是非常令人头疼的一......
  • C# 如何验证PDF签名有效性
    数字签名作为PDF文档中的重要安全机制,不仅能够验证文件的来源,还能确保文件内容在传输过程中未被篡改。然而,如何正确验证PDF文件的数字签名,是确保文件完整性和可信度的关键。本文将详细介绍如何使用免费.NET控件通过C#验证PDF签名的有效性以及验证PDF文档是否被修改。C#验证PDF......
  • PHP转Go系列 | ThinkPHP与Gin框架之API接口签名设计实践
    大家好,我是码农先森。回想起以前用模版渲染数据的岁月,那时都没有API接口开发的概念。PHP服务端和前端HTML、CSS、JS代码混合式开发,也不分前端、后端程序员,大家都是全干工程师。随着前后端分离、移动端开发的兴起,用后端渲染数据的开发方式效率低下,已经不能满足业务对需求快速......
  • 逆向 | 检查系统强制签名检查是否开启
    逆向|检查系统强制签名检查是否开启存一份代码:#include<stdio.h>#include<Windows.h>#include<winternl.h>//#include<Ntstatus.h>#pragmacomment(lib,"ntdll.lib")intmain(){SYSTEM_CODEINTEGRITY_INFORMATIONinfo={0};info.Le......
  • 用友U8+存货核算——5.报表及常见问题
    ......
  • 用于数字签名与验签的dApp
    只有前端与链上合约两个组成部分的小dApp,其中前端使用ethers.js与Metamask钱包进行交互、以及提供hash和签名功能;链端是一个Solidity合约,提供验签功能。前端用ChatGPT辅助生成的代码app.html<html><head><metacharset="UTF-8"><metaname="viewport"content="wi......
  • 想要流程化办公,不妨了解拖拽式报表设计器!
    当前,经济发展越来越快,经济水平提升的同时也给职场人提成了更高的要求。很多领域的客户都希望能实现降本、提质、增效,进入流程化办公新时代,可以先来了解低代码技术平台、拖拽式报表设计器的更多功能和优势特点。看看拖拽式报表设计器是如何为客户降低成本、提高效率,携手进入产业分......
  • SAP ABAP编程日记二报表的开发
    简介:本人是一个刚入行的学生,暂时担任ABAP开发工作。因为我之前没有接触过ABAP编程,对此比较陌生,所以此博客用于自己的学习记录,也希望给观看此博客的人提供一些帮助。上次我们创建了ABAP第一个程序,这次我们有针对性对于报表的开发进行学习一、编写之间的准备在编写程序的时候,......