Concepts

Tipos de Entrada

Formatos suportados para conversão em PDF - HTML, DOCX, Markdown, XML, CSV, JSON

Tipos de Entrada

O RenderHub suporta múltiplos formatos de entrada para conversão em PDF. Escolha o formato que melhor se adapta ao seu caso de uso.

Formatos Suportados

FormatoTipoMelhor ParaTamanho Máx.
HTMLhtmlConteúdo web, layouts customizados10 MB
DOCXdocxDocumentos Word existentes25 MB
MarkdownmarkdownDocumentação, artigos, READMEs5 MB
XMLxmlDados estruturados, notas fiscais10 MB
CSVcsvTabelas, relatórios, exportações5 MB
JSONjsonAPIs, dados estruturados5 MB

HTML

O formato mais poderoso e flexível para criar PDFs personalizados.

Quando Usar

Melhor para:

  • Layouts customizados com CSS
  • Conteúdo web existente
  • Design pixel-perfect
  • Gráficos e visualizações

Exemplo Básico

const html = `
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <style>
      body {
        font-family: Arial, sans-serif;
        margin: 40px;
      }
      h1 {
        color: #2563eb;
        border-bottom: 2px solid #2563eb;
        padding-bottom: 10px;
      }
      .highlight {
        background: #fef3c7;
        padding: 2px 6px;
      }
    </style>
  </head>
  <body>
    <h1>Relatório de Vendas</h1>
    <p>Vendas totais: <span class="highlight">R$ 45.000,00</span></p>
  </body>
</html>
`;

const response = await axios.post('https://renderhub.com/api/v1/render', {
  mode: 'CONVERT',
  input_type: 'html',
  data: html
}, {
  headers: { 'Authorization': `Bearer ${API_KEY}` }
});

CSS Suportado

O RenderHub suporta a maioria das propriedades CSS modernas:

