using DigitalData.Core.Exceptions;
using EnvelopeGenerator.Application.Common.Dto;
using EnvelopeGenerator.Domain.Interfaces;
namespace EnvelopeGenerator.Application.Common.Interfaces.Doc;
///
///
///
public interface IPdfPageImageRenderer
{
///
///
///
///
///
///
Task> RenderPagesAsImagesAsync(byte[] pdfBytes, CancellationToken cancellationToken = default);
///
///
///
///
///
Stream ComposeSignaturePreviewPng(ISignatureInkPayload element);
///
///
///
///
///
public bool IsSupportedImageFormat(byte[] bytes);
}
///
///
///
public static class PdfPageImageRendererExtensions
{
///
///
///
///
///
///
///
public static byte[] EnsureSupportedImageBytes(this IPdfPageImageRenderer renderer, byte[] inkBytes)
{
if (!renderer.IsSupportedImageFormat(inkBytes))
throw new BadRequestException("Only PNG and JPEG signature formats are supported.");
return inkBytes;
}
public static byte[] ComposeSignaturePreviewPngBytes(this IPdfPageImageRenderer renderer, ISignatureInkPayload element)
{
using var stream = renderer.ComposeSignaturePreviewPng(element);
if (stream is MemoryStream memoryStream)
return memoryStream.ToArray();
using var copy = new MemoryStream();
stream.CopyTo(copy);
return copy.ToArray();
}
}