Enviar um arquivo
  1. base64hub
  2. Ferramentas de arquivo
  3. Base64 para PDF

Base64 para PDF

Cole o Base64 de uma resposta de API, de uma nota fiscal eletrônica ou de um anexo de e-mail, e o PDF abre nesta página com um botão para baixar. A decodificação e a prévia acontecem no seu navegador.

Grátis sem cadastro, sem limites Local nada é enviado Verifica versão, páginas, título, criptografia Atualizado 27 de out. de 2026
Entrada –Saída –Tamanho –

Processado no seu navegador. Esta página não consegue enviar seus dados para lugar nenhum – como sabemos

Como converter Base64 para PDF

  1. Cole a string em Base64 ou data URI. Um URI data:application/pdf;base64,… completo funciona, assim como quebras de linha, aspas em volta, Base64 URL-safe (- e _) e preenchimento = ausente. Para uma string longa salva em arquivo, use Abrir arquivo .txt ou arraste o arquivo para a caixa; acima de 4 MB, o conteúdo é decodificado sem ser exibido na área de texto.
  2. A prévia abre abaixo dos botões. A decodificação começa assim que você cola; desmarque Ao vivo se preferir clicar em Decodificar você mesmo.
  3. Confira Nome do arquivo. Ele começa como decoded, mas assume o nome de um parâmetro name= no data URI ou do arquivo de texto que você abriu: invoice.pdf.b64.txt vira invoice.pdf.
  4. Clique em Baixar arquivo. O link abra em uma nova aba, abaixo da prévia, mostra o mesmo PDF em tamanho cheio.

Um PDF de exemplo é carregado quando a página abre, para você ver como fica um resultado correto antes de colar o seu.

De onde vêm os PDFs em Base64

O JSON não tem como transportar bytes brutos, então serviços que devolvem documentos por uma API JSON os enviam como string Base64, muitas vezes em um campo chamado content, document, file ou label.

  • APIs de etiquetas e logística devolvem a etiqueta de envio para impressão como PDF em Base64. A mesma requisição muitas vezes gera ZPL ou PNG, dependendo de um parâmetro de formato, então um campo “PDF” nem sempre contém um PDF (veja a tabela mais abaixo).
  • Serviços de assinatura eletrônica devolvem o documento assinado, e com frequência um certificado de auditoria separado, em Base64 na resposta de conclusão ou no webhook.
  • Faturas eletrônicas no formato XML UBL embutem uma cópia legível em PDF em um elemento como <cbc:EmbeddedDocumentBinaryObject mimeCode="application/pdf" filename="INV-1001.pdf">. Copie o texto entre as tags; o atributo filename indica o que digitar em Nome do arquivo.
  • No código-fonte bruto de um e-mail, um anexo PDF é uma parte MIME com Content-Transfer-Encoding: base64 e linhas de 76 caracteres. Cole só o bloco codificado ou abra a mensagem inteira no decodificador de EML, que lista todos os anexos. Base64 no e-mail explica a estrutura.
  • Documentos guardados em colunas BLOB de banco de dados costumam ser exportados como texto. O encode(data, 'base64') do PostgreSQL e o TO_BASE64() do MySQL ou do MariaDB inserem uma quebra de linha a cada 76 caracteres; o decodificador as ignora.

Para uma resposta JSON com vários campos codificados, decodificar Base64 dentro de JSON encontra e decodifica todos de uma vez. Para fazer o caminho inverso, de um arquivo PDF para uma string, use PDF para Base64.

O que a prévia mostra

CampoDe onde vem
Versão do PDFA linha de cabeçalho, por exemplo %PDF-1.7
PáginasContadas a partir dos objetos de página do arquivo (veja abaixo)
TítuloO título das informações do documento, quando está gravado como texto simples
CriptografadoAparece quando o arquivo tem um dicionário de criptografia: senha para abrir ou apenas restrições de permissão
SHA-256Hash dos bytes decodificados. Compare com sha256sum invoice.pdf do lado do remetente para provar que o arquivo chegou íntegro

A prévia em si é o visualizador de PDF do seu navegador, exibindo os bytes decodificados a partir de uma URL blob: local. Chrome, Edge, Firefox e o Safari para desktop mostram o PDF na própria página. A prévia fica em branco quando o navegador está configurado para baixar PDFs em vez de abri-los (Chrome: Configurações, Privacidade e segurança, Configurações do site, Configurações de conteúdo adicionais, Documentos PDF; Firefox: Configurações, Geral, Aplicativos, Portable Document Format), e muitos navegadores de celular simplesmente não conseguem renderizar um PDF dentro de uma página. Nesses casos, abra em uma nova aba e Baixar arquivo continuam funcionando, e a lista de informações acima da prévia é preenchida de qualquer forma.

Como funciona a contagem de páginas

A ferramenta não renderiza o PDF para contar as páginas. Ela conta os objetos de página (/Type /Page) nos primeiros 32 MB do arquivo. Se nenhum estiver visível, lê a entrada /Count da árvore de páginas e, se ela também estiver oculta, mostra desconhecido. Duas situações fazem o número diferir do que o visualizador mostra:

  • Páginas a mais. Um PDF editado, anotado ou assinado depois de criado costuma ser salvo de forma incremental: as páginas alteradas são acrescentadas como objetos novos e as versões antigas continuam no arquivo. Em um arquivo de teste com 2 páginas e uma página reescrita, a contagem dá 3.
  • Desconhecido. Desde o PDF 1.5, os objetos podem ser empacotados em object streams compactados, e aí nem os objetos de página nem a árvore de páginas podem ser lidos sem descompactá-los.

