Frontends com Vibecoding · Capítulo 30 de 30 · 19 min
Produzir apresentações e PDF com critérios de entrega
Você sai com uma entrega que integra fonte editável, composição, exportação e conferência.
Este capítulo faz parte do curso gratuito Frontends com Vibecoding. Para marcar como concluído e salvar o progresso, abra este capítulo na página do curso.
Um número corrigido uma vez sai certo na página, no PDF e no slide. Basta que o deck, o relatório e o e-mail nasçam como texto versionado no git, o histórico de versões do projeto.
Feito à mão, o mesmo número exige três correções separadas, uma em cada formato. Quem prepara proposta, relatório mensal ou aula com frequência escolhe a ferramenta pelo destino do documento. Três regras decidem se o slide se lê da última fileira da sala.
Para o deck único, feito uma vez, a economia do texto versionado é menor: o ganho aparece quando algo muda depois da primeira versão.
A escolha entre as duas ferramentas de deck se decide pelo destino. Use o Slidev quando quer mostrar código rodando ou hospedar a apresentação numa página, porque ele também gera site. Troque por Marp quando o destino é só o arquivo: ele exporta PDF e o formato do PowerPoint com um comando.
Relatório sobe dois degraus. O Astro (o gerador de site que entrega HTML pronto e só carrega script onde precisa) é a escolha do manual para relatório estático premium e microsite. Ele traz Fonts API para hospedar a fonte no próprio site, CSP (a lista do que a página aceita carregar) embutida e publicação em Cloudflare Workers.
A linha estável em 8 de setembro de 2026 é a 7.3.2, publicada naquele mesmo dia; confira a versão corrente antes de instalar.
O investor update do manual segue essa linha: Astro com MDX (texto com componentes dentro), gráfico em D3 ou ECharts e PDF via Playwright.
A armadilha é carregar um framework (a estrutura que organiza o código do site) inteiro para uma página trimestral.
Quando o arquivo viaja por e-mail e precisa abrir daqui a cinco anos, vale o relatório único auditável e offline. Ele fica em HTML puro com ES Modules (o JavaScript nativo do navegador, sem empacotador), sem dependência para atualizar. O board mensal fechado segue igual: HTML estático, gráfico em D3 ou Observable Plot e CSS de impressão.
Para board, HTML e CSS puro (cartões, scorecards, tabela de variação) costuma vencer o gráfico hiperinterativo. O conselheiro quer o número, a variação e a fonte em dois cliques, sem filtro para arrastar.
Dois refinos de tipografia sustentam isso. A tipografia fluida por clamp() (um tamanho que cresce com a tela dentro de um piso e um teto) evita título gigante no celular e miúdo no telão.
Tabular figures (algarismos de largura igual) alinham toda coluna de número; sem eles o 1 é mais estreito que o 8 e a coluna dança. Sem fonte com essa variante, o plano B é uma monoespaçada só na coluna de número.
O equilíbrio de linha do título, text-wrap: balance, é recente e tem teto por motor. O Chromium balanceia até seis linhas e o Firefox até dez, então ele serve a título e trecho curto.
O text-wrap: pretty do corpo seguia sem Firefox em setembro de 2026, e entra como melhoria progressiva: onde ele não existe, o texto quebra do jeito de sempre.
/* título que cresce com a tela, entre 28px e 56px */
h1 { font-size: clamp(1.75rem, 1rem + 3vw, 3.5rem); }
/* coluna de número: algarismos de largura igual */
td.numero, .scorecard strong { font-variant-numeric: tabular-nums; }
/* título sem linha órfã; corpo sem palavra solta no fim */
h1, h2 { text-wrap: balance; }
p { text-wrap: pretty; }O tema de cor e fonte tem atalho oficial. A skill theme-factory (o pacote de instruções que o agente carrega) do repositório anthropics/skills traz dez temas prontos, cada um com paleta em hex e par de fontes.
Antes de você escolher, o agente mostra um showcase em PDF; depois aplica o tema ao deck, ao documento ou à landing. Se nenhum servir, ele cria um tema novo a partir de uma descrição.
Nenhum tema pronto dispensa a direção do briefing da aula sobre prompt de frontend. Ele resolve paleta e fonte; a hierarquia, o tom e o que fica fora do slide continuam decisão sua. Um Midnight Galaxy num balancete para o conselho fiscal é bonito e errado.
O documento pelo destino: a ferramenta certa para cada saída da web
| Documento | Ferramenta | Escolha quando | Armadilha |
|---|---|---|---|
| Deck com código rodando ou página hospedada | Slidev | você apresenta código ou quer o deck num endereço | colar o parágrafo inteiro no slide |
| Deck que vira só arquivo | Marp | o destino é PDF ou PowerPoint, sem página | entregar PowerPoint achando que o texto segue selecionável |
| Relatório estático premium ou investor update | Astro 6 com MDX | conteúdo trimestral com fonte própria e publicação em Cloudflare Workers | carregar framework inteiro para página que quase não muda |
| Relatório único auditável e offline; board mensal fechado | HTML puro com ES Modules e CSS de impressão | o arquivo viaja por e-mail e precisa abrir daqui a anos | chamar fonte ou gráfico de servidor externo |
| E-mail de produto próprio | React Email | o mesmo time do site cuida do e-mail | testar só no Gmail e esquecer o Outlook |
| E-mail de agência multi-cliente | MJML | dezenas de marcas e o Outlook na lista | ignorar o modo escuro |
| E-mail de quem já pensa em Tailwind | Maizzle | o time escreve classes utilitárias | classe sem equivalente inline no Outlook |
| Tema de cor e fonte para deck, documento ou landing | theme-factory, dez temas prontos | você quer paleta e fonte em minutos, com showcase antes de escolher | deixar o tema decidir a hierarquia do briefing |
Deck, relatório e e-mail têm destinos diferentes, e a ferramenta segue o destino do documento.
Um slide é lido de longe, numa sala com a luz acesa, e três regras decidem se ele se lê. Contraste sobre fundo sólido, no mínimo no nível AA (o piso de contraste entre letra e fundo), sem gradiente atrás do texto.
Corpo a partir de 24px na tela e 36px projetado; títulos de 48 a 72px. Uma ideia por slide, no máximo cinco tópicos; trecho de código com mais de seis linhas vira dois slides. O defeito que mais reprova é o contraste: título sobre foto sem camada sólida some na projeção.
Se a figura ultrapassar a área visível, deslize para os lados. Pelo teclado, foque a figura e use as setas.
O e-mail HTML é o outro documento que sai da web, e o mais hostil: Gmail, Outlook e modo escuro ignoram metade do CSS moderno. Sem ferramenta, o plano B é tabela HTML, fonte de sistema e fundo sólido nos dois modos.
React Email serve o produto próprio, com componentes React (a biblioteca de interface) e o mesmo time do site. A agência com muitos clientes fica com MJML: as tags compiladas para tabela aguentam o Outlook. Quem já pensa em Tailwind (a biblioteca de classes utilitárias) usa Maizzle. A armadilha comum às três é testar só no Gmail claro.
Numa clínica com três sócios, o relatório mensal refeito à mão virou HTML único com CSS de impressão e tabular figures na coluna de receita. O e-mail de confirmação, que sumia no modo escuro do celular, foi para o React Email com fundo sólido nos dois modos.
Instale a theme-factory antes de escolher o tema: npx skills add https://github.com/anthropics/skills --skill theme-factory. Peça ao agente o showcase dos dez temas e escreva o briefing antes de aplicar um.
Revise cada slide com as três regras: fundo sólido, corpo a partir de 24px, uma ideia por slide. Exporte com npx slidev export, e escolha PDF para quem precisa copiar o texto, ou PowerPoint só para quem vai editar, porque nele o texto vira imagem.
Gere o PDF com prova de conformidade fora do caminho da requisição
Um PDF gerado pelo site é um produto entregue, com prova de conformidade a cumprir e risco de operação a controlar. Gerar dentro do caminho da requisição, o pedido que o navegador do cliente faz ao servidor e espera resposta, derruba o portal no dia de maior procura.
Quem envia relatório, balancete ou proposta em PDF a partir de uma página escolhe o gerador pela prova que ele entrega. São oito ferramentas, cada uma com o seu critério e a sua armadilha.
Duas normas respondem a duas perguntas. PDF/UA-1 garante leitura por leitor de tela, com marcação de título, tabela e ordem de leitura. PDF/A-2a garante que o arquivo abra daqui a dez anos, com a fonte embarcada. A PDF/UA-2 (ISO 14289-2:2024) existe, mas o alvo prático de 2026 segue a versão 1, que validadores e Typst tratam com maturidade.
O Typst 0.15 (um compositor de documentos em texto, como um LaTeX moderno) entrega PDF/UA-1 e PDF/A-2a no mesmo arquivo. Quando o resultado não cumpre a norma, ele acusa erro explícito em vez de gerar um PDF silenciosamente não conforme. Traz fontes variáveis e export HTML com MathML (fórmula legível por leitor de tela).
Escolha o Typst quando o relatório precisa provar acessibilidade e arquivamento no mesmo artefato. A armadilha é esperar que ele reproduza a tela pixel a pixel: ele compõe a partir do texto, e o gráfico da tela entra exportado.
Quando o relatório precisa sair idêntico à tela, com gráfico em SVG ou Canvas, use Playwright ou Puppeteer (robôs que abrem a página num navegador real e imprimem). A impressão page.pdf existe só no Chromium.
Duas travas mudam o resultado. Fixe a versão do Chromium no CI (a esteira que testa e publica), porque a atualização do motor muda paginação e fontes. Dispare o PDF só depois de um marcador explícito de estado estável; o evento de load chega antes de o gráfico terminar.
Gotenberg e IronPDF empacotam o mesmo modelo como serviço. Você chama uma API (a porta por onde um sistema pede algo a outro) com o HTML e recebe o arquivo, sem manter Chromium.
Quem renderiza HTML não confiável, enviado por cliente ou colado de fora, precisa do WeasyPrint 69 por causa da CVE-2026-49452 (falha de segurança em catálogo público). A versão traz --output-intent com perfis ICC (a descrição de cor que a gráfica exige) e propriedades lógicas.
PrinceXML 16.2, PDFreactor e Antenna House são o CSS Paged Media (a especificação de página impressa em CSS) comercial para editorial e PDF/A. O PDFreactor roda ECMAScript 2025 via GraalJS e emite ZUGFeRD (a fatura eletrônica embutida no PDF). Pague por eles quando o volume editorial e o suporte contratual justificam a licença.
O paged.js, opção gratuita da mesma família, está em transição de mantenedores com quebras de compatibilidade anunciadas: risco para quem depende dele em produção. Use no protótipo e troque antes de publicar.
No navegador, o jsPDF 4.2.1 corrige path traversal (leitura de arquivo fora da pasta permitida) no build Node. O pdfMake 0.3.11 ganhou setUrlAccessPolicy() contra download de recurso de origem controlada por atacante. Atualizar as duas é segurança, não cosmética. Elas servem ao recibo de uma página; relatório com norma vai para Typst ou navegador fixado.
A escala tem regra única: nunca gere PDF de forma síncrona em servidor de produção, porque o dia de pico trava a fila de requisições. O pedido entra numa fila assíncrona (Kafka, RabbitMQ ou BullMQ, a fila de tarefas do Node) e um trabalhador separado gera o arquivo.
Um orquestrador sobe trabalhadores pelo sinal de backlog (o tamanho da fila), e um pool de navegadores reutilizados atende em vez de abrir um Chromium por pedido. Dois cuidados fecham a esteira: sandbox contra SSRF (o navegador do servidor usado para alcançar a rede interna) e sanitize-html antes do render.
Nos dois caminhos, a fonte fica hospedada no seu servidor e embarcada no arquivo. Chamar a fonte no Google durante a geração vaza o endereço de rede de quem gera, e uma sentença em Munique tratou esse endereço como dado pessoal.
Para ler, preencher e montar PDF em Python, a skill pdf (o pacote de instruções que o agente carrega) do repositório anthropics/skills é a caixa de ferramentas oficial. Ela é source-available e uma das quatro que movem a criação de documentos do Claude.
Instale com npx skills add https://github.com/anthropics/skills --skill pdf e peça ao agente para extrair a tabela do balancete antigo antes de compor o novo.
Laboratório ao vivo: a página que vira PDF
1. A página impressa antes do PDF
Balancete mensal
Resultado do mês e comparação com o anterior
Palavras compridas como responsabilidade e demonstrativo se separam por sílaba nesta coluna estreita.
02/09/2026
Balancete mensal
| Receita | 18.400,00 |
|---|---|
| Custo | 9.115,50 |
| Saldo | 9.284,50 |
não quebra entre páginas
cenário ilustrativo
02/09/2026
Balancete mensal
PDF/UA-1PDF/A-2a
fonte embarcada, sem chamada remota
02/09/2026
arraste o trilho para o lado e veja as três páginas
Suporte: text-wrap pretty no Safari 26; contador de página, separação por sílaba e bloco que não quebra valem em navegador atual. Sem esses recursos as três páginas continuam inteiras, só com a quebra de linha menos caprichada. Ao imprimir esta aula, a mesma marcação vira três páginas de papel.
2. A esteira que não trava o servidor
1
HTML pronto e sanitizado
2
marcador de estado estável
3
fila assíncrona
nunca no caminho da requisição
4
navegador fixado em versão
5
validação PDF/UA-1
Suporte: a esteira é HTML e CSS comuns, sem recurso novo de navegador. Em tela estreita as cinco etapas empilham na ordem, e a seta fica fora do leitor de tela porque é decorativa.
Se a figura ultrapassar a área visível, deslize para os lados. Pelo teclado, foque a figura e use as setas.
Ferramenta, quando e a prova que entrega
| Ferramenta | Quando | Prova que entrega |
|---|---|---|
| Typst 0.15 | relatório que precisa provar acessibilidade e arquivamento no mesmo arquivo | PDF/UA-1 e PDF/A-2a juntos, com erro explícito na não conformidade |
| Playwright ou Puppeteer | relatório idêntico à tela, com SVG ou Canvas; Chromium fixado em versão e marcador de estado estável | fidelidade ao que a tela mostra; norma só com validador externo |
| Gotenberg ou IronPDF | o mesmo modelo de navegador como serviço, sem manter Chromium | a mesma fidelidade, com a operação terceirizada |
| WeasyPrint 69 | HTML de terceiro em Python; a versão 69 é obrigatória pela CVE-2026-49452 | --output-intent com perfil ICC para gráfica |
| PrinceXML 16.2, PDFreactor, Antenna House | editorial e PDF/A comercial; PDFreactor com ECMAScript 2025 via GraalJS e ZUGFeRD | PDF/A e fatura eletrônica embutida, com suporte contratual |
| paged.js | protótipo de CSS Paged Media sem custo | nenhuma para produção: transição de mantenedores e quebras anunciadas |
| jsPDF 4.2.1 e pdfMake 0.3.11 | recibo de uma página gerado no navegador | só a versão corrigida: path traversal no jsPDF e setUrlAccessPolicy() no pdfMake |
| skill pdf (anthropics/skills) | ler, preencher e montar PDF em Python pelo agente | a caixa de ferramentas oficial, source-available |
A prova que a ferramenta entrega decide a escolha; fidelidade à tela e conformidade com norma são provas diferentes.
O critério é o dia de pico. Num escritório de contabilidade cujo balancete sai em PDF pelo portal, cada download disparava um navegador na hora e travava o dia 5. Com a fila assíncrona, o arquivo já está pronto quando o cliente clica, e o validador de PDF/UA-1 anexou a prova na véspera.
Antes de publicar, pergunte ao agente qual das três provas o PDF precisa: conformidade, fidelidade à tela ou recibo simples. A resposta escolhe Typst, Playwright com Chromium fixado, ou jsPDF atualizado, e decide se a fonte fica embarcada e o navegador roda em sandbox, longe da rede interna.
Laboratório visual: produzir apresentações e PDF com critérios de entrega
Fonte editável, composição, exportação e conferência
Escolha seu próximo encontro.
Oficina de cerâmica. Sábado, às 14h. Veja os horários antes de reservar.
Consultar horáriosA versão revisada oferece assunto, horário e uma ação específica. Compare a ordem de leitura e o espaço disponível.
Todos os capítulos de Frontends com Vibecoding
- 01Projetar o briefing, o repertório da marca e o custo de manter
- 02Dirigir o prompt e avaliar a entrega do agente
- 03Escolher a stack e projetar suas dependências
- 04Investigar uma stack e priorizar atualizações
- 05Construir a identidade com tokens, CSS moderno e DESIGN.md
- 06Construir componentes, usar o registro e publicar o catálogo
- 07Projetar uma linguagem de ícones e ilustração
- 08Projetar menus, popovers e modais acessíveis
- 09Adaptar o layout ao celular e ao contêiner
- 10Projetar movimento, assinatura e narrativas por rolagem
- 11Preparar imagens, ícones e vídeo para a web
- 12Construir profundidade e dirigir a montagem de vídeo
- 13Construir formulários e estados de interação
- 14Publicar conteúdo encontrável em vários idiomas
- 15Projetar gráficos e painéis pela decisão
- 16Dimensionar tabelas e organizar o cálculo das métricas
- 17Escolher mapas, diagramas e cenas espaciais
- 18Comparar direção visual em Stripe e Apple
- 19Avaliar busca, conversão e padrões de comércio
- 20Auditar acessibilidade e contraste nos dois temas
- 21Validar desempenho, autenticação e segurança
- 22Planejar a modernização e publicar com reversão
- 23Construir o projeto final, medir a cara de IA e revisar
- 24Comparar modelos e interpretar benchmarks
- 25Calcular custo por tarefa e definir governança
- 26Supervisionar o modelo que opera o computador
- 27Configurar ambiente, skills e o contêiner de contexto
- 28Aplicar direção de arte, UX writing e padrões de código
- 29Construir um aplicativo instalável e resiliente
- 30Produzir apresentações e PDF com critérios de entrega