Signature & Approval

Signature Zones

Reserve space for digital signatures in your PDFs using platform-agnostic anchor zones that integrate with DocuSign, Adobe Sign, Dropbox Sign, and other e-signature platforms. Optionally append a tamper-evident Approval & Verification page.

VaultPDF supports signature zones that embed a uniquely-anchored placeholder rectangle into any PDF document. Zones are platform-agnostic. The anchor text can be mapped to DocuSign, Adobe Sign, Dropbox Sign, or any other e-signature platform in a post-processing step. No platform SDK is required at render time.

VaultPDF can also append an optional Approval & Verification page that consolidates all signers, document metadata, a digital thumbprint, and a QR code into a single printable summary at the end of the document.

Tamper-evident, not legally binding

VaultPDF signature zones are structural placeholders that reserve space and inject anchor text. The digital thumbprint on the Approval page is a deterministic integrity marker, not a cryptographic signature. Actual legally binding e-signatures are applied by DocuSign, Adobe Sign, Dropbox Sign, or your chosen platform after VaultPDF renders the PDF. VaultPDF works alongside these platforms, not as a replacement.

How Anchors Work

VaultPDF injects a plain-text anchor string inside the rendered signature box. The e-signature platform scans the PDF, detects the anchor, and places its interactive field at the correct coordinates automatically. No VaultPDF-specific integration is needed on the platform side.

[[SIGN_<ROLE>|required]]    # mandatory signer
[[SIGN_<ROLE>|optional]]    # optional signer

Key Capabilities

Reserved Signature Box

Each zone renders as a bordered, fixed-size rectangle. No surrounding content overflows into it. Width, height, and border style are fully configurable per zone.

Role-Based Zones

Assign a unique role to each zone (preparer, manager, customer, legal, cfo, etc.). The role becomes part of the anchor tag and maps to the data payload.

Optional Name & Date

showName and showDate render pre-filled signer info from the data payload below the box. Each flag is independently toggleable.

Extended Anchor Types

Beyond signatures, VaultPDF supports Initials, Checkbox, and Date anchor types for enterprise signing workflows.

Works Everywhere

Signature zones are first-class layout elements. They work inside nested tables, overflow sections, and both real-time and batch rendering modes.

Approval & Verification Page

Optionally append a consolidated approval page with signer grid, document metadata, digital thumbprint, and QR code, all driven by the same signatures payload.

SharePoint Audit Trail

After signing, metadata can be stamped back to SharePoint for full document-level auditability and compliance tracking.


Inline Signature Zones

Schema Reference

Add signature zones as children of any section node using "type": "signature".

{
  "type": "signature",
  "label": "Manager Approval",
  "role": "manager",
  "fieldType": "sign",
  "width": 220,
  "height": 80,
  "required": true,
  "showName": true,
  "showDate": true,
  "borderStyle": "full",
  "textColor": "#000000"
}

Properties

PropertyTypeDefaultDescription
labelstring"Signature"Text displayed above the box
rolestring"signer"Unique signer ID used in the anchor prefix and maps to signatures.<role> in the payload
fieldTypestring"sign"Type of field to render. Options: sign, initials, check, date. Controls the anchor prefix
widthnumber220Box width in points
heightnumber80Box height in points
requiredbooleantrueControls whether the anchor emits required or optional. Can be overridden per-signer in the data payload
showNamebooleantrueDisplays signer name from signatures.<role>.name
showDatebooleantrueDisplays signed date from signatures.<role>.date
borderStylestring"full"Box border style. full = full rectangle, minimal = bottom line only, none = no box (anchor text only)
textColorstringtheme primaryAnchor text color inside the box. Use "#FFFFFF" for invisible anchors on white backgrounds

Data Payload

Signature data lives under a top-level signatures object in the payload. Each key must exactly match the role defined in the template.

Single Approver

{
  "documentTitle": "Purchase Order #PO-2026-001",
  "orderNumber": "PO-2026-001",
  "vendor": "Acme Supplies Ltd.",
  "totalAmount": 12500.00,
  "currency": "USD",
  "requestedBy": "Jane Smith",
  "department": "Operations",
  "signatures": {
    "manager": {
      "name": "Robert Chen",
      "date": "2026-03-15",
      "required": false
    }
  }
}

Overriding required in the payload

Adding "required": false to a signer entry overrides the template default for that signer only. The anchor emits optional instead of required, for example [[SIGN_MANAGER|optional]].

