# Prévia e exportação PDF

Revise o snapshot atual e gere o PDF pelo backend com a mesma árvore usada no editor.

[Abrir a versão HTML](https://rhizzalab.com/docs/features/pdf-export)

## A saída parte do documento atual

Editor, prévia paginada e PDF compartilham a árvore de documento e o motor de renderização. A exportação não reconstrói o relatório a partir de um template paralelo.

* **Snapshot: Congela a revisão** — Documento, dados validados, definições e tema da sessão.

* **Preflight: Expõe bloqueios** — Valida compatibilidade e conteúdo sensível antes da saída.

* **Confirmação: Registra a decisão** — O usuário confirma os avisos aplicáveis.

* **PDF: Renderiza no servidor** — A saída é gerada a partir do snapshot confirmado.

## Habilite a capacidade por escopo

Inclua `export:pdf` na emissão do token somente em telas onde o usuário pode realmente exportar. Sem o escopo efetivo, a ação não deve ser apresentada como disponível.

```ts
const token = await reports.issueEditorToken({
  userId: user.id,
  reports: [
    {
      reportType: "acme.relatorio-mensal",
      scopes: ["editor:read", "export:pdf"],
    },
  ],
})
```

## Trate avisos do preflight

A política do relatório pode classificar campos internos como sensíveis. O fluxo de preflight exige reconhecimento explícito quando esses valores fazem parte da saída; texto livre do modelo não altera essa política.

> **Atenção: Não automatize a confirmação**
>
> Mostre os avisos ao usuário e confirme apenas depois de uma ação consciente. A confirmação pertence à tentativa de exportação atual.

## Falhas são recuperáveis

* `AUTH_REQUIRED`: renove o token pelo backend do host.

* `RATE_LIMITED`: aplique espera e evite cliques repetidos.

* `CONFLICT`: recrie a prévia a partir da revisão atual.

* `PRIMITIVES_UNSUPPORTED`: atualize o SDK antes de tentar outra saída.

* `INTERNAL`: preserve o `requestId` quando disponível e ofereça nova tentativa.

Consulte a [referência de erros](https://rhizzalab.com/docs/reference/errors) para a taxonomia completa.
