Premium Features

PDF/UA Accessibility & Section 508 Compliance

Every PDF validated against ISO 14289-1 (PDF/UA) at render time — automatically tagged, structured, and verified with a single template setting.

PDF/UA Validation at Render Time

When section508Accessibility is enabled, the Vault Engine doesn't just tag your PDF — it validates every document against ISO 14289-1 (PDF/UA) during the render pass. Accessibility is enforced structurally, not retrofitted. Documents that fail validation are flagged in the audit trace before they leave the rendering pipeline.

Section 508 is a U.S. law requiring digital documents to work with screen readers. VaultPDF generates PDF/UA (ISO 14289-1) compliant documents automatically — fully tagged, structured, and validated — with a single template setting.

What Problem Does It Solve?

Without accessibility tags:

  • Blind users can't read your PDFs with screen readers (NVDA, JAWS)
  • PDFs look like unstructured blobs to accessibility software
  • Your organization isn't Section 508 compliant

With accessibility tags:

  • Screen readers can read your PDFs naturally
  • Headings, lists, and tables are properly structured
  • Your organization becomes compliant

How to Enable It

Simplest: Enable with Defaults

{
  "vpdf": {
    "templateSettings": {
      "section508Accessibility": true
    }
  }
}

Full Control: Configure Sub-Settings

{
  "templateSettings": {
    "section508Accessibility": {
      "enabled": true,
      "level": "pdf-ua",
      "mode": "full",
      "appendSummary": true,
      "generateCertificate": false,
      "generateReport": false,
      "marginAnnotations": false
    }
  }
}

Settings Reference

SettingTypeDefaultDescription
enabledbooleantrueMaster switch. When false, all sub-settings are ignored and no accessibility processing occurs.
level"basic" | "pdf-ua""basic"Compliance tier. See detail below.
mode"optimized" | "full""optimized"Processing depth. See detail below.
appendSummarybooleantrueAppends a compliance summary page to the rendered PDF. See detail below.
generateCertificatebooleanfalseGenerates a standalone certificate PDF saved to SharePoint Reports/accessibility/. See detail below.
generateReportbooleanfalseGenerates a detailed multi-page audit report saved to SharePoint Reports/accessibility/.
marginAnnotationsbooleanfalseTemplate development only. See detail below — do not enable in production.

Note: section508Accessibility: true as a bare boolean is shorthand for enabled: true with all other settings at their defaults.


level — Compliance Tier

"basic" (default)
Adds PDF structure tags required for Section 508 and WCAG 2.1 compliance. The engine inserts /MarkInfo, tags headings/tables/lists/images, and injects a language declaration from templateSettings.locale. Screen readers (NVDA, JAWS, VoiceOver) can navigate the document structure. Sufficient for most enterprise document workflows.

"pdf-ua"
Full ISO 14289-1 (PDF/UA) compliance. Adds everything in "basic" plus runs the full validation pass at render time: heading hierarchy order, <TH> scope attributes on every table, alt text presence on every image, natural reading order enforcement, and font embedding verification. Documents that fail a validation rule are flagged in the audit trace. Required for government procurement, public sector, and documents subject to ADA litigation risk. This is the standard Adobe Acrobat's "Check for accessibility" tool tests against.

Use "pdf-ua" for regulated documents. Use "basic" for internal reports or when a lighter footprint is preferred.


mode — Processing Depth

"optimized" (default)
Balanced processing: ~1–2% file size overhead, +2ms render time. Tags the document structure and validates critical rules. Recommended for all production document workflows.

"full"
Stricter processing: ~3–4% file size overhead, +4–6ms render time. Runs exhaustive element analysis including per-cell table scope resolution, deep image alt text inspection, and contrast ratio checks (when colour data is available). Use "full" when generating accessibility certificates or reports for auditors, or when level: "pdf-ua" is set.


appendSummary — Compliance Summary Page

When true, a single summary page is appended as the last page of the rendered PDF. It contains:

  • Accessibility level (basic or pdf-ua) and mode used
  • Pass / Warning / Fail counts from the validation pass
  • Element coverage: headings tagged, tables with headers, images with alt text
  • Render timestamp and correlation ID

This page is visible to anyone who opens the PDF — useful for compliance reviewers who need to confirm accessibility without running external tools, and for audit evidence where the document itself must carry proof of compliance. If you do not want the summary visible to end recipients, set appendSummary: false and use generateCertificate: true instead (stored separately in SharePoint).


generateCertificate — Standalone Accessibility Certificate

When true, generates a separate certificate PDF stored in SharePoint at Reports/accessibility/{documentName}.section508.certificate.pdf. It is not appended to the main document.

The certificate contains:

  • Document ID, template name, and render timestamp
  • Accessibility level and validation results
  • A formal attestation that the document was rendered with accessibility processing enabled

Use this when you need to hand an auditor or procurement team a standalone accessibility attestation separate from the document content. The certificate can be regenerated on demand from the audit trace at any time — it does not need to be generated at every render.


marginAnnotations — Template Development Tool

Not for Production

marginAnnotations is a template authoring aid only. It adds visible PDF annotations in the margins of the rendered document. Enable it when building or validating a template; disable it before deploying to production users.

When true, the engine overlays colour-coded margin annotations on the rendered PDF showing per-element compliance status:

  • Green — element passed all checks
  • Amber — element has a warning (e.g. image present but no alt text supplied in payload)
  • Red — element failed a rule (e.g. heading level skipped)

This lets template authors see exactly which elements need attention without reading audit trace JSON. It has no effect on compliance scoring — it only adds the visual overlay. The annotations add ~0.2–0.5MB to file size and should never be present in documents delivered to end users or archived for compliance.

Configuration Examples

Example 1: Simple Enable (Invoice)

{
  "vpdf": {
    "templateName": "Invoice",
    "templateSettings": {
      "section508Accessibility": true,
      "locale": "en-US"
    }
  }
}

Result: Accessibility tags + summary page appended

Example 2: Generate Certificate (For Auditors)

{
  "vpdf": {
    "templateName": "ComplianceReport",
    "templateSettings": {
      "section508Accessibility": {
        "enabled": true,
        "appendSummary": true,
        "generateCertificate": true
      }
    }
  }
}

Result: Accessibility tags + summary page + professional certificate PDF (on-demand)

Example 3: Full Audit Mode (Legal/Enterprise)

{
  "vpdf": {
    "templateName": "LegalAgreement",
    "templateSettings": {
      "section508Accessibility": {
        "enabled": true,
        "mode": "full",
        "appendSummary": true,
        "generateCertificate": true,
        "generateReport": true
      }
    }
  }
}

Result: Accessibility tags + summary + certificate + detailed report (all available on-demand)

Example 4: Template Validation (Designer Mode)

{
  "vpdf": {
    "templateName": "SalesOrder",
    "templateSettings": {
      "section508Accessibility": {
        "enabled": true,
        "mode": "optimized",
        "marginAnnotations": true
      }
    }
  }
}

Result: Accessibility tags + visual margin annotations (shows pass/warn/fail status on PDF for template builders)

Override Per-Document (API)

Enable/disable for specific documents via Dispatcher API:

// Enable with default settings
const response = await fetch('/api/render', {
  method: 'POST',
  body: JSON.stringify({
    templatePath: 'Invoice.vpdf',
    payloadPath: 'invoice-001.json',
    options: {
      features: {
        section508Accessibility: true
      }
    }
  })
});

// Or disable for a specific document
const response = await fetch('/api/render', {
  method: 'POST',
  body: JSON.stringify({
    templatePath: 'Invoice.vpdf',
    payloadPath: 'invoice-001.json',
    options: {
      features: {
        section508Accessibility: false
      }
    }
  })
});

What It Tags

Section 508 tagging recognizes and marks:

ElementWhat It Does
HeadingsMarks "Invoice Details" as a heading (screen readers say "heading level 2")
ListsMarks bullet points as lists (screen readers say "list with 5 items")
TablesMarks columns/rows/headers (screen readers say "row 2, column 3")
ImagesMarks images (requires alt-text in your data)
FormsMarks text boxes and buttons (requires labels in your data)
Document StructureMarks entire PDF as tagged (tells screen readers: "this is accessible")

PDF/UA: What Gets Validated

PDF/UA (ISO 14289-1) is the international standard for universally accessible PDFs. It extends basic accessibility tagging with structural rules that screen readers, assistive technology, and compliance auditors rely on.

When section508Accessibility is enabled, the Vault Engine runs the following validations on every rendered document before the PDF leaves the rendering pipeline:

ValidationRuleImpact if Failed
Document tagged/MarkInfo dictionary present with Marked: trueFlagged as non-compliant
Heading hierarchyH1H2H3 must not skip levelsLogged as a warning in audit trace
Table headersEvery <Table> must include <TH> scope attributesFlagged in accessibility report
Alt text on imagesEvery <Figure> must carry an Alt attributeLogged as a warning
Natural reading orderTag tree must match visual reading orderStructural check enforced by engine
Language declaration/Lang entry required in the document catalogAuto-injected from templateSettings.locale
Accessible fontsAll fonts must be embedded (not referenced externally)Render fails if a font cannot be embedded

Failures and warnings are written to the accessibility trace in AuditLogs/accessibility/ and — if appendSummary: true — summarised on the appended summary page in the PDF itself.

Validation vs. Tagging

Tagging adds the structure. Validation checks it is correct. Both happen automatically at render time. You do not need to run a separate tool or post-process the PDF.

Test It Works

Quick Test

  1. Download your PDF
  2. Open in Adobe Acrobat Reader
  3. Go to ToolsAccessibilityCheck Document
  4. Should see: "✓ Tagged PDF"

With a Real Screen Reader

Free options to test:

  • Windows: NVDA (https://www.nvaccess.org/) - Free, open-source
  • Mac: VoiceOver (built-in - press Cmd+F5)
  • Online Reader: Browse the PDF with NVDA/VoiceOver enabled

The PDF should read naturally without you seeing garbled text.

When Customers Need It

Required By Law

  • U.S. Government: All government documents must be Section 508 compliant
  • Public Universities: Many state laws require it
  • Publicly Traded Companies: SEC requires accessible investor documents
  • Government Contractors: Pre-requisite for doing business

Required By Contract

  • Enterprise Customers: Many require Section 508 compliance in procurement
  • Healthcare: HIPAA documents need to be accessible
  • Finance: SOX-compliant docs often require Section 508 too

Good Practice

  • Any Public Document: If humans might read it, accessibility helps everyone
  • Internal Policies: Sets organizational compliance standard
  • Batch Processing: Ensures consistency across document library

Common Questions

Q: Will it make my PDFs bigger?
A: No, only adds ~500 bytes per document.

Q: Will it slow down rendering?
A: Adds about 2-3 milliseconds (imperceptible to users).

Q: Does it require me to add alt-text?
A: VaultPDF automatically tags structure. Alt-text comes from your template data (describe images in your JSON payload).

Q: Can I enable it just for some PDFs?
A: Yes - set in template, or override per-document via API.

Q: What if my PDF generation fails?
A: VaultPDF tries to tag and continues if it fails (non-blocking).

Next Steps

  1. ✅ Enable section508Accessibility: true in your template
  2. ✅ Download a test PDF from the template
  3. ✅ Verify with Adobe Acrobat Reader (Tools → Accessibility → Check)
  4. ✅ Test with NVDA screen reader (free download)
  5. ✅ Deploy to production

Done! Your PDFs are now accessible.

Performance

MetricValue
Tagging Overhead+2-3ms per render
PDF Size Increase+50-200 bytes
Screen Reader ImpactNone (improves usability)
Batch ProcessingLinearly scalable
License Verification<100ms cache hit

Understanding the Output Files

What Gets Generated

SettingOutputWhereSizeWhen
enabled: trueTagged PDFMain document+50-200 bytesAlways
appendSummary: trueSummary pageAppended to PDF+1-2 pagesAlways
generateCertificate: trueCertificate PDFSharePoint Reports/~75-100 KBOn-demand
generateReport: trueDetailed reportSharePoint Reports/~150-200 KBOn-demand
marginAnnotations: trueVisual markersAs PDF annotations+0.2-0.5 MBAt render time

Where files are stored:

  • Tagged PDF + Summary: Main document (immediate)
  • Certificates & Reports: SharePoint Reports/ folder (generated on-demand)
  • Trace data: SharePoint AuditLogs/ folder (internal compliance archive)

Output Examples

Default (summary appended to PDF):

Invoice.pdf (2.1 MB) + 1-page accessibility summary

With certificate generation:

Invoice.pdf (2.1 MB) + summary appended
Invoice.section508.certificate.pdf (85 KB) — Generated on-demand

With full audit (certificate + detailed report):

Invoice.pdf (2.1 MB) + summary appended
Invoice.section508.certificate.pdf (85 KB) — Generated on-demand
Invoice.section508.report.pdf (175 KB) — Generated on-demand

Premium Features in TemplateSettings

Three premium features can be configured in templateSettings:

FeatureSettingPurposeLicense
Accessibilitysection508AccessibilityAdd PDF accessibility tags with optional certificate/report generationBusiness+
XMP MetadataxmpMetadataEmbed searchable metadata in PDFBusiness+
Audit TrailexplainDocumentGenerate render trace + audit reportsBusiness+

All three are license-gated — without the appropriate license tier, these settings are ignored with a console warning.

Enable multiple features together:

{
  "vpdf": {
    "templateSettings": {
      "section508Accessibility": {
        "enabled": true,
        "generateCertificate": true
      },
      "xmpMetadata": true,
      "explainDocument": true
    }
  }
}

Storage & File Organization

When section508Accessibility is enabled, VaultPDF creates files in two locations:

User-Facing Outputs (Reports/ folder)

Downloadable by end-users in SharePoint:

Reports/
├── accessibility/
│   ├── Invoice_001.section508.certificate.pdf  (if generateCertificate: true)
│   └── Invoice_001.section508.report.pdf       (if generateReport: true)

System Archive (AuditLogs/ folder)

Internal compliance records (typically 90-day retention):

AuditLogs/
└── accessibility/
    └── Invoice_001.section508.trace.json       (~30-50 KB)

Trace files enable:

  • ✅ On-demand certificate/report regeneration
  • ✅ Verification that PDFs weren't modified
  • ✅ Compliance audit trail
  • ✅ Deterministic audits (same PDF = same results)

License Information

  • Feature Name: section508Accessibility
  • Available On: Business, Enterprise plans
  • Trial Plan: Not included (contact sales)
  • On-Demand: Cannot be enabled without license
  • Verification: Check using /api/license/features/categorized
curl -H "Authorization: Bearer $LICENSE_KEY" \
  https://your-vaultpdf.azurewebsites.net/api/license/features/categorized | jq '.section508Accessibility'

Troubleshooting

Tagging Not Applied

Problem: PDF doesn't contain /MarkInfo after render

Solutions:

  1. Verify section508Accessibility: true in request
  2. Check license includes feature: GET /api/license/features/categorized
  3. Confirm render returned HTTP 200 (not error PDF)
  4. Check audit logs for feature rejection reason
# Verify license
curl -X POST https://your-vaultpdf.azurewebsites.net/api/render \
  -H "Content-Type: application/json" \
  -d '{
    "templatePath": "...",
    "options": { "features": { "section508Accessibility": true } }
  }' \
  -w "HTTP %{http_code}\n"

Screen Reader Not Detecting Structure

Problem: Screen reader reads PDF as unstructured content

Solutions:

  1. Verify tagging was applied (check for /MarkInfo)
  2. Check source data has proper semantic structure (headings, lists, tables)
  3. Ensure fonts are embedded and text is selectable (not scanned image)
  4. Test with latest screen reader version

Large PDF Size After Tagging

Problem: PDF file size increased significantly

Solutions:

  1. This is normal; tagging adds ~50-200 bytes for structure
  2. If increase is >1MB, likely causes: XMP metadata also enabled (use compression)
  3. Consider enabling automatic cleanup: features.stripUnusedObjects: true

On this page