# dompdf Investigation Requirement

## Document Context

This investigation requirement is governed by `requirements/environment.md` and `requirements/top-level.md`.
No fallback behavior is permitted without explicit instruction.

## Purpose

Determine whether `dompdf` is suitable for generating production-quality mailshot PDFs from the sample templates:

- `samples/renewal_draft.html`
- `samples/invoicing.html`

## Inputs

1. Template sources:
   - `samples/renewal_draft.html`
   - `samples/invoicing.html`
2. Representative field values for all template tokens.
3. FECA logo asset content equivalent to `pdf_asset('FenEdgeLogoOrange')`.

## Investigation Route

1. Render-ready normalization
   - Produce render-ready HTML for each sample by replacing template tokens/macros with fixed test data.
   - Ensure `pdf_asset('FenEdgeLogoOrange')` resolves to concrete HTML/image content.

2. dompdf spike execution
   - Provide an executable spike script in `working/codex-spikes/` (agent artefacts, not user operational scripts) that:
     - loads each normalized template,
     - renders via dompdf,
     - writes PDFs to `working/`,
     - fails with non-zero exit code on render errors.

3. Structured suitability checks
   - `renewal_draft.html` checks:
     - watermark (`position: fixed`, `transform`, transparency)
     - table borders, spacing, and mm-based layout
     - logo placement and title/header integrity
   - `invoicing.html` checks:
     - line-break behavior from macro expansion
     - currency/symbol rendering (`£`, `✉`, `☎`)
     - emoji contact symbols such as `📞`/`📧` must be normalized to PDF-safe symbols (`☎`/`✉`) and pinned to `DejaVu Sans` before Dompdf rendering.
     - spacing, wrapping, and pagination

4. Baseline comparison
   - Generate browser print-to-PDF baselines for both templates.
   - Compare dompdf output to browser baseline using a fixed checklist.

5. Decision criteria
   - `Suitable`: all critical checks pass with no blocking defects.
   - `Suitable with constraints`: non-blocking defects exist; template constraints/workarounds are documented.
   - `Not suitable`: one or more blocking defects remain.

6. Contingency (only if explicitly instructed)
   - Evaluate one alternative renderer against the same inputs/checklist for comparison.

## Deliverables

1. Rendered HTML artefacts for both sample templates.
2. dompdf-generated PDFs for both sample templates.
3. Completed suitability checklist with pass/fail evidence.
4. Recommendation outcome: suitable / suitable with constraints / not suitable.
5. Documented required template constraints (if any).

## Execution Notes

- Investigation outputs should be isolated under `working/`.
- Any generated test artefacts must be cleaned up by the test process when they are no longer needed.
