feat(BurnPdfCommandHandler): add logging and implement BurnInstantJSONAnnotsToPDF

- Added ILogger<BurnPdfCommandHandler> to log warnings during annotation processing
- Implemented BurnInstantJSONAnnotsToPDF method to handle instant JSON annotations
- Added AddInstantJSONAnnotationToPDF stub for future implementation
- Updated PDF burn flow to include error handling and logging
This commit is contained in:
2025-11-07 10:40:44 +01:00
parent b7d146ddb5
commit b64f4d71f5

View File

@@ -3,10 +3,10 @@ using EnvelopeGenerator.Application.Common.Configurations;
using EnvelopeGenerator.Application.Exceptions; using EnvelopeGenerator.Application.Exceptions;
using EnvelopeGenerator.Domain.Constants; using EnvelopeGenerator.Domain.Constants;
using EnvelopeGenerator.Domain.Entities; using EnvelopeGenerator.Domain.Entities;
using EnvelopeGenerator.PdfEditor;
using GdPicture14; using GdPicture14;
using MediatR; using MediatR;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
namespace EnvelopeGenerator.Application.Pdf; namespace EnvelopeGenerator.Application.Pdf;
@@ -31,17 +31,21 @@ public class BurnPdfCommandHandler : IRequestHandler<BurnPdfCommand>
private readonly IRepository<Signature> _signRepo; private readonly IRepository<Signature> _signRepo;
private readonly ILogger<BurnPdfCommandHandler> _logger;
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
/// <param name="pdfBurnerParams"></param> /// <param name="pdfBurnerParams"></param>
/// <param name="manager"></param> /// <param name="manager"></param>
/// <param name="signRepo"></param> /// <param name="signRepo"></param>
public BurnPdfCommandHandler(PDFBurnerParams pdfBurnerParams, AnnotationManager manager, IRepository<Signature> signRepo) /// <param name="logger"></param>
public BurnPdfCommandHandler(PDFBurnerParams pdfBurnerParams, AnnotationManager manager, IRepository<Signature> signRepo, ILogger<BurnPdfCommandHandler> logger)
{ {
_pdfBurnerParams = pdfBurnerParams; _pdfBurnerParams = pdfBurnerParams;
_manager = manager; _manager = manager;
_signRepo = signRepo; _signRepo = signRepo;
_logger = logger;
} }
/// <summary> /// <summary>
@@ -162,6 +166,52 @@ public class BurnPdfCommandHandler : IRequestHandler<BurnPdfCommand>
/// <param name="pInstantJSONList"></param> /// <param name="pInstantJSONList"></param>
/// <returns></returns> /// <returns></returns>
public byte[] BurnInstantJSONAnnotsToPDF(byte[] pSourceBuffer, List<string> pInstantJSONList) public byte[] BurnInstantJSONAnnotsToPDF(byte[] pSourceBuffer, List<string> pInstantJSONList)
{
GdPictureStatus oResult;
using var oSourceStream = new MemoryStream(pSourceBuffer);
// Open PDF
oResult = _manager.InitFromStream(oSourceStream);
if (oResult != GdPictureStatus.OK)
{
throw new BurnAnnotationException($"Could not open document for burning: [{oResult}]");
}
// Add annotation to PDF
foreach (var oJSON in pInstantJSONList)
{
try
{
AddInstantJSONAnnotationToPDF(oJSON);
}
catch (Exception ex)
{
_logger.LogWarning("Error in AddInstantJSONAnnotationToPDF - oJson: ");
_logger.LogWarning(oJSON);
throw new BurnAnnotationException("Adding Annotation failed", ex);
}
}
oResult = _manager.BurnAnnotationsToPage(RemoveInitialAnnots: true, VectorMode: true);
if (oResult != GdPictureStatus.OK)
{
throw new BurnAnnotationException($"Could not burn annotations to file: [{oResult}]");
}
// Save PDF
using var oNewStream = new MemoryStream();
oResult = _manager.SaveDocumentToPDF(oNewStream);
if (oResult != GdPictureStatus.OK)
{
throw new BurnAnnotationException($"Could not save document to stream: [{oResult}]");
}
_manager.Close();
return oNewStream.ToArray();
}
private void AddInstantJSONAnnotationToPDF(string pInstantJSON)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }