# `Accrue.InvoiceRenderer`
[🔗](https://github.com/szTheory/accrue/blob/accrue-v1.1.2/lib/accrue/invoice_renderer.ex#L1)

Behaviour + facade for invoice-specific PDF rendering.

This seam is intentionally narrower than `Accrue.PDF`: invoice rendering
starts from `Accrue.Invoices.RenderContext`, not from raw HTML.
That lets Accrue use a native document engine like Rendro by default while
preserving the legacy HTML-based `Accrue.PDF` contract for ChromicPDF and
custom callers.

# `opts`

```elixir
@type opts() :: keyword()
```

# `render`

```elixir
@callback render(Accrue.Invoices.RenderContext.t(), opts()) ::
  {:ok, binary()} | {:error, term()}
```

# `impl`

```elixir
@spec impl() :: module()
```

# `render`

```elixir
@spec render(Accrue.Invoices.RenderContext.t(), opts()) ::
  {:ok, binary()} | {:error, term()}
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