Quando os dois números não batem, o certo é o do visualizador.

Quando o resultado não é um PDF

Se os bytes decodificados forem outra coisa, um aviso acima dos campos diz o que foi encontrado, por exemplo “Isto parece ser HTML, não PDF.”, com um botão Baixar como .html. O início do Base64 muitas vezes explica o que aconteceu:

O Base64 começa comO que você tem
JVBERi0Um PDF (%PDF-)
SlZCRVJpMHUm PDF codificado duas vezes: o Base64 de JVBERi0…
H4sIDados compactados com gzip
PCFET0NUWVBF, PCFkb2N0eXBl, PGh0bWwUma página HTML, geralmente de erro ou de login
eyJJSON, muitas vezes uma mensagem de erro como {"error":…
XlhBUma etiqueta ZPL (^XA) para impressoras térmicas
iVBORw0KGgoUma imagem PNG

Para uma string codificada duas vezes ou dados gzip, a ferramenta mostra um segundo aviso com Decodificar de novo, que substitui a entrada pela camada interna; Voltar restaura o que você colou. Para um arquivo danificado ou não reconhecido, o aviso diz “Isto não parece ser PDF” e informa o tipo detectado, e a extensão continua .pdf, para você baixar os bytes mesmo assim e tentar outro leitor.

Erros antes da decodificação têm causas próprias:

  • Escapes de JSON bruto, como \/ (o json_encode do PHP escreve barras assim) ou um \n literal entre as linhas, são removidos automaticamente. Se outro escape com \ ainda gerar Caractere inválido \, use Reparar Base64 ou faça o parse do JSON antes e copie o valor.
  • Caractere inválido % significa que a string passou por codificação de URL. Os escapes de +, / e = (%2B, %2F, %3D) são corrigidos automaticamente; para qualquer outro, passe a string antes pelo decodificador de URL.
  • Um PDF detectado que não mostra nada quase sempre está truncado. O cabeçalho sobrevive, então a detecção funciona, mas o final do arquivo, onde fica a tabela de referências cruzadas, está faltando. Veja erros de Base64 para os outros suspeitos de sempre.

Decodificar Base64 para PDF no código

Python, a partir de uma resposta JSON:

import base64, json

with open("response.json") as f:
    b64 = json.load(f)["document"]

if b64.startswith("data:"):
    b64 = b64.split(",", 1)[1]

pdf = base64.b64decode(b64)
if not pdf.startswith(b"%PDF-"):
    raise ValueError(f"not a PDF, starts with {pdf[:16]!r}")

with open("document.pdf", "wb") as f:
    f.write(pdf)

O b64decode descarta em silêncio os caracteres fora do alfabeto padrão, então uma string URL-safe com - e _ vira lixo sem nenhum erro. Para essas, use base64.urlsafe_b64decode. O Node.js aceita os dois alfabetos na mesma chamada:

import { readFile, writeFile } from "node:fs/promises";

const { document } = JSON.parse(await readFile("response.json", "utf8"));
const pdf = Buffer.from(document.replace(/^data:[^,]*,/, ""), "base64");

if (pdf.toString("latin1", 0, 5) !== "%PDF-") throw new Error("not a PDF");
await writeFile("document.pdf", pdf);

No shell, o jq -r faz diferença: sem -r, o valor mantém as aspas e o base64 -d para com “invalid input”.

jq -r '.document' response.json | base64 -d > document.pdf

A chave document é só um exemplo; troque pelo nome que a sua API dá ao campo. Mais padrões em Base64 em Python, Base64 em Node.js e Base64 em Bash.

Perguntas frequentes

Como converter uma string Base64 em arquivo PDF?

Cole a string na caixa acima, confira a prévia e clique em Baixar arquivo. Se ela vier de um JSON, copie só o valor entre as aspas; o prefixo data:application/pdf;base64, e as quebras de linha podem ficar.

Por que o PDF decodificado abre corrompido ou em branco?

Quase sempre a string foi cortada por um limite de linha de log, por uma coluna do banco de dados ou pelo limite do copiar e colar, e o final do arquivo se perdeu. Um PDF completo termina com %%EOF; compare o tamanho decodificado com o que o remetente informa.

Dá para ver um PDF protegido por senha?

Sim. A lista de informações mostra Criptografado: sim, e os visualizadores nativos do Chrome e do Firefox pedem a senha dentro da prévia. O arquivo baixado não é alterado e abre com a mesma senha.

Por que a ferramenta diz que meu Base64 não é um PDF?

Os bytes decodificados não começam com %PDF-. Na maioria das vezes a API mandou uma página de erro ou uma mensagem JSON no lugar do documento; o aviso diz o que foi encontrado e oferece salvar com essa extensão para você ler o conteúdo.

É seguro decodificar um PDF confidencial aqui?

O PDF é decodificado e exibido dentro do seu navegador, e a Content Security Policy da página a impede de fazer requisições de rede, exceto as do contador de visitas da Cloudflare. Você pode até ficar offline depois que a página carregar e continuar usando.