Compare commits

...

2 Commits

6 changed files with 48 additions and 51 deletions

View File

@@ -21,4 +21,8 @@
<PackageReference Include="itext.bouncy-castle-adapter" Version="8.0.5" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\EnvelopeGenerator.Domain\EnvelopeGenerator.Domain.csproj" />
</ItemGroup>
</Project>

View File

@@ -1,10 +1,13 @@
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 +79,40 @@ namespace EnvelopeGenerator.PdfEditor
});
#endregion
public Pdf<TInputStream, TOutputStream> Background<TSignature>(IEnumerable<TSignature> 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;

View File

@@ -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();

View File

@@ -12,9 +12,9 @@
<PackageTags>digital data envelope generator web</PackageTags>
<Description>EnvelopeGenerator.Web is an ASP.NET MVC application developed to manage signing processes. It uses Entity Framework Core (EF Core) for database operations. The user interface for signing processes is developed with Razor View Engine (.cshtml files) and JavaScript under wwwroot, integrated with PSPDFKit. This integration allows users to view and sign documents seamlessly.</Description>
<ApplicationIcon>Assets\icon.ico</ApplicationIcon>
<Version>3.3.1</Version>
<AssemblyVersion>3.3.1</AssemblyVersion>
<FileVersion>3.3.1</FileVersion>
<Version>3.4.0</Version>
<AssemblyVersion>3.4.0</AssemblyVersion>
<FileVersion>3.4.0</FileVersion>
<Copyright>Copyright © 2025 Digital Data GmbH. All rights reserved.</Copyright>
</PropertyGroup>

View File

@@ -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) {

View File

@@ -72,6 +72,7 @@ async function getAnnotationParams(leftInInch = 0, topInInch = 0, inchToPointFac
annot.top += topInInch - 0.5;
annot.top *= inchToPointFactor;
}
return annotParams;
}