Refactor PDF signing logic and appearance handling
Refactored `Pkcs11Options` by removing `DefaultCertificationLevel` and improving property documentation. Replaced `VisualSignature` in `PdfSignOptionsDto` with `Appearance` using the new `PdfSignatureAppearanceDto` class, which encapsulates signature appearance details, including font and color settings. Enhanced `PdfSignatureCertificationLevel` enum with more descriptive values and added XML documentation. Updated `IPdfDigitalSignatureService` to support optional signature images and removed redundant methods. Refactored `PdfDigitalSignatureService` to streamline appearance handling, validate inputs, and improve maintainability. Removed unused methods and added support for `PdfSignatureAppearanceDto`. Simplified `PdfSignatureController` by consolidating form properties into `PdfSignOptionsDto`. Improved code readability and flexibility while removing redundant logic.
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
using EnvelopeGenerator.Application.Common.Dto;
|
||||
using EnvelopeGenerator.Application.Common.Enums;
|
||||
using EnvelopeGenerator.Application.Common.Interfaces.Services;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
@@ -33,59 +32,12 @@ public class PdfSignatureController(IPdfDigitalSignatureService signatureService
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public required IFormFile SignatureImageFile { get; init; }
|
||||
public required IFormFile SignatureImage { get; init; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public required string? UUID { get; init; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public required string? Name { get; init; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public required string? Reason { get; init; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public required string? Location { get; init; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public required string? Email { get; init; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public required string? Phone { get; init; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public required VSignature Signature { get; init; }
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="PageNumber"></param>
|
||||
/// <param name="Left"></param>
|
||||
/// <param name="Bottom"></param>
|
||||
/// <param name="Width"></param>
|
||||
/// <param name="Height"></param>
|
||||
/// <param name="ShowLabels"></param>
|
||||
public record VSignature(
|
||||
int PageNumber = 1,
|
||||
double Left = 100,
|
||||
double Bottom = 100,
|
||||
double Width = 220,
|
||||
double Height = 80,
|
||||
bool ShowLabels = true);
|
||||
public PdfSignOptionsDto Options { get; init; } = new PdfSignOptionsDto();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -99,32 +51,14 @@ public class PdfSignatureController(IPdfDigitalSignatureService signatureService
|
||||
[Consumes("multipart/form-data")]
|
||||
public async Task<IActionResult> Sign([FromForm] SignPdfForm request, CancellationToken cancel)
|
||||
{
|
||||
await using var signatureImageInput = request.SignatureImageFile.OpenReadStream();
|
||||
using var signatureImageBuffer = new MemoryStream();
|
||||
await signatureImageInput.CopyToAsync(signatureImageBuffer, cancel);
|
||||
|
||||
var signOptions = new PdfSignOptionsDto
|
||||
{
|
||||
UUID = request.UUID,
|
||||
Name = request.Name,
|
||||
Reason = request.Reason,
|
||||
Location = request.Location,
|
||||
Email = request.Email,
|
||||
Phone = request.Phone,
|
||||
CertificationLevel = PdfSignatureCertificationLevel.FormFillingAndAnnotations,
|
||||
VisualSignature = new PdfVisualSignatureOptionsDto(
|
||||
ImageBytes: signatureImageBuffer.ToArray(),
|
||||
PageNumber: request.Signature.PageNumber,
|
||||
Left: request.Signature.Left,
|
||||
Bottom: request.Signature.Bottom,
|
||||
Width: request.Signature.Width,
|
||||
Height: request.Signature.Height,
|
||||
ShowLabels: request.Signature.ShowLabels)
|
||||
};
|
||||
await using var signatureImage = request.SignatureImage.OpenReadStream();
|
||||
|
||||
await using var input = request.File.OpenReadStream();
|
||||
|
||||
var output = new MemoryStream();
|
||||
await signatureService.SignPdfAsync(input, output, signOptions, cancel);
|
||||
|
||||
await signatureService.SignPdfAsync(input, output, request.Options, signatureImage, cancel);
|
||||
|
||||
output.Position = 0;
|
||||
var fileName = Path.GetFileNameWithoutExtension(request.File.FileName);
|
||||
return File(output, "application/pdf", $"{fileName}-signed.pdf");
|
||||
|
||||
Reference in New Issue
Block a user