.NET 5 ActiveReports V15的使用 .NET 导出PDF

.NET 5 ActiveReports V15的使用 .NET 导出PDF

说明

在许多业务需求中,我们会被要求制作许许多多的表格、表单,乃至报告。

PDF的导出转换,可以在前端实现,但是会失真,并且有内容割断的风险。不过这个是免费的。

而今天,我就带来 GrapeCity的ActiveReports 15版本的使用。本次使用是在 .NET Core API 下,

.NET 版本为 5 ,整个项目是前后端分离。因为项目使用的是 .NET 5,

而只有15版本才支持 .NET 5,故选择此版本,希望对阁下有所帮助。

注意!!! 本文不教rdlx报表文件如何布局,该项可以查阅官方文档,它的设计和 WinForm 大致,只是表达式上需要阁下注意。表达式的部分还请阁下去官网找帮助文档,里面书写比较详细,此处便不在赘述。为阁下呈上链接:传送链接

ActiveReports 官方收费

一、准备

此处默认阁下拥有了 报表文件模板,并且开始要在后台对其进行数据渲染。

在.NET 中,NuGet包中搜寻 ActiveReports.Core ,会出来诸多版本。本文中,要导出的为PDF,所以找到 GrapeCity.ActiveReports.Export.Pdf,它的版本是15.0.0及以上。
如图所示
此包包含了创建、渲染、导出等功能。

二、编写

			// 获取模板
            string path = Directory.GetCurrentDirectory();
            FileInfo rptPath = new FileInfo(path + "\\Reports\\Tmpl.rdlx");

			// 获取完成之后装载进 PageReport,并将 report 里面的数据渲染装载到 document 中
            PageReport report = new PageReport(rptPath);
            PageDocument document = new PageDocument(report);

			// 获取数据来源
            document.LocateDataSource += new LocateDataSourceEventHandler(document_LocateDataSource);
            // 创建输出目录
            DirectoryInfo outputDirectory = new DirectoryInfo(filePath);
            if (!Directory.Exists(filePath))
            {
                outputDirectory.Create();
            }

            // 对渲染输出的 PDF 进行设置。一般是用来弄一些特别样式的。如果没有,直接 new 一个就行了
            Settings pdfSetting = new Settings();

            // 开始渲染
            PdfRenderingExtension pdfRenderingExtension = new PdfRenderingExtension();
            FileStreamProvider outputProvider = new FileStreamProvider(outputDirectory, Path.GetFileNameWithoutExtension(name));

            // 如果文件(同文件名情况下)已存在,则覆盖此文件
            outputProvider.OverwriteOutputFile = true;
            report.Document.Render(pdfRenderingExtension, outputProvider, pdfSetting);
void document_LocateDataSource(object sender, LocateDataSourceEventArgs args)
        {
        //  匹配数据源的名字是否一致。数据源在阁下设计的时候就命名了。如果不知道,请去设计器中查看
            if (args.DataSet.Query.DataSourceName == "DataResoure1")
            {
                args.Data = GetInfo(); // 此方法是获取数据。 注意,定义方法时,它返回值一定得是一个 IEnumerable 类型。
            }
        }

三、遇到的坑

当阁下的模板 有一个数据源,而下面有多个 DataSet 的时候,这时候阁下需使用 Switch 来让它自动判断,并回调。因为 document_LocateDataSource 是一个 事件

如果导出的文件没有数据,或者显示出表达式,说明阁下的表达式出现错误。这时候阁下要回到设计器中,重新设计。修改模板文件即可。

如果阁下需要单独计算每一页中的总数。可以在报表设计器中多使用一个 TextBox,并写上表达式为:=ReportItem!TextBox30.Value 。此处,TextBox30.Value 是你要计算的那个数的框。具体看你的那个要计算的数的框的什么,就修改它就好了。

四、结尾

至此,阁下已经完成了对 PDF 的渲染,并能到导出路径找到文档。

如果阁下需要导出到前端使用,可以使用 outputProvider 下的 GetPrimaryStream.OpenStream() 进行导出。
如若阁下已在前台设置好了导出位置的api,此时只需将 文件名传送回前端即可。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值