Three-Stage Approval

{
  "documentTitle": "Capital Expenditure Request #CAPEX-2026-042",
  "requestNumber": "CAPEX-2026-042",
  "projectName": "Server Infrastructure Upgrade",
  "requestedAmount": 245000.00,
  "currency": "USD",
  "requestedBy": "Michael Torres",
  "department": "IT Infrastructure",
  "signatures": {
    "preparer": { "name": "Michael Torres", "date": "2026-03-10" },
    "manager":  { "name": "Sarah Kim",      "date": "2026-03-12" },
    "customer": { "name": "David Okafor",   "date": "" }
  }
}

Enterprise Five-Party Signing

{
  "documentTitle": "Master Services Agreement - Enterprise License",
  "contractId": "MSA-2026-ENT-007",
  "effectiveDate": "2026-04-01",
  "vendorName": "VaultPDF Technologies Inc.",
  "clientName": "Contoso Corporation",
  "contractValue": 120000.00,
  "currency": "USD",
  "signatures": {
    "preparer": { "name": "Alice Nguyen", "date": "2026-03-14" },
    "legal":    { "name": "James Obi",    "date": "2026-03-14" },
    "finance":  { "name": "Priya Mehta",  "date": "" },
    "cfo":      { "name": "",             "date": "" },
    "customer": { "name": "",             "date": "" }
  }
}

Payload Notes

  • Keys inside signatures must exactly match the role values in the template.
  • name and date are optional. VaultPDF still renders the box and anchor if omitted or empty.
  • An empty string or null for date means the signer will fill it on the e-signature platform.
  • Add "required": false to any signer entry to downgrade that zone to optional at runtime.
  • The anchor is structural and is always injected regardless of whether name or date are present.

Anchor Format Reference

The anchor format is [[<PREFIX>_<ROLE_UPPERCASE>|required/optional]]. The prefix is determined by the fieldType property on the schema node.

fieldType to Anchor Prefix

fieldTyperequired: truerequired: false
"sign"[[SIGN_MANAGER|required]][[SIGN_MANAGER|optional]]
"initials"[[INITIALS_MANAGER|required]][[INITIALS_MANAGER|optional]]
"check"[[CHECK_MANAGER|required]][[CHECK_MANAGER|optional]]
"date"[[DATE_MANAGER|required]][[DATE_MANAGER|optional]]

Schema node examples

{ "type": "signature", "props": { "role": "manager", "fieldType": "sign",     "required": true  } }
{ "type": "signature", "props": { "role": "manager", "fieldType": "initials", "required": true  } }
{ "type": "signature", "props": { "role": "manager", "fieldType": "check",    "required": false } }
{ "type": "signature", "props": { "role": "manager", "fieldType": "date",     "required": true  } }

Payload override

The required flag can be overridden at signer level in the data payload independently of the template:

"signatures": {
  "customer": {
    "name": "Robert Chen",
    "date": "2026-03-15",
    "required": false
  }
}

This produces [[INITIALS_CUSTOMER|optional]] when fieldType is "initials", regardless of the template setting.

Platform Compatibility

The [[SIGN_ROLE|required]] anchor pattern is compatible with the DocuSign text tag standard. For Adobe Sign, configure your account to recognise this anchor prefix. For other platforms, use the extended anchor types above or map them in a post-processing step.


How Inline Zones Render

Box Reservation

A bordered rectangle is drawn at the configured width and height. The zone is a block-level element and no surrounding content flows into it. borderStyle controls whether a full box, bottom-line-only, or no border is drawn.

Label Rendering

The label value is rendered above the box in the active section font and style.

Anchor Injection

A plain-text anchor is injected inside the box at render time. The format is [[<PREFIX>_{ROLE_UPPERCASE}|{required|optional}]]. E-signature platforms scan for this string and attach their interactive field at the exact coordinates.

Name & Date Lines

If showName or showDate is enabled, VaultPDF reads signatures.<role>.name and signatures.<role>.date from the payload and renders pre-filled lines below the box.


Approval & Verification Page

The Approval & Verification page is an optional last page appended to the document. It consolidates all signers into a structured grid and optionally includes a digital thumbprint and QR code. It is triggered separately from inline zones.

Sample Output

Invoice-2026-0029.pdf

Example Approval & Verification page showing signer grid, digital thumbprint, and QR code

Approval & Verification page: signer grid, digital thumbprint, QR code

Auto-appended

What the thumbprint is and isn't

The digital thumbprint on the Approval page is a deterministic, single-pass hash (DJB2-based) computed at render time from: document ID, generated date, version, and each approver's role, name, and required/optional status. It is a tamper-evident integrity marker. Any modification to those inputs produces a different value. It is not a cryptographic signature, does not use a private key, and is not a substitute for a legally binding e-signature. Use it to detect accidental edits or version drift; use DocuSign / Adobe Sign / etc. for legal validity.

Triggering the Approval Page

The page is shown when any of these conditions is true, listed in evaluation order:

SourceFieldEffect
data.documentAttestation.showApprovalPaneltrueShow approval page
data.showApprovalPaneltrueShow approval page (legacy top-level)
templateSettings.approvalPanel.enabledtrueShow approval page (designer toggle)
data.showApprovalPanelfalseSuppress approval page even when template enables it
data.documentAttestation.showApprovalPanelfalseSuppress approval page even when template enables it

Approval Page Data Structure

Signatures for the approval page come from exactly the same signatures object used by inline zones:

{
  "showApprovalPanel": true,
  "documentId": "PO-2026-001",
  "generatedDate": "2026-03-16",
  "version": "1.0",
  "user": "Jane Smith",
  "signatures": {
    "manager":  { "name": "Robert Chen",  "date": "2026-03-15", "required": true  },
    "customer": { "name": "David Okafor", "date": "",           "required": false }
  }
}

Alternatively, group everything under documentAttestation (preferred for new payloads):

{
  "documentAttestation": {
    "showApprovalPanel": true,
    "documentId": "PO-2026-001",
    "generatedDate": "2026-03-16",
    "version": "1.0",
    "user": "Jane Smith",
    "signatureColumns": 2,
    "includeDigitalThumbprint": true,
    "verificationUrl": "https://contoso.sharepoint.com/sites/docs/PO-2026-001",
    "signatures": {
      "manager":  { "name": "Robert Chen",  "required": true  },
      "customer": { "name": "David Okafor", "required": false }
    }
  }
}

Approval Page Properties

All properties support three resolution sources with this precedence:

documentAttestation.<field>data.<field>templateSettings.approvalPanel.<field> → default

PropertyTypeDefaultDescription
showApprovalPanelbooleannoneTriggers the approval page. false explicitly suppresses it even when templateSettings.approvalPanel.enabled is true
signatureColumns1|2|32Number of columns in the signer grid. Clamped to 1–3
includeDigitalThumbprintbooleanfalseRenders the Digital Thumbprint block in the Verification section
verificationUrlstringnoneURL encoded as a QR code in the Verification section. Also accepts sharePointUrl or documentUrl as aliases. Supports {{token}} resolution
headingLabelstring"Approval & Verification"Page heading text. Supports {{token}} resolution
headingFontSizenumber14Heading font size in points
headingAlignmentstring"left"Heading alignment: left, center, right
borderStylestring"full"Signer cell border style. full = full rectangle, minimal = bottom line only
textColorstringtheme primaryColor of [[SIGN_ROLE|required]] anchor text in each cell. Use "#FFFFFF" to render it invisible
userstringnone"Prepared By" value shown in the document metadata strip. Supports {{token}} resolution
versionstring"1.0"Document version shown in the metadata strip
prioritystringnoneOptional priority label shown in the metadata strip

templateSettings.approvalPanel (Designer Configuration)

Any of the above properties can be set once in the template so they never need repeating in the data payload:

{
  "templateSettings": {
    "approvalPanel": {
      "enabled": true,
      "signatureColumns": 2,
      "headingLabel": "Approval & Verification",
      "headingAlignment": "left",
      "borderStyle": "minimal",
      "textColor": "#FFFFFF",
      "includeDigitalThumbprint": false,
      "verificationUrl": "{{sharePointUrl}}"
    }
  }
}

Per-document overrides

Values in data.documentAttestation or data always take precedence over templateSettings.approvalPanel. You can set sensible defaults in the template and override individual fields per document at send time.

Verification Section

The Verification section appears below the signer grid when either includeDigitalThumbprint: true or a verificationUrl is provided.

ContentConditionLayout
Digital Thumbprint blockincludeDigitalThumbprint: trueLeft column
QR code panelverificationUrl presentRight column
QR only (no thumbprint)verificationUrl present, thumbprint offCentred

The thumbprint is computed from: document ID, generated date, version, and each approver's role + name + required/optional status. Any change to these fields produces a different hash, which is what makes the page tamper-evident.


Template JSON Examples

Single Signature (Manager Only)

{
  "schemaVersion": "2.0",
  "rootId": "root",
  "nodes": {
    "root": {
      "id": "root",
      "type": "root",
      "children": ["header1", "section_signatures"]
    },
    "header1": {
      "id": "header1",
      "type": "header",
      "props": {
        "title": "{{documentTitle}}",
        "subtitle": "{{orderNumber}}"
      }
    },
    "section_signatures": {
      "id": "section_signatures",
      "type": "section",
      "props": { "title": "Approval Signatures" },
      "children": ["sig_manager"]
    },
    "sig_manager": {
      "id": "sig_manager",
      "type": "signature",
      "props": {
        "label": "Manager Approval",
        "role": "manager",
        "width": 220,
        "height": 80,
        "required": true,
        "showName": true,
        "showDate": true
      }
    }
  }
}

Three-Stage Side-by-Side Approval

{
  "schemaVersion": "2.0",
  "rootId": "root",
  "nodes": {
    "root": { "id": "root", "type": "root", "children": ["section_sigs"] },
    "section_sigs": {
      "id": "section_sigs",
      "type": "section",
      "props": { "title": "Approval Signatures" },
      "children": ["sig_preparer", "sig_manager", "sig_customer"]
    },
    "sig_preparer": {
      "id": "sig_preparer",
      "type": "signature",
      "props": { "label": "Prepared By",        "role": "preparer", "width": 220, "height": 80, "required": true,  "showName": true, "showDate": true }
    },
    "sig_manager": {
      "id": "sig_manager",
      "type": "signature",
      "props": { "label": "Manager Approval",   "role": "manager",  "width": 220, "height": 80, "required": true,  "showName": true, "showDate": true }
    },
    "sig_customer": {
      "id": "sig_customer",
      "type": "signature",
      "props": { "label": "Customer Signature", "role": "customer", "width": 220, "height": 80, "required": false, "showName": true, "showDate": true }
    }
  }
}

Designer Shorthand Notation

Prepared By
{{signatureZone:preparer width=220 height=80 required=true}}

Manager Approval
{{signatureZone:manager width=220 height=80 required=true}}

Customer Signature
{{signatureZone:customer width=220 height=80 required=false}}

Page Break Behaviour

If a row of signature zones does not fit within the remaining page height, VaultPDF emits a page break before the section. Keep height consistent across zones in the same row for predictable layout.

Approval Page with Thumbprint and QR Code

{
  "documentTitle": "Service Agreement",
  "documentId": "MSA-2026-ENT-007",
  "generatedDate": "2026-03-16",
  "version": "2.1",
  "documentAttestation": {
    "showApprovalPanel": true,
    "signatureColumns": 3,
    "includeDigitalThumbprint": true,
    "verificationUrl": "https://contoso.sharepoint.com/sites/contracts/MSA-2026-ENT-007",
    "borderStyle": "minimal",
    "textColor": "#FFFFFF",
    "signatures": {
      "preparer": { "name": "Alice Nguyen", "required": true  },
      "legal":    { "name": "James Obi",    "required": true  },
      "cfo":      { "name": "",             "required": true  }
    }
  }
}

Integration Notes

  • Platform-agnostic: Anchors are plain text. Any e-signature SDK can find and replace them without a VaultPDF-specific integration.
  • Complementary, not competing: VaultPDF renders the PDF shell with placeholders and a tamper-evident approval record. DocuSign, Adobe Sign, or Dropbox Sign handle the legally binding signature step.
  • No payload required for anchor placement: The anchor is structural. Signer names and dates in the payload are for display only and do not affect anchor injection.
  • Deterministic placement: Signature zones respect all VaultPDF layout rules including tables, overflow, and nested sections.
  • Batch safe: Zones and approval pages work identically in real-time and batch queue rendering modes.
  • Inline zones hidden when approval page active: When showApprovalPanel is true, inline signature zone nodes are automatically hidden from the main document body. All signers appear exclusively on the Approval page.
  • SharePoint metadata: After signing, completion metadata can be stamped back to SharePoint for a full audit trail.

Ready to add signatures to your documents?

Explore the rendering pipeline to understand how signature zones interact with nested tables and overflow handling.

On this page