<style>
  /* Layout */
  .container { display: flex; justify-content: space-between; }
  .grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }

  /* Tipografia */
  @import url('https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap');
  body { font-family: 'Roboto', sans-serif; }

  /* Cores e Fundos */
  .header { background: linear-gradient(to right, #3b82f6, #2563eb); }
  .box { border: 1px solid #e5e7eb; border-radius: 8px; }

  /* Quebra de Página */
  .page-break { page-break-after: always; }
  .no-break { page-break-inside: avoid; }

  /* Impressão */
  @media print {
    .no-print { display: none; }
  }
</style>

HTML com Gráficos

<html>
  <head>
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
  </head>
  <body>
    <canvas id="chart"></canvas>
    <script>
      new Chart(document.getElementById('chart'), {
        type: 'bar',
        data: {
          labels: ['Jan', 'Fev', 'Mar'],
          datasets: [{
            label: 'Vendas',
            data: [12, 19, 3]
          }]
        }
      });
    </script>
  </body>
</html>

DOCX

Converta documentos Microsoft Word existentes em PDF.

Quando Usar

Melhor para:

  • Migrar documentos Word para PDF
  • Contratos e documentos legais
  • Relatórios criados no Word
  • Preservar formatação complexa

Exemplo

const fs = require('fs');

// Ler arquivo .docx
const docxBuffer = fs.readFileSync('contrato.docx');
const docxBase64 = docxBuffer.toString('base64');

const response = await axios.post('https://renderhub.com/api/v1/render', {
  mode: 'CONVERT',
  input_type: 'docx',
  data: docxBase64
}, {
  headers: { 'Authorization': `Bearer ${API_KEY}` }
});

// Salvar PDF
const pdfBuffer = Buffer.from(response.data.pdf_base64, 'base64');
fs.writeFileSync('contrato.pdf', pdfBuffer);

Formatação Preservada

  • ✅ Estilos de texto (negrito, itálico, sublinhado)
  • ✅ Fontes customizadas
  • ✅ Listas numeradas e com marcadores
  • ✅ Tabelas com bordas e cores
  • ✅ Imagens incorporadas
  • ✅ Cabeçalhos e rodapés
  • ✅ Quebras de página
  • ⚠️ Macros e campos dinâmicos (removidos)

Markdown

Converta Markdown em PDFs formatados com destaque de sintaxe.

Quando Usar

Melhor para:

  • Documentação técnica
  • READMEs do GitHub
  • Artigos e posts de blog
  • Anotações e wikis

Exemplo

const markdown = `
# Guia de Instalação

## Pré-requisitos

Antes de começar, você precisa ter instalado:

- Node.js 18+
- npm ou yarn

## Instalação

\`\`\`bash
npm install meu-pacote
\`\`\`

## Configuração

Crie um arquivo \`.env\`:

\`\`\`env
API_KEY=sua_chave_aqui
PORT=3000
\`\`\`

## Uso

\`\`\`javascript
const pkg = require('meu-pacote');

pkg.init({
  key: process.env.API_KEY
});
\`\`\`

## Recursos

- [Documentação](https://docs.example.com)
- [GitHub](https://github.com/user/repo)

> **Nota**: Este pacote requer Node.js 18 ou superior.
`;

const response = await axios.post('https://renderhub.com/api/v1/render', {
  mode: 'CONVERT',
  input_type: 'markdown',
  data: markdown
}, {
  headers: { 'Authorization': `Bearer ${API_KEY}` }
});

Sintaxe Suportada

# Cabeçalho 1
## Cabeçalho 2
### Cabeçalho 3

**Negrito** e *itálico* e ***ambos***

- Lista não ordenada
- Item 2
  - Subitem

1. Lista ordenada
2. Item 2

[Link](https://example.com)

![Imagem](https://example.com/image.png)

`código inline`

\`\`\`javascript
// Bloco de código com highlight
const x = 10;
\`\`\`

> Citação em bloco

| Coluna 1 | Coluna 2 |
|----------|----------|
| A        | B        |

---

~~Riscado~~

XML

Converta XML em PDF com templates customizados.

Quando Usar

Melhor para:

  • Notas fiscais eletrônicas (NF-e)
  • Dados estruturados
  • Arquivos de configuração
  • Exportações de sistemas legados

Exemplo: Nota Fiscal

const xml = `
<?xml version="1.0" encoding="UTF-8"?>
<nfe>
  <infNFe>
    <ide>
      <nNF>123456</nNF>
      <dhEmi>2024-01-15T10:30:00</dhEmi>
    </ide>
    <emit>
      <xNome>Empresa Emitente LTDA</xNome>
      <CNPJ>12.345.678/0001-99</CNPJ>
    </emit>
    <dest>
      <xNome>Cliente Destinatário</xNome>
      <CPF>123.456.789-00</CPF>
    </dest>
    <det nItem="1">
      <prod>
        <xProd>Notebook Dell</xProd>
        <qCom>1</qCom>
        <vUnCom>3500.00</vUnCom>
      </prod>
    </det>
    <total>
      <vNF>3500.00</vNF>
    </total>
  </infNFe>
</nfe>
`;

const response = await axios.post('https://renderhub.com/api/v1/render', {
  mode: 'CONVERT',
  input_type: 'xml',
  data: xml,
  // Opcional: XSL para transformação
  xsl_template: xslStylesheet
}, {
  headers: { 'Authorization': `Bearer ${API_KEY}` }
});

CSV

Converta tabelas CSV em PDFs formatados.

Quando Usar

Melhor para:

  • Relatórios tabulares
  • Exportações de planilhas
  • Dados de banco de dados
  • Listas e inventários

Exemplo

const csv = `
Nome,Email,Departamento,Salário
João Silva,joao@empresa.com,TI,R$ 8.000
Maria Santos,maria@empresa.com,RH,R$ 7.500
Pedro Costa,pedro@empresa.com,Vendas,R$ 6.000
Ana Oliveira,ana@empresa.com,Marketing,R$ 7.000
`;

const response = await axios.post('https://renderhub.com/api/v1/render', {
  mode: 'CONVERT',
  input_type: 'csv',
  data: csv,
  options: {
    // Opções de formatação
    table_style: 'striped',  // 'striped', 'bordered', 'minimal'
    header_color: '#2563eb',
    font_size: 12
  }
}, {
  headers: { 'Authorization': `Bearer ${API_KEY}` }
});

Customização de Tabela

{
  input_type: 'csv',
  data: csvData,
  options: {
    table_style: 'striped',      // Linhas alternadas
    header_color: '#1e40af',     // Cor do cabeçalho
    header_text_color: '#ffffff', // Texto do cabeçalho
    border_color: '#e5e7eb',     // Cor das bordas
    font_size: 10,               // Tamanho da fonte
    page_orientation: 'landscape' // Paisagem para tabelas largas
  }
}

JSON

Converta dados JSON em PDF formatado.

Quando Usar

Melhor para:

  • Respostas de API
  • Dados estruturados
  • Logs e debug
  • Exportações de banco de dados

Exemplo: Array de Objetos

const jsonData = {
  relatorio: 'Vendas Mensais',
  periodo: '2024-01',
  vendas: [
    {
      data: '2024-01-15',
      cliente: 'Empresa A',
      produto: 'Licença Pro',
      valor: 1500.00
    },
    {
      data: '2024-01-20',
      cliente: 'Empresa B',
      produto: 'Licença Enterprise',
      valor: 5000.00
    }
  ],
  total: 6500.00
};

const response = await axios.post('https://renderhub.com/api/v1/render', {
  mode: 'CONVERT',
  input_type: 'json',
  data: JSON.stringify(jsonData),
  options: {
    format: 'table',  // 'table', 'tree', 'pretty'
    highlight: true   // Syntax highlighting
  }
}, {
  headers: { 'Authorization': `Bearer ${API_KEY}` }
});

Formatos de Visualização

1. Tabela (format: 'table')

┌──────────┬───────────┬─────────────────────┬──────────┐
│ Data     │ Cliente   │ Produto             │ Valor    │
├──────────┼───────────┼─────────────────────┼──────────┤
│ 01/15/24 │ Empresa A │ Licença Pro         │ R$ 1.500 │
│ 01/20/24 │ Empresa B │ Licença Enterprise  │ R$ 5.000 │
└──────────┴───────────┴─────────────────────┴──────────┘

2. Árvore (format: 'tree')

relatorio: Vendas Mensais
periodo: 2024-01
vendas:
  [0]:
    data: 2024-01-15
    cliente: Empresa A
    produto: Licença Pro
    valor: 1500.00
total: 6500.00

3. Pretty (format: 'pretty')

{
  "relatorio": "Vendas Mensais",
  "periodo": "2024-01",
  "vendas": [...]
}

Comparação de Formatos

RecursoHTMLDOCXMarkdownXMLCSVJSON
Layout customizado⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Facilidade de uso⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Dados tabulares⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Formatação rica⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Dados estruturados⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐

Melhores Práticas

HTML

// ✅ Bom: CSS inline ou em <style>
const html = '<style>h1{color:blue}</style><h1>Título</h1>';

// ❌ Evite: CSS externo (pode falhar)
const html = '<link rel="stylesheet" href="external.css">';

DOCX

// ✅ Bom: Arquivo local ou buffer
const buffer = fs.readFileSync('doc.docx');

// ❌ Evite: URLs remotas (não suportado)
const url = 'https://example.com/doc.docx';

Markdown

// ✅ Bom: Use ``` para blocos de código
const md = '```javascript\nconst x = 1;\n```';

// ✅ Bom: Imagens podem ser URLs ou base64
const md = '![Logo](https://example.com/logo.png)';

CSV

// ✅ Bom: UTF-8 com BOM para acentos
const csv = '\ufeffNome,Descrição\nJoão,Café';

// ✅ Bom: Use vírgula como separador
const csv = 'A,B,C';

// ⚠️ Cuidado: Ponto-e-vírgula (especifique delimiter)
const csv = 'A;B;C';

Limitações

FormatoTamanho Máx.Limitações
HTML10 MBJavaScript executado com timeout de 5s
DOCX25 MBMacros e scripts removidos
Markdown5 MBSem plugins/extensões customizadas
XML10 MBXSL timeout de 10s
CSV5 MBMáximo 10.000 linhas
JSON5 MBMáximo 5 níveis de aninhamento

Próximos Passos

On this page