@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 { get; set; } = null!; byte[] BasePdfBytes { get; set; } = null!; protected override async Task OnInitializedAsync() { if (!AppOptions.Value.UsePredefinedReports) { var (pdfBytes, _) = await DocumentService.GetDocumentAsync(EnvelopeKey); if (pdfBytes is { Length: > 0 }) BasePdfBytes = pdfBytes; else throw new InvalidOperationException($"No PDF bytes found for EnvelopeKey: {EnvelopeKey}"); } Report = CreateReport(); } XtraReport CreateReport() { if (AppOptions.Value.UsePredefinedReports) { return ReportStorage.TryGetReport("LargeDatasetReport", out var savedReport) ? savedReport : PredefinedReports.ReportsFactory.GetReport("LargeDatasetReport"); } else { 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; } } }