From 26beae0d14cadb7f4135097b444141eab16b8914 Mon Sep 17 00:00:00 2001 From: TekH Date: Wed, 21 Oct 2026 17:46:38 +0200 Subject: [PATCH] Add support for signed PDF previews Integrated `PdfSignatureService` to enable fetching and previewing signed PDFs for completed envelopes. Updated `SenderPage.razor` to dynamically adjust popup headers and filenames based on the envelope's status. Enhanced `OpenPreviewAsync` to conditionally fetch signed or original PDFs. Registered `PdfSignatureService` and DevExpress PDF Viewer in `Program.cs`. Implemented `PdfSignatureService` to handle API calls for retrieving signed PDFs with error handling. --- .../Pages/SenderPage.razor | 12 +++++++--- .../Program.cs | 1 + .../Services/PdfSignatureService.cs | 24 +++++++++++++++++++ .../EnvelopeGenerator.Server/Program.cs | 1 + 4 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Services/PdfSignatureService.cs diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Pages/SenderPage.razor b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Pages/SenderPage.razor index 2b5a2184..04f5d0e7 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Pages/SenderPage.razor +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Pages/SenderPage.razor @@ -19,6 +19,7 @@ @inject EnvelopeGenerator.Server.Client.Services.ThemeService ThemeService @inject EnvelopeGenerator.Server.Client.Services.UserPreferencesService UserPreferencesService @inject EnvelopeGenerator.Server.Client.Services.CustomImagesService CustomImagesService +@inject EnvelopeGenerator.Server.Client.Services.PdfSignatureService PdfSignatureService @inject EnvelopeGenerator.Server.Client.Services.CreateEnvelopeBootstrapStorageService CreateEnvelopeBootstrapStorageService @inject ILogger Logger @inject NavigationManager Navigation @@ -424,7 +425,7 @@ @* ── PDF Vorschau Popup ────────────────────────────────────────────────── *@ (); // Logo configuration (loaded once after login, in-memory cached) builder.Services.AddScoped(); +builder.Services.AddScoped(); // DevExpress WASM builder.Services.AddDevExpressWebAssemblyBlazorPdfViewer(); diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Services/PdfSignatureService.cs b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Services/PdfSignatureService.cs new file mode 100644 index 00000000..99a1f868 --- /dev/null +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server.Client/Services/PdfSignatureService.cs @@ -0,0 +1,24 @@ +using System.Net; +using System.Net.Http.Json; + +namespace EnvelopeGenerator.Server.Client.Services; + +public class PdfSignatureService(IHttpClientFactory httpClientFactory) +{ + /// + /// Calls POST /api/PdfSignature with the envelope id and returns the fully signed PDF bytes. + /// + public async Task GetSignedPdfAsync(int envelopeId, CancellationToken cancel = default) + { + using var http = httpClientFactory.CreateClient("EnvelopeGenerator.Server"); + var response = await http.PostAsJsonAsync("/api/PdfSignature", new { Id = envelopeId }, cancel); + + if (!response.IsSuccessStatusCode) + throw new HttpRequestException( + $"Failed to load signed PDF. Status: {(int)response.StatusCode} ({response.ReasonPhrase ?? "Unknown"})", + null, + response.StatusCode); + + return await response.Content.ReadAsByteArrayAsync(cancel); + } +} diff --git a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Program.cs b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Program.cs index cbacf25f..66212b58 100644 --- a/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Program.cs +++ b/EnvelopeGenerator.Server/EnvelopeGenerator.Server/Program.cs @@ -344,6 +344,7 @@ try builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); + builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped();