Sawiki RDL 报告引擎介绍

Sawiki RDL报告引擎是一个用于将RDL报告渲染到ASP.NETWinforms查看器的工具。它还可以将渲染后的报告导出为XLS、PDF或CSV格式的文件。该引擎读取在Microsoft Visual Studio中创建的RDL文件,连接到引用的数据库,收集参数信息,并渲染最终的报告。目前,它支持所有RDL特性,除了3D图表、列、递归层次结构、文档映射和固定标题。它包括完整的VB.NET支持,包括导入外部库。

这是一个轻量级高速报告渲染器,包括一个RDL编译器,以进一步提高报告项目的性能。它对于任何希望在不支付SQL Server许可证的情况下将Microsoft Reporting Services报告部署到网站,或者在WinForms应用程序中部署报告的人来说都是有用的。

这个项目最初是为了在不支付Microsoft SQL Server许可证的情况下将RDL报告包含在网站中而开始的。同时,对MicrosoftASP.NET报告查看器的工作方式也不满意。花了一些时间在开源项目RDL Project 3上,但对其部分VB解释器和复杂的渲染算法感到不满意。

引擎使用来自Microsoft.VisualBasics命名空间的VBCodeProvider类来编译任何包含的源代码和表达式到一个程序集中。程序集中的每个函数都被放入一个委托列表中,这些委托可以在报告处理期间按索引调用。唯一不能直接编译的表达式是包含聚合函数如Sum、Avg等的表达式。对于这些,使用正则表达式修改RDL报告中的VB源代码,将任何聚合函数调用包装到一个迭代器中。

渲染是先到一个中间模型,然后再渲染到最终形式。中间模型由GenericRender类表示,该类由Report.Run方法返回。GenericRender表示一个简单的盒子模型,可以轻松地转换为最终渲染类之一。这些包括RenderToHtml、RenderPagesToHtml、RenderToText、RenderToCsv、RenderToXls和RenderPagesToPdf。WinForms查看器直接与GenericRender类工作。GenericRender类的简单盒子模型允许简单地渲染到各种最终形式,这一点由RenderToText类总共不到100行代码就可以看出。

使用代码

RDL引擎包括四个元素:

  • RDLEngine - 基础库,包括RDL解释器和渲染引擎。这需要包含在任何报告项目中。
  • RDLAsp - 包括报告查看器控件、参数控件、打印功能和导出功能的ASP.NET库。
  • RDLViewer - 包括报告查看器、参数控件、参数对话框、打印和导出功能的WinForms库。
  • RDLCompile - 将RDL报告编译成.NET程序集的RDL编译器。

要读取RDL报告、设置一些参数并将渲染后的报告输出到PDF和XLS,请使用以下代码:

// 创建一个新的Report对象并加载一个RDL报告定义 Rdl.Engine.Report rpt = new Rdl.Engine.Report(); FileStream fs = new FileStream("Product Line Sales.rdl", FileMode.Open); rpt.Load(fs, "."); fs.Close(); // 设置参数 rpt.ReportParameters["Category"].Value = 1; rpt.ReportParameters["StartDate"].Value = DateTime.Now; rpt.ReportParameters["EndDate"].Value = DateTime.Now.AddMonths(-1); // 渲染报告 Rdl.Render.GenericRender render = rpt.Run(); // 导出到XLS并写入文件 Rdl.Render.RenderToXls xlsExport = new Rdl.Render.RenderToXls(); string xls = xlsExport.Render(render, false); StreamWriter sw = File.CreateText("Product Line Sales.xls"); sw.Write(xls); sw.Close(); // 导出到PDF并写入文件 PageRender pr = new Rdl.Render.PageRender(); pr.Render(render); Rdl.Render.RenderPagesToPdf pdfExport = new Rdl.Render.RenderPagesToPdf(); string pdf = pdfExport.Render(render, pr); sw = File.CreateText("Product Line Sales.pdf"); sw.Write(pdf); sw.Close();

以下ASP.NET页面包括一个ReportViewer控件和一个Parameters控件。当按下Button6时,Parameters控件加载Product Line Sales报告。Parameters控件包括一个View按钮,当按下时触发ViewReport事件,在该事件中报告被渲染并加载到ReportViewer控件中。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485