Renderize uma tabela HTML com NextPDF Connect
Visão geral
Seção intitulada “Visão geral”Renderize dados tabulares estruturados a partir de uma string contendo uma tabela HTML. add_table sanitiza a entrada com uma allowlist estrita baseada em DOMDocument antes do layout, para que a saída permaneça consistente mesmo quando a marcação de origem varia. Use as ferramentas Core create_pdf, add_table e output_pdf. A tabela é disposta como uma grade de row/column (CSS Tables 3 §3.1).
Instalação
Seção intitulada “Instalação”composer require nextpdf/serverVincule um transporte. A entrada deve incluir uma raiz <table> com linhas <tr> e células <th>/<td>.
Visão conceitual
Seção intitulada “Visão conceitual”add_table aplica uma allowlist fixa de elementos (table, thead, tbody, tfoot, tr, th, td, caption, b, i, u, strong, em, br, p, span). Todos os atributos são removidos de cada elemento — style, class, width, colspan, rowspan, id e os demais. Qualquer tag fora da allowlist é substituída por seu conteúdo de texto. O texto das células usa o estado da fonte ativo no documento, que você define com set_font antes de add_table. O texto é emitido por operadores de exibição de texto na ordem do content stream (ISO 32000-2 §9.4). O mecanismo de layout, e não o CSS inline, decide as larguras das colunas.
Superfície da API
Seção intitulada “Superfície da API”| Ferramenta | Função | Nível de risco |
|---|---|---|
create_pdf | Abrir a sessão | Seguro |
set_font | Definir a fonte do texto das células (opcional, antes de add_table) | Cuidado |
add_table | Sanitizar e dispor a tabela | Cuidado |
output_pdf | Renderizar e retornar o PDF | Aprovação Obrigatória / Revisão (base64) |
O catálogo de ferramentas é a referência oficial. As ferramentas disponíveis dependem do tier instalado.
Exemplo de código — Início rápido
Seção intitulada “Exemplo de código — Início rápido”create_pdf(A4 retrato, título) →document_id.add_tablecom uma string<table>...</table>completa (linha de cabeçalho e linhas de dados).output_pdf→ base64 ou, com umfile_path, uma gravação de arquivo sujeita ao gate.
O cursor avança para a área abaixo da última linha renderizada, deixando espaço para o conteúdo seguinte.
Exemplo de código — Produção
Seção intitulada “Exemplo de código — Produção”Valide o HyperText Markup Language (HTML) antes de enviá-lo. Defina a fonte das células com set_font para obter uma tipografia determinística. Se você depender do padrão, a fonte de saída será dependente da implementação. Para controlar quais ferramentas o host pode chamar, restrinja o registro por meio da política de segurança.
Casos extremos e pegadinhas
Seção intitulada “Casos extremos e pegadinhas”- HTML vazio ou sem tabela. Uma entrada sem
<table>retorna um erro de tabela não renderizável. - Marcação malformada. Tags não balanceadas retornam um erro de parsing; portanto, valide a estrutura primeiro.
- Tabela mais larga que a página. Reduza as colunas, encurte o conteúdo ou mude para a orientação paisagem.
- Overflow. Uma tabela alta flui para uma nova página. Verifique
position.pagena resposta, ou chameadd_pageantecipadamente.
Desempenho
Seção intitulada “Desempenho”Uma tabela pequena renderiza dentro do orçamento e gera uma saída de alguns KB. O perfil é structural. A sanitização é executada em uma única passagem sobre o DOM parseado.
Notas de segurança
Seção intitulada “Notas de segurança”A remoção de atributos é incondicional e não pode ser contornada. Ela protege contra injeção de estilo e de script na marcação das células. Nenhum CSS inline, manipulador de eventos ou URL javascript: sobrevive. A allowlist é a fronteira de confiança; portanto, não trate a saída renderizada como uma reprodução fiel de uma estilização arbitrária da origem.
Conformidade
Seção intitulada “Conformidade”| Declaração | Especificação | Cláusula | reference_id |
|---|---|---|---|
| As tabelas são dispostas como uma grade de células row/column. | CSS Tables 3 | §3.1 | |
| O texto é exibido por operadores de texto na ordem do stream. | ISO 32000-2 | §9.4 |
Contexto comercial
Seção intitulada “Contexto comercial”Não aplicável — todas as ferramentas aqui são Core.
Trecho da matriz de suporte a CSS (apenas Verified)
Seção intitulada “Trecho da matriz de suporte a CSS (apenas Verified)”add_table não executa um mecanismo geral de CSS. O único comportamento de “CSS” é o modelo de grade de tabela fixa: linhas e colunas vêm da estrutura da tabela, e o mecanismo de layout escolhe as larguras. A estilização inline não é suportada por decisão de design, porque os atributos são removidos. Para a cobertura de CSS em nível de mecanismo (fora do Connect), consulte a matriz de suporte a CSS do projeto.
Restrição de streaming de passagem única
Seção intitulada “Restrição de streaming de passagem única”add_table parseia a marcação fornecida em um DOM uma única vez e faz o layout em uma única passagem. Ela não refaz o fluxo com base em folhas de estilo externas. Uma tabela que ultrapassa a página avança para a página seguinte em vez de refazer o fluxo retroativamente.
Orçamento de memória para tabelas grandes
Seção intitulada “Orçamento de memória para tabelas grandes”Tabelas muito grandes mantêm o DOM parseado e as células dispostas em memória durante toda a chamada. Divida conjuntos de dados grandes em várias chamadas a add_table para permanecer dentro do orçamento de pico de memória.
Disponibilidade de transporte
Seção intitulada “Disponibilidade de transporte”| Transporte | Disponível | Observações |
|---|---|---|
| MCP (stdio) | Sim | HTML grande aumenta o frame stdio. |
| REST | Sim | Envie o HTML no corpo da requisição. |
| gRPC | Sim | Unário; aplicam-se os limites de tamanho de mensagem. |
Nível de risco HITL
Seção intitulada “Nível de risco HITL”create_pdf é Seguro; set_font e add_table são Cuidado; output_pdf é Aprovação Obrigatória, rebaixado para Revisão no modo base64. A saída em arquivo continua sendo Aprovação Obrigatória. Consulte output-approval.
Envelope JSON do gate de confirmação
Seção intitulada “Envelope JSON do gate de confirmação”Para saída em base64:
{ "allowed": true }Para saída em arquivo, a chamada retorna o envelope de desafio documentado em output-approval.