如何通过用户应用程序代码在报表中设置图片
通常,需要根据任何条件或输入参数来设置报表中的各种图像。List & Label报表生成器的用户遇到了此问题:
有没有办法以编程方式从.net代码将内嵌图像插入List & Label文档中?
但是,用户找不到解决方案:
不幸的是,无法从.NET代码插入图像。仅当在List & Label设计器中使用报表时,才可能这样做。
接下来,我想展示如何在FastReport.Net报表生成器中实现这一点。
在创建报表时,我们直接使用其所有对象——创建它们,将它们添加到报表页面,设置属性。考虑一个简单的示例,该示例根据带有图片的用户应用程序的代码创建报表
//Create instance of class Report Report report = new Report(); //Add report page ReportPage page = new ReportPage(); report.Pages.Add(page); page.CreateUniqueName(); //App data band DataBand data = new DataBand(); //Add data band to page page.Bands.Add(data); data.CreateUniqueName(); data.Height = Units.Centimeters * 1; //Set band height //Create picture object PictureObject pic = new PictureObject(); pic.Bounds = new RectangleF(0, 0, Units.Centimeters * 5, Units.Centimeters * 5); //Set object bounds pic.Image = new Bitmap("../../App_Data/snow_flake.ico"); //Set picture pic.Parent = data; //Set picture parent object pic.CreateUniqueName(); report.Prepare(); //Build report report.Show(); //Show report
这是一个只有一个“data”band的报表的非常简单的示例。由于此报表完全由程序代码创建,因此使用图片创建对象并将其放入报表中没有问题。根据代码的逻辑,根据代码创建报表可以根据需要进行任意更改。
考虑另一种情况。假设您已经在设计器中创建了报表模板。您要根据程序的逻辑更改报表中的图片。在这种情况下,报表模板应该已经有一个Picture对象,您只需从用户应用程序代码中替换图片本身即可。这是程序中的代码:
//Create report object Report report = new Report(); //Load report template into the report obj report.Load("../../App_Data/Picture.frx"); //Get picture object from the report template PictureObject pic = report.FindObject("Picture1") as PictureObject; //Set object bounds pic.Bounds = new RectangleF(0, 0, Units.Centimeters * 5, Units.Centimeters * 5); //Set the image pic.Image = new Bitmap("../../App_Data/snow_flake.ico"); //Build report report.Prepare(); //Show report report.Show();
在这里,我们在报表模板中找到一个带有图片的对象,并根据需要更改其属性。
最后,Picture对象的第三个版本来自内置的报表脚本。报表脚本允许您根据需要更改报表中的模式和数据。您可以将Picture对象预先添加到模板中,也可以将其直接添加到报表脚本中。确实,无限的灵活性。无需使用自定义应用程序来管理报表的内容。对我来说,这是一个很大的好处,因为无需编辑应用程序代码。在报表脚本中设置图像的示例非常简单:
Picture1.Image = new Bitmap("C:/Users/Dimon/source/repos/PictureSetting/PictureSetting/App_Data/snow_flake.ico");
您只需要确定要更改图片的事件,例如,可以将Picture对象用于BeforePrint事件。