Files
EnvelopeGenerator/fix-signature-field-formatting.md
TekH feaea1626b Fix signature field formatting and add text truncation
Address customer feedback on signature field layout issues:
- Added truncation logic in `PDFBurner.vb` to limit text length
  based on per-field maximums, appending a suffix (e.g., `..`).
- Enhanced `PDFBurnerParams.vb` with `TextMaxLengths` and
  `TruncationSuffix` for configurable truncation behavior.
- Improved spacing and layout handling for signature fields to
  prevent text collisions within fixed dimensions.
- Updated `EnvelopeGenerator.sln` with documentation for the
  signature formatting fix (`fix-signature-field-formatting.md`).
- Applied truncation consistently across `AddFormFieldValue`
  overloads and ensured deterministic rendering of annotations.
2026-08-25 09:07:02 +02:00

4.2 KiB
Raw Blame History

Signature Field Formatting — WISAG Feedback

Context

Customer feedback received from the new WISAG signFLOW project lead (email dated 3/7/2026).
The signature stamp rendered inside the finalized PDF has layout issues that need to be addressed.

Current State (screenshot from customer email)

Signiert von ___________
[ signature image       ]
Armin Schneider
C6B85E96A520C60...       ← certificate hash, too close to name
Bereichsleiter Kern-     ← position text wraps, no spacing to date
Anwendungen
Frankfurt am Main
23.06.2026, 17:13:42 GMT+2

Issues Reported

  1. Spacing between name and certificate number is too small — needs more vertical gap.
  2. Spacing between position/title and date/time is too small — should be dynamic (expand with content).
  3. (Secondary, out of scope here) Multiple signature fields side-by-side scale individually, causing uneven heights.

Agreed Solution

"Height stays fixed. Text stretches horizontally. Beyond a certain character limit, truncate with '...'"
(Original: "Höhe bleibt fix. Text dehnt sich horizontal aus. Ab einem bestimmten Limit wird mit '...' abgekürzt.")

Rationale

  • The signature field dimensions are fixed (1.77" × 1.96"). Allowing text to wrap causes position and date rows to collide vertically.
  • Truncating long strings with ellipsis (...) keeps the layout deterministic and prevents overflow.
  • Per-field max-length limits allow tuning each text row independently (name, certificate, position, city, date).

Implementation Plan

1. PDFBurnerParams.vb — Add per-field max-length dictionary

Add a new property TextMaxLengths that maps each field name (matching EGName keys) to a maximum character count.

' EnvelopeGenerator.CommonServices/Jobs/FinalizeDocument/PDFBurnerParams.vb

Public Property TextMaxLengths As New Dictionary(Of String, Integer) From {
    {"name",      28},
    {"position",  32},
    {"city",      24},
    {"date",      28}
}

Default values are starting points and should be tuned against real customer data.

2. PDFBurner.vb — Add truncation helper and apply in AddFormFieldValue

2a. Add a private helper function

Private Function TruncateText(value As String, fieldName As String) As String
    If String.IsNullOrEmpty(value) Then Return value

    Dim maxLen As Integer = 0
    If _pdfBurnerParams.TextMaxLengths IsNot Nothing AndAlso
       _pdfBurnerParams.TextMaxLengths.TryGetValue(fieldName, maxLen) AndAlso
       maxLen > 0 AndAlso value.Length > maxLen Then
        Return value.Substring(0, maxLen - 3) & "..."
    End If

    Return value
End Function

2b. Apply truncation in the egName-aware overload

In AddFormFieldValue(pAnnotation As Annotation, formFieldValue As FormFieldValue):

' Before passing value to AddTextAnnot, truncate:
Dim displayValue As String = TruncateText(formFieldValue.value, pAnnotation.egName)

Dim ant = Manager.AddTextAnnot(oX, oY, oWidth, oHeight, displayValue)

2c. Apply truncation in the element-based overload (optional)

In AddFormFieldValue(x, y, width, height, page, value) — if a field name is available in calling context, pass it through; otherwise this path does not use egName and truncation can be skipped or applied with a generic fallback key.


Affected Files

File Change
EnvelopeGenerator.CommonServices/Jobs/FinalizeDocument/PDFBurnerParams.vb Add TextMaxLengths As Dictionary(Of String, Integer)
EnvelopeGenerator.CommonServices/Jobs/FinalizeDocument/PDFBurner.vb Add TruncateText() helper; apply in AddFormFieldValue overloads

Notes

  • Field names ("name", "position", "city", "date") must match the keys used in EGName.Index dictionary (PDFBurner.vb:443–450).
  • The certificate hash field (e.g. C6B85E96A520C60...) is already truncated upstream — verify its egName mapping if it needs its own limit.
  • The YOffset / TopMargin values in PDFBurnerParams may also need adjustment to increase vertical spacing between rows. That is a separate (simpler) change.
  • This issue is not related to the Blazor WebUI rendering — it is purely in the GdPicture14 PDF burning pipeline.