From 16657f6a314f12219212fb6da87672ba93d02d85 Mon Sep 17 00:00:00 2001 From: TekH Date: Fri, 26 Sep 2025 16:00:25 +0200 Subject: [PATCH] refactor(Pdf): Add Background-method to place a background behind the signatures. --- .../EnvelopeGenerator.PdfEditor.csproj | 4 ++ EnvelopeGenerator.PdfEditor/Pdf.cs | 40 ++++++++++++++++++- .../Controllers/EnvelopeController.cs | 18 +-------- .../wwwroot/js/annotation.js | 29 -------------- .../wwwroot/js/envelope-api.js | 1 + 5 files changed, 45 insertions(+), 47 deletions(-) diff --git a/EnvelopeGenerator.PdfEditor/EnvelopeGenerator.PdfEditor.csproj b/EnvelopeGenerator.PdfEditor/EnvelopeGenerator.PdfEditor.csproj index 4d69b8cd..55423075 100644 --- a/EnvelopeGenerator.PdfEditor/EnvelopeGenerator.PdfEditor.csproj +++ b/EnvelopeGenerator.PdfEditor/EnvelopeGenerator.PdfEditor.csproj @@ -21,4 +21,8 @@ + + + + diff --git a/EnvelopeGenerator.PdfEditor/Pdf.cs b/EnvelopeGenerator.PdfEditor/Pdf.cs index 4ec8d7dd..91c82d0c 100644 --- a/EnvelopeGenerator.PdfEditor/Pdf.cs +++ b/EnvelopeGenerator.PdfEditor/Pdf.cs @@ -1,10 +1,14 @@ using iText.Kernel.Pdf; using iText.Kernel.Pdf.Canvas; +using EnvelopeGenerator.Domain.Interfaces; +using iText.Kernel.Colors; +using iText.Kernel.Geom; #if NETFRAMEWORK -using System.IO; using System; +using System.IO; using System.Threading.Tasks; +using System.Collections.Generic; #endif namespace EnvelopeGenerator.PdfEditor @@ -76,6 +80,40 @@ namespace EnvelopeGenerator.PdfEditor }); #endregion + public Pdf Background(IEnumerable signatures) + where TSignature : ISignature + { + foreach (var signature in signatures) + Page(signature.Page, page => + { + var canvas = new PdfCanvas(page); + double inchFactor = 72; + double magin = .2; + double x = (signature.X - .7 - magin) * inchFactor; + double y = (signature.Y - .5 - magin) * inchFactor; + double width = 1.9500000000000002 * inchFactor; + double height = 2.52 * inchFactor; + + double bottomLineLength = 2.5; + + Rectangle pageSize = page.GetPageSize(); + + canvas.ConcatMatrix(1, 0, 0, -1, 0, pageSize.GetHeight()); + + // draw background + canvas.SetFillColor(new DeviceRgb(222, 220, 215)) + .Rectangle(x, y, width, height) + .Fill(); + + // draw bottom line + canvas.SetFillColor(new DeviceRgb(204, 202, 198)) + .Rectangle(x, y + height - bottomLineLength, width, bottomLineLength) + .Fill(); + }); + + return this; + } + #region Finalizer private bool _disposed = false; diff --git a/EnvelopeGenerator.Web/Controllers/EnvelopeController.cs b/EnvelopeGenerator.Web/Controllers/EnvelopeController.cs index 1cf42060..e0669b93 100644 --- a/EnvelopeGenerator.Web/Controllers/EnvelopeController.cs +++ b/EnvelopeGenerator.Web/Controllers/EnvelopeController.cs @@ -10,8 +10,6 @@ using EnvelopeGenerator.Domain.Constants; using EnvelopeGenerator.PdfEditor; using EnvelopeGenerator.Web.Extensions; using EnvelopeGenerator.Web.Models; -using iText.Kernel.Colors; -using iText.Kernel.Pdf.Canvas; using MediatR; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication.Cookies; @@ -224,21 +222,7 @@ public class EnvelopeController : ViewControllerBase { if (er.Envelope!.Documents?.FirstOrDefault() is DocumentDto doc && doc.ByteData is not null) { - using var pdf = Pdf.FromMemory(doc.ByteData).Design(1, canvas => - { - canvas.SetFillColor(new DeviceRgb(135, 62, 35)); - - canvas.Rectangle(100, 500, 200, 100); - - canvas.Fill(); - - canvas.SetFillColor(new DeviceRgb(222, 220, 215)); - - canvas.SetStrokeColor(new DeviceRgb(135, 62, 35)); - canvas.Circle(300, 500, 100); - canvas.FillStroke(); - canvas.Fill(); - }); + using var pdf = Pdf.FromMemory(doc.ByteData).Background(doc.Elements!); doc.ByteData = pdf.ExportAsBytes(); diff --git a/EnvelopeGenerator.Web/wwwroot/js/annotation.js b/EnvelopeGenerator.Web/wwwroot/js/annotation.js index ba8c3a12..0c45232c 100644 --- a/EnvelopeGenerator.Web/wwwroot/js/annotation.js +++ b/EnvelopeGenerator.Web/wwwroot/js/annotation.js @@ -5,35 +5,6 @@ async function createAnnotations(document) { for (let element of document.elements) { const annotParams = await getAnnotationParams(element.left, element.top); const page = element.page - 1 - - //#region background - if (annotParams.background) { - let background = annotParams.background; - const id_background = PSPDFKit.generateInstantId(); - const annotation_background = new PSPDFKit.Annotations.WidgetAnnotation({ - id: id_background, - pageIndex: page, - formFieldName: id_background, - backgroundColor: background?.backgroundColor ? new PSPDFKit.Color(background.backgroundColor) : null, - blendMode: 'normal', - boundingBox: new PSPDFKit.Geometry.Rect(background), - fontSize: 8, - borderStyle: background.borderStyle, - borderWidth: background.borderWidth, - borderColor: background?.borderColor ? new PSPDFKit.Color(background.borderColor) : null - }); - - const formFieldBackground = new PSPDFKit.FormFields.ButtonFormField({ - name: id_background, - annotationIds: PSPDFKit.Immutable.List([annotation_background.id]), - value: "", - readOnly: true - }); - - signatures.push(annotation_background) - signatures.push(formFieldBackground) - } - //#endregion } for (let element of document.elements) { diff --git a/EnvelopeGenerator.Web/wwwroot/js/envelope-api.js b/EnvelopeGenerator.Web/wwwroot/js/envelope-api.js index 17dd4938..7e6eecd2 100644 --- a/EnvelopeGenerator.Web/wwwroot/js/envelope-api.js +++ b/EnvelopeGenerator.Web/wwwroot/js/envelope-api.js @@ -72,6 +72,7 @@ async function getAnnotationParams(leftInInch = 0, topInInch = 0, inchToPointFac annot.top += topInInch - 0.5; annot.top *= inchToPointFactor; } + return annotParams; }