*Epic CLI Manual — [index](../MANUAL.md)*

# 11. `--backers=ART.PDF`

```
java -jar java-epic-cli.jar --backers=art.pdf \
    --plates="[!]spot('<Name>',C,M,Y,K)[±offset][@spot|@area][,...]" \
    [--output=FILE|DIR] [--dpi=300] [--threshold=0.5] [--no-smooth]
```

Builds the **non-displayable production file**: the art untouched, plus a `PRODUCTION_ONLY`
layer of 100%-tint spot backer plates with overprint on (adhesive, underbase, clear — the
plates a press needs that the customer never sees). The jar executes geometry and swatching;
**the caller carries the plate rules** — `--plates=` is always explicit, per-order policy,
no defaults.

## The plate expression DSL

Each comma-separated expression builds one plate:

| Element | Meaning |
|---|---|
| `spot('<Name>',C,M,Y,K)` | The Separation colorant to emit and its CMYK display alternate (swatch created if the source's AI payload lacks it). Single or double quotes. |
| `±offset` (pt) | Per-side dilation of the geometry: positive spreads, negative chokes, omitted = exact coverage. Reference press numbers: adhesive **+0.5**, underbase **−1.0**, clear **+0.25**. |
| `@geometry` | Default (no `@`): the union of **all painted ink** — vector paint and raster non-alpha, with soft masks, clip paths, and transforms honored; never object bounds. `@spot`: only where that same colorant is painted in the art. `@area`: the full artboard. |
| `!` prefix | Hidden plate — hidden until an operator un-hides the layer in Illustrator and re-saves. Takes effect only when **all** plates are hidden. |

Plates stack in listed order, **bottom to top** — list underbase first for the reference
press stack. The retired 2026-09-04 keyword forms (`--plates=adhesive,...`,
`--adhesive=`/`--underbase=`/`--clear=`) now produce usage errors.

## Geometry and smoothing

Coverage is derived at `--dpi` (default 300) from the rendered alpha of the art. Plate
outlines are **smoothed by default**: the traced pixel staircase is replaced with cubic
Béziers held within 0.2 pt of the traced coverage, corners pinned (the same Schneider fit as
`--vectorize --fit=curves`). When the art's raster content sits below the render dpi, the
tolerance scales with the source's effective resolution (renderDpi/imageDpi, capped 8×) so
coarse pixel blocks smooth instead of reading as geometry. `--no-smooth` keeps the raw
pixel-step polygons.

## Illustrator integration (the AI graft)

When the source is an AI-exported PDF, the `PRODUCTION_ONLY` layer is **grafted natively into
the Illustrator private data** (PieceInfo → Illustrator → Private): Illustrator's Layers
panel shows `PRODUCTION_ONLY` with one child object per plate above the art layer, PieceInfo
preserved, and palette / `%%CMYKCustomColor` swatch entries inserted for any colorant the
payload doesn't already define.

Hidden (`!`) plates with a grafted payload exist **only in that payload** — the PDF stream
carries no paint at all, so no PDF viewer can show them; Illustrator regenerates the paint
when the operator un-hides and re-saves. Without a graftable payload (none / foreign /
already grafted), the fallback is a PDF optional-content `/OFF` span — Ghostscript, Acrobat,
and poppler-splash hide it, but poppler-cairo viewers (evince) paint it, so the fallback is
viewer-dependent and a warning says so. In the fallback the PieceInfo is stripped (also
warned).

## Output and result

Output defaults to `<art>_Production.pdf` beside the input. Exactly one JSON result:
`status`, `source`, `production_pdf`, per-plate `plate`/`colorant`/`offset_pt`/`geometry`/
`hidden`/`contours`/`vertices`, `layer_hidden`, `coverage_bbox_pt`, `warnings`. Warnings are
additive — parse `status`, not warning count. Exit 0 ok, 1 usage, 2 hard fault.

```
java -jar java-epic-cli.jar --backers=45725_lc.pdf \
    --plates="spot('HA Underbase',0,0.5,0.25,0)-1.0,spot('HA Adhesive',0.25,0.5,0,0)+0.5"
```
