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

# 6. `--imposition=PLAN`

```
java -jar java-epic-cli.jar --imposition=plan.json
java -jar java-epic-cli.jar --imposition=s3://bucket/plans/run42.json
```

Lays artwork out onto a sheet according to a JSON plan (local path or S3 URL). The plan can
name its own sheet source and destination, so the plan file is often the only argument. A
`--create=WxH` in the command supplies a blank base sheet when the plan doesn't.

## Plan reference

Top level:

| Field | Type | Meaning |
|---|---|---|
| `width`, `height` | number (inches) | Blank-sheet size, used when no `file` is given. |
| `file` | string | Base sheet PDF (path or S3 URL). Optional. |
| `destination` | string | Output path or S3 URL. Optional (positional `[output]` also works). Becomes a `.zip` when `flow_layouts` are present. |
| `rotation` | 0/90/180/270 | Rotate the finished sheet. |
| `mirror` | bool | Mirror the finished sheet. |
| `force_width`, `force_height`, `preview` | bool | Layout behavior switches (force a dimension; preview rendering). |
| `pdf_documents` | array | Artwork placements — see below. |
| `flow_layouts` | array | Flow-layout blocks — see below. |
| `registration_marks` | array | Registration marks to draw. |
| `print_rotation` | array | Per-run print-rotation entries: `index`, `subindex`, `color_name`, `alternate_color_name`. |
| `metadata` | array | `{key, value}` pairs stamped on the output. |

**`pdf_documents[]` placement entries:**

| Field | Meaning |
|---|---|
| `file` | The artwork PDF to place (path or S3). |
| `bounding_box` | Where it lands on the sheet (rectangle: x/y/width/height). |
| `bounding_block` | Optional outer block the placement is aligned within. |
| `rotation`, `mirror` | Per-placement transform. |
| `slug` | Optional slug line: `offset_x`, `offset_y`, `rotation`, `color`. |
| `border` | Optional border: `thickness` (pt, default 0.25), `color` (`cmyk(...)` string). |
| `recolor` | Optional map of source separation name → `{name, c, m, y, k}` — renames that plate **in this placement** as it is drawn onto the sheet (split-screen recoloring: the same art can appear twice with different ink names). An entry naming a separation the source PDF doesn't have aborts with **exit 3** and a message listing the separations the file actually contains. |

**`flow_layouts[]`** — names/numbers runs (team personalization). Each block:

| Field | Meaning |
|---|---|
| `id` | Block identifier. |
| `file` | Optional artwork the block flows around/with. |
| `limit` | Cap on entries per block. |
| `constraints` | `{width, height}` — cell constraints (inches). |
| `margins` | `{top, left}`. |
| `division_text`, `subdivision_text`, `name_text`, `text` | Text specs (below). |
| `teams` | The data: `{id, division, subdivision, name, members[]}` per team. |
| `flow_layouts` | Nested child blocks. |

Text spec (`Text`): `values[]`, `font` (name/size), `color` (default
`cmyk(0.0,0.0,0.0,100.0)`), `stroke_color` (default `none`), `stroke_width`, `overflow`
(default `wordwrap`), `transform` (e.g. case transform, default `none`), `align` (default
`center`), `sort`, and optional `warp`:

```json
"warp": { "style": "arc", "bend": 16.5 }
```

`bend` is the Illustrator Warp > Arc percentage, −100..100, negative arches down. Arched
text is emitted as **outlined vector paths** (never live text).

**Skip reporting:** if any flow-layout team cannot fit on the sheet, a JSON report listing
the skipped teams is printed to stdout. A silent run means nothing was skipped.
