提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|使用教程|编辑:郑恭琳|2019-10-17 15:07:28.370|阅读 305 次
概述:在本文的第1部分中,我们创建了一个ASP.Net Core应用程序,该应用程序中实现了以下方法:显示报表、显示报表设计器以及将设计器中更改的报表保存到服务器。但是,这些只是我们所说的两个功能。我们需要实现以pdf或html格式导出所需报表的方法,然后下载此报表。为了让用户知道哪些报表可供下载,我们将实现一种获取报表列表的方法。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
在本文的第1部分中,我们创建了一个ASP.Net Core应用程序,该应用程序中实现了以下方法:显示报表、显示报表设计器以及将设计器中更改的报表保存到服务器。但是,这些只是我们所说的两个功能。我们需要实现以pdf或html格式导出所需报表的方法,然后下载此报表。为了让用户知道哪些报表可供下载,我们将实现一种获取报表列表的方法。
将报表列表的数据结构添加到数据的模型(“Model”文件夹):
public class Reports { // Report ID public int Id { get; set; } // Report File Name public string ReportName { get; set; } }
现在,我们可以在控制器中创建带有标识符的报表列表:
// Fill in the list of reports Reports[] reportItems = new Reports[] { new Reports { Id = 1, ReportName = "Master-Detail.frx" }, new Reports { Id = 2, ReportName = "Matrix.frx" } };
如上所述,我们需要客户端应用程序中的报表列表。这对于显示报表,在设计器中编辑报表以及下载pdf或html格式的报表很有用。
// Get a list of reports in json format [HttpGet] public IEnumerable Get() { return reportItems; // Gets a list of reports }
这里的一切都很简单——json格式的报表列表。现在,我们正在实现一种相当复杂的获取报表导出的方法:
// Get the report file in pdf / html // Attribute has a required id parameter [HttpGet("{id}")] public IActionResult Get(int id, [FromQuery] ReportQuery query) { string mime = "application/" + query.Format; // MIME header with default value // Find the report Reports reportItem = reportItems.FirstOrDefault((p) => p.Id == id); // Get the value of the collection by identifier if (reportItem != null) { string reportPath = (webRoot + "/App_Data/" + reportItem.ReportName); // Determine the path to the report string dataPath = (webRoot + "/App_Data/nwind.xml");// Determine the path to the database using (MemoryStream stream = new MemoryStream()) // Create a stream for the report { try { using (DataSet dataSet = new DataSet()) { // Fill the source with data dataSet.ReadXml(dataPath); // Turn on FastReport web mode Config.WebMode = true; using (Report report = new Report()) { report.Load(reportPath); // Download report report.RegisterData(dataSet, "NorthWind"); // We register data in the report if (query.Parameter != null) { report.SetParameterValue("Parameter", query.Parameter); // Set the value of the report parameter, if the parameter value is transmitted in the URL } report.Prepare();//prepare a report // if pdf format is selected if (query.Format == "pdf") { // Export report to PDF PDFExport pdf = new PDFExport(); // We use a stream to store the report so as not to create extra files report.Export(pdf, stream); } // if html report format is selected else if (query.Format == "html") { // Export report to HTML HTMLExport html = new HTMLExport(); html.SinglePage = true; // Single page report html.Navigator = false; // Top navigation bar html.EmbedPictures = true; // Embeds images in a document report.Export(html, stream); mime = "text/" + query.Format; // Redefine mime for html } } } // Get the name of the resulting report file with the desired extension var file = String.Concat(Path.GetFileNameWithoutExtension(reportPath), ".", query.Format); // Download the report file return File(stream.ToArray(), mime, file); } // Handle exceptions catch { return new NoContentResult(); } finally { stream.Dispose(); } } } else return NotFound(); }
此方法接收两个输入参数:id和query。第一个是我们列表中的报表标识符,第二个是我们在url中指定的报表参数集。我们将在下面查看此设置,但现在让我们继续使用Get方法。
如果需要,SetParameterValue方法设置我们传递给url的参数的值。这只是可能性的证明。
如您所见,从format参数中我们可以找到用户选择的内容。在我们的情况下,可以是pdf或html。根据格式,将导出报表。每种类型的导出都有自己的设置。结果,导出被保存到stream流中,然后被转换为文件以供下载。
现在回到Get-query方法的第二个参数。它具有一种ReportQuery。在数据模型中创建此类:
// Report Request Structure public class ReportQuery { // Format of resulting report: pdf, html public string Format { get; set; } // Value of "Parameter" variable in report public string Parameter { get; set; } }
如您所知,Get方法是从WebAPI提取的。这个项目是一个混合项目。它同时具有View部分和WebAPI接口。
因此,为了获得显示报表的视图,必须形成以下形式的URL:
为了与报表设计器进行演示,链接仅需在方法名称上有所不同:
但是要获取报表的名称,您需要在客户端应用程序中提供可用报表的列表。您可以使用url获取json格式的报表列表:
要以选定的格式下载报表,您需要形成以下形式的网址:
如果报表编号对应于服务器上报表列表中的ID,则格式可能具有pdf或html值。此外,如果报表模板中有任何参数,则可以指定一个报表参数。然后该网址将如下所示:
在这种情况下,报表中的参数本身应称为Parameter,其值取自url。通过类推,您可以在url中考虑任意多个参数。
我们已经完成了服务器端的工作。在本文的第3部分,我们将探讨在PHP的客户端应用程序中使用所有这些方法。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn
本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
一款全功能的Windows Forms、ASP.NET和MVC报表分析解决方案。
FastReport Online Designer一个跨平台的可视化Web报表设计器
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@cahobeh.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