O problema com PDFs em produção
A maioria dos PDFs que chegam nas mãos dos desenvolvedores são um caos de tags, metadados ausentes e estrutura de documento praticamente inexistente. Isso acontece porque a ferramenta de geração mais comum no mercado — aquelas bibliotecas de conversão HTML para PDF que todo mundo usa — otimiza para aparência visual, não para semântica. O resultado é um arquivo que parece certo mas que não lê corretamente nem para máquinas nem para leitores de tela. Já perdi tempo demais tentando corrigir PDFs que vieram de sistemas legados onde alguém configurou o conversor sem ajustar margens, hierarquia de cabeçalhos ou fluxo de texto. A página 3 às vezes aparece antes da página 2 quando você extraí o conteúdo. Isso não é um bug, é o comportamento padrão quando o PDF não tem ordem de leitura definida.
Como gerar um codigo limpo pdf na prática
O processo começa antes de qualquer conversão. Você precisa estruturar o HTML de origem corretamente. A regra mais importante é usar elementos semânticos de verdade — headings na ordem correta, tags section e article, listas quando for apropriado. Não adianta aplicar estilos CSS depois se a marcação base está errada. A maioria das ferramentas de geração de PDF lê a árvore DOM como referência para a estrutura do arquivo final. Quando eu configuro um projeto novo, o primeiro passo é definir a estrutura do documento com cabeçalhos H1 a H3 seguindo uma hierarquia lógica, não estética. Depois aplico CSS específico para impressão com @media print, definindo quebras de página apenas onde fizer sentido — nunca quebre dentro de uma tabela ou figuras complexas. O atributo page-break-inside: avoid resolve metade dos problemas que vejo em documentos gerados automaticamente.
Para a conversão em si, há duas abordagens principais. A primeira usa bibliotecas como Puppeteer com printToPDF, que renderiza via Chromium e produz resultados consistentes. A segunda usa bibliotecas como pdfmake ou wkhtmltopdf, que têm comportamentos diferentes em relação a floats e posicionamento absoluto. Eu prefiro Puppeteer porque o navegador já implementa o padrão CSS que eu preciso, mas isso depende do seu setup. Um problema específico que encontrei recentemente envolveu um PDF gerado a partir de relatórios com gráficos SVG embutidos. O conversor padrão incluía o SVG como imagem rasterizada em vez de como vetor, o que tornava o texto do gráfico não selecionável e aumentava o tamanho do arquivo em cerca de 400%. A solução foi interceptar o SVG antes da conversão, extrair o texto como camadas de texto sobrepostas usando uma função customizada e então injetar essas camadas no documento PDF. Leva cerca de 30 segundos a mais por relatório, mas o arquivo final ficou legível e com metade do tamanho.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Verificação e validação
Depois de gerar o PDF, você precisa verificar se a estrutura está correta. O PAC2 (PDF Accessibility Checker) é a ferramenta padrão da indústria para isso. Ele analisa tags de documento, ordem de leitura, contraste de cores e metadados. Um PDF que passa no PAC2 com zero erros já está muito acima da média do que eu vejo sendo entregue em projetos reais. Também é útil extrair o texto do PDF e colar num editor de texto puro. Se a sequência de palavras não faz sentido — trechos cortados no meio da frase, parágrafos misturados, tabelas com colunas embaralhadas — a estrutura de leitura do PDF está incorreta, independentemente de como ele aparece visualmente.
O PDF/UA é o padrão mais rigoroso para acessibilidade em documentos eletrônicos. Se seu público inclui leitores de tela ou seu setor exige conformidade regulatória, esse é o caminho. Caso contrário, garantir uma estrutura de tags básica e metadados corretos já resolve a maior parte dos problemas no dia a dia.
O que funciona e o que não funciona
Existem limitações reais que todo mundo ignorar ao começar. Conversão de PDFs scanneados nunca será código limpo — sem OCR de qualidade, o arquivo é apenas uma imagem com extensão errada. Ferramentas como Tesseract ajudam mas exigem tratamento manual, especialmente para documentos com tabelas complexas ou colunas múltiplas. Outro ponto importante: PDFs com formulários interativos preenchidos programaticamente frequentemente perdem a estrutura de tags durante o preenchimento dinâmico. Se você gera PDFs com dados vindos de API, certifique-se de reconstruir as tags após o preenchimento, não confiar que elas sobrevivem automaticamente ao processo.
Eu já vi equipes inteiras gastarem semanas tentando "limpar" PDFs gerados por ERPs legtimados usando conversões batch. O ganho real vem da correção na fonte — alterar o template ou o gerador original em vez de tentar remendar o arquivo final. Isso elimina o problema raiz em vez de tratar o sintoma. Para quem quer apenas extrair texto limpo de PDFs existentes sem reconstruir tudo, bibliotecas como PyPDF2 ou pdfplumber funcionam bem para documentos bem estruturados. Para documentos malformados, nenhuma biblioteca resolve magicamente — o texto extraído será o que o arquivo permite, não o que você esperaria.