DevExpress Reporting中文教程 - 如何在macOS等系统中生成导出报表文档 DevExpress Reporting是.NET Framework下功能完善的报表平台它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集包括数据透视表、图表因此您可以构建无与伦比、信息清晰的报表。DevExpress新旧版本帮助文档下载可进QQ qun获取169725316在本文中我们将讨论如何在.NET MAUI项目中合并DevExpress Reports和Blazor Report Viewer报表查看器。在开始之前提醒一下因为新的DevExpress.Drawing图形渲染引擎我们的.NET Reporting工具不再依赖GDI这种与GDI的分离允许您在新的平台上部署由DevExpress Reports驱动的应用程序包括 .NET MAUI在这个新的/新兴的平台上有以下功能在运行时创建报表文档将报表导出为可用格式在单独的类库项目的Visual Studio报表设计器中创建报表使用DevExpress Blazor报表查看器在.NET MAUI Blazor应用程序中显示报表的打印预览接下来让我们深入研究并将DevExpress Reports集成到.NET MAUI项目中。使用Visual Studio报表设计器DevExpress Visual Studio Report Designer报表设计器分析项目引用和依赖关系并根据收集的数据启动单独的后台进程。在测试期间.NET MAUI与其他应用程序类型相比存在项目结构差异。由于这个问题Visual Studio的DevExpress报表设计器无法立即集成到.NET MAUI项目中。要在 .NET MAUI应用程序中创建和编辑报表建议您在单独的类库中创建和存储报表然后在.NET MAUI项目中引用该库。添加一个新的报表1. 按CTRLSHIFTA或在Visual Studio菜单中点击Project | Add New Item。2. 选择DevExpress Report项目指定一个报表名称然后点击Add。3. 在Report Wizard报表向导中选择报表类型然后点击Finish如果要从头创建报表请选择Blank。完成后Visual Studio报表设计器将出现在屏幕上添加Blazor Report Viewer如果您的应用需要在.NET MAUI中显示报表预览(在打印输出或导出操作之前)可以使用DevExpress Blazor报表查看器。为了整合Blazor报表查看器首先需要创建一个.NET MAUI Blazor混合应用程序引用所需的包并将WebAssembly (Native)组件的报表查看器添加到Razor页面。要从.NET MAUI Blazor应用程序中导出和共享报表您需要自定义DevExpress 报表查看器的导出过程。要定制导出过程实现IExportProcessor接口(授予您访问包含文档数据的字节数组的权限)。完成后使用.NET MAUI的内置IShare接口该接口包含一个API用于向设备共享功能发送数据(如文本或web链接)。下面的代码片段共享一个文件public class SharedReportExportProcessor : IExportProcessor { public async Task ProcessExportResult(ExportResultItem exportResultItem, bool isPrintOperation) { var fileName Path.Combine(FileSystem.CacheDirectory, exportResultItem.FileName); using (var file File.Create(fileName)) { file.Write(exportResultItem.Bytes); } await Share.Default.RequestAsync(new ShareFileRequest { Title Share a Report, File new ShareFile(fileName) }); } }如果以这种方式实现当您选择所需的导出格式时共享窗口将打开并提示用户选择要共享的应用程序。注册字体请注意安装在开发机器上的字体集与移动设备上的字体集不同。如果在系统中找不到报表中使用的字体则文本装饰可能会恢复到默认的Open Sans字体。要在部署的应用程序中维护报表的外观首先需要调用MauiProgram类中的ConfigureFonts方法。下一步是使用DXFontRepository类注册报告中使用的字体DevExpress.Drawing程序集使用此字体字典在文档呈现期间解析字体在ConfigureFonts方法调用之后使用以下代码片段using (StreamReader rd new StreamReader(Assets.Open(Arial.ttf))) { using (var ms new MemoryStream()) { rd.BaseStream.CopyTo(ms); DXFontRepository.Instance.AddFont(ms); } }