@page "/envelope/{EnvelopeKey}/DxReportViewer" @using XtraReport = DevExpress.XtraReports.UI.XtraReport @using DevExpress.Blazor.Reporting @using Microsoft.Extensions.Options @using EnvelopeGenerator.ReceiverUI.Options @using EnvelopeGenerator.ReceiverUI.Services @inject InMemoryReportStorageWebExtension ReportStorage @inject DocumentService DocumentService @inject IOptions AppOptions @if (Report is not null) { } @code { [Parameter] public string EnvelopeKey { get; set; } = string.Empty; XtraReport? Report; byte[]? _basePdfBytes; protected override async Task OnInitializedAsync() { if (!AppOptions.Value.UsePredefinedReports) { var (pdfBytes, _) = await DocumentService.GetDocumentAsync(EnvelopeKey); if (pdfBytes is { Length: > 0 }) _basePdfBytes = pdfBytes; } Report = BuildFreshBaseReport(); } XtraReport BuildFreshBaseReport() { if (_basePdfBytes is { Length: > 0 }) { var report = new XtraReport(); var detail = new DevExpress.XtraReports.UI.DetailBand(); report.Bands.Add(detail); detail.Controls.Add(new DevExpress.XtraReports.UI.XRPdfContent { Source = _basePdfBytes, GenerateOwnPages = true }); return report; } return CreateReportInstance(); } XtraReport CreateReportInstance() { return ReportStorage.TryGetReport("LargeDatasetReport", out var savedReport) ? savedReport : PredefinedReports.ReportsFactory.GetReport("LargeDatasetReport"); } }