Files
EnvelopeGenerator/EnvelopeGenerator.ReceiverUI/Options/PdfViewerOptions.cs
TekH 139b92ed8c Add configurable PDF viewer options and improve rendering
Introduced `PdfViewerOptions` class to centralize PDF viewer
settings such as scaling, HiDPI support, zoom transitions,
and rendering delays. Bound these options to `appsettings.json`
for dynamic configuration.

Injected `PdfViewerOptions` into `EnvelopeViewer.razor` and
updated `OnInitializedAsync` to pass settings to JavaScript.
Replaced hardcoded values in `pdf-viewer.js` with configurable
options, improving maintainability and flexibility.

Enhanced rendering logic to respect HiDPI settings, maximum
DPR, and smooth zoom transitions. Improved thumbnail rendering
with configurable delays to optimize performance.
2026-06-06 12:15:48 +02:00

65 lines
1.9 KiB
C#

namespace EnvelopeGenerator.ReceiverUI.Options;
public class PdfViewerOptions
{
public const string SectionName = "PdfViewer";
/// <summary>
/// Base scale for thumbnail rendering (0.2 - 1.5 recommended)
/// Higher values = better quality but slower rendering
/// Default: 0.75
/// </summary>
public double ThumbnailBaseScale { get; set; } = 0.75;
/// <summary>
/// Enable HiDPI/Retina support for thumbnails
/// Default: true
/// </summary>
public bool ThumbnailEnableHiDPI { get; set; } = true;
/// <summary>
/// Maximum device pixel ratio multiplier for thumbnails (1.0 - 3.0)
/// Caps DPR to avoid excessive memory usage on 4K+ displays
/// Default: 2.0
/// </summary>
public double ThumbnailMaxDPR { get; set; } = 2.0;
/// <summary>
/// Enable HiDPI/Retina support for main PDF canvas
/// Default: true
/// </summary>
public bool MainCanvasEnableHiDPI { get; set; } = true;
/// <summary>
/// Maximum device pixel ratio multiplier for main canvas (1.0 - 3.0)
/// Default: 2.0
/// </summary>
public double MainCanvasMaxDPR { get; set; } = 2.0;
/// <summary>
/// Enable smooth zoom transition (fade effect)
/// Default: true
/// </summary>
public bool EnableSmoothZoom { get; set; } = true;
/// <summary>
/// Zoom transition duration in milliseconds (50 - 500)
/// Default: 150
/// </summary>
public int ZoomTransitionDuration { get; set; } = 150;
/// <summary>
/// Opacity during rendering (0.0 - 1.0)
/// Lower values = more visible fade effect
/// Default: 0.85
/// </summary>
public double RenderingOpacity { get; set; } = 0.85;
/// <summary>
/// Delay between thumbnail renders in milliseconds (10 - 200)
/// Higher values = less browser stress, slower initial load
/// Default: 50
/// </summary>
public int ThumbnailRenderDelay { get; set; } = 50;
}