Como converter um PDF para Base64
- Arraste o PDF para a caixa ou escolha-o no seletor de arquivos. Vários PDFs de uma vez também funcionam.
- Escolha o formato em Saída como. Esta página começa em Base64 puro, que é o que a maioria das APIs quer.
- Marque Quebrar em 76 só se a string for para um e-mail MIME bruto. Deixe desligado para JSON e HTML.
- Clique em Copiar saída. Para documentos grandes, use Salvar como .txt, que grava
yourfile.pdf.b64.txt.
A linha de informações mostra o nome do arquivo, o tamanho e o MIME type, e os contadores abaixo mostram o tamanho codificado e o acréscimo. O PDF é lido pelo navegador e não é enviado; a Content Security Policy da página não a deixa fazer nenhuma requisição de rede além das do contador de visitas da Cloudflare.
Onde um PDF em Base64 é usado
O JSON não carrega bytes brutos, então serviços que aceitam documentos no corpo da requisição os recebem em Base64. Plataformas de assinatura eletrônica, sistemas de faturamento e contabilidade, serviços de OCR e de leitura de documentos, e modelos de IA que leem PDFs usam esse padrão. Os nomes dos campos mudam de API para API, mas o formato costuma ser um nome de arquivo, um MIME type e uma string Base64.
Modelos de IA que leem PDFs diretamente costumam receber o arquivo do mesmo jeito: dados Base64 mais o media type application/pdf, em campos separados ou como um único data URI. Eles tendem a limitar o tamanho do arquivo e o número de páginas, então divida documentos longos antes de codificar.
Anexos em e-mails MIME são Base64 com linhas de no máximo 76 caracteres. Se você está montando uma mensagem à mão ou testando uma biblioteca SMTP, Quebrar em 76 entrega exatamente o corpo de uma parte como esta:
Content-Type: application/pdf; name="invoice.pdf"
Content-Disposition: attachment; filename="invoice.pdf"
Content-Transfer-Encoding: base64
JVBERi0xLjcKJeLjz9MK...
APIs de envio de e-mail que recebem JSON querem o anexo sem quebras, num campo. Mais em Base64 em e-mail, e o decodificador de EML extrai os anexos de uma mensagem bruta.
Para codificar vários PDFs, arraste um lote e clique em Copiar tudo como JSON para obter um array com um objeto {name, type, size, data} por documento, útil para popular um banco de testes ou fazer uma importação em lote.
Para links de download, a saída HTML <a download> gera um link que salva o PDF ao ser clicado:
<a href="data:application/pdf;base64,JVBERi0xLjcK..." download="invoice.pdf">invoice.pdf</a>
Isso é prático para relatórios HTML de arquivo único. Linkar o data URI sem download costuma falhar: o Chrome bloqueia a navegação da janela principal para URLs data: iniciada pela página, então o clique não abre nada ou abre uma aba em branco. O Firefox abre uma exceção para PDFs, e é por isso que um link pode funcionar num navegador e não em outro.
Um PDF pequeno guardado como constante Base64 permite que um teste unitário exercite um fluxo de upload ou de leitura sem um arquivo de fixture ao lado.
Como começa o Base64 de um PDF
Todo PDF começa com %PDF- e um número de versão, seguidos de uma quebra de linha. Em Base64, esse cabeçalho é fácil de reconhecer:
| Cabeçalho do arquivo | Base64 |
|---|---|
%PDF-1.4 + quebra de linha | JVBERi0xLjQK |
%PDF-1.5 + quebra de linha | JVBERi0xLjUK |
%PDF-1.7 + quebra de linha | JVBERi0xLjcK |
%PDF-2.0 + quebra de linha | JVBERi0yLjAK |
Se a sua saída não começa com JVBERi0, o arquivo escolhido não é um PDF ou tem lixo antes do cabeçalho. Uma string que começa com PCFET0NUWVBF (<!DOCTYPE) ou PGh0bWw (<html) é HTML, o que muitas vezes significa que um link de download salvou uma página de erro com nome .pdf.
Qual o tamanho do PDF codificado
A saída Base64 tem 4 caracteres para cada 3 bytes, e a quebra acrescenta uma quebra de linha a cada 76 caracteres:
| Tamanho do PDF | Tamanho em Base64 | Com Quebrar em 76 |
|---|---|---|
| 100 KB | 136.536 caracteres | 138.332 caracteres |
| 1 MB | 1.398.104 caracteres | 1.416.500 caracteres |
| 5 MB | 6.990.508 caracteres | 7.082.488 caracteres |
| 10 MB | 13.981.016 caracteres | 14.164.976 caracteres |
| 25 MB | 34.952.536 caracteres | 35.412.437 caracteres |
Os tamanhos estão em unidades binárias (1 MB = 1.048.576 bytes). Compare o limite de tamanho de requisição da API com o tamanho codificado, não com o do arquivo. Se a API também aceitar upload multipart ou uma URL pré-assinada, esse caminho evita o acréscimo e serve melhor para documentos de dezenas de megabytes. A calculadora de tamanho faz essa conta para qualquer tamanho.
Esta ferramenta codifica PDFs grandes no navegador, mas não copia para a área de transferência saídas acima de uns 48 MB. Nesse caso, use Salvar como .txt.
Codificar um PDF no código
Python, montando um corpo JSON:
import base64, json
from pathlib import Path
path = Path("invoice.pdf")
data = base64.b64encode(path.read_bytes()).decode("ascii")
body = json.dumps({"filename": path.name, "content": data})
Node.js:
import { readFile } from "node:fs/promises";
const b64 = (await readFile("invoice.pdf")).toString("base64");
const payload = JSON.stringify({ filename: "invoice.pdf", content: b64 });
No shell, com GNU coreutils e jq (-w 0 desativa a quebra de linha):
base64 -w 0 invoice.pdf > invoice.b64
jq -n --rawfile content invoice.b64 '{filename: "invoice.pdf", content: $content}'
As chaves filename e content são exemplos; use os nomes que a sua API documenta. Há mais opções em Base64 em Python e Base64 em Node.js.
Problemas comuns
- A API diz que o Base64 é inválido. Na maioria das vezes, o prefixo
data:application/pdf;base64,foi incluído onde a API quer Base64 puro, ou ficaram quebras de linha dobase64sem-w 0, doopenssl base64(que quebra em 64) ou de Quebrar em 76. Algumas APIs também rejeitam Base64 URL-safe. - O PDF decodificado está corrompido ou vazio. A string foi cortada em algum ponto, muitas vezes por um limite de linha de log, uma coluna de banco de dados curta demais ou uma célula de planilha. Compare o tamanho com a tabela acima. Os últimos bytes de um PDF são
%%EOF, então uma codificação completa decodifica para algo que termina com esse marcador. - O PDF abre na sua máquina, mas quem recebe vê uma página em branco. O Base64 não altera o documento, então o problema está no próprio PDF: fontes ausentes, uma versão de PDF incomum ou uma tabela de referências cruzadas danificada. Teste decodificando a string com o Base64 para PDF e abrindo o resultado.
- Base64 não é criptografia. Qualquer pessoa com a string consegue decodificar o documento. Se o PDF é confidencial, proteja o canal ou criptografe o arquivo; veja codificação vs criptografia.
Perguntas frequentes
Como enviar um PDF numa requisição JSON?
Codifique o arquivo como Base64 puro e coloque a string no campo que a sua API documenta para o conteúdo do arquivo, normalmente ao lado de um nome de arquivo e do MIME type application/pdf. A saída JSON entrega um objeto pronto com name, type, size e data para você adaptar.
Dá para converter um PDF protegido por senha em Base64?
Dá. O Base64 codifica os bytes como estão, criptografia incluída. O arquivo codificado continua protegido, e quem o decodificar ainda precisa da senha para abri-lo.
Como reconhecer um PDF codificado em Base64?
Ele começa com JVBERi0, a codificação de %PDF-. Os caracteres seguintes mostram a versão, por exemplo JVBERi0xLjc para PDF 1.7.
Por que meu link de PDF em Base64 abre uma aba em branco?
O Chrome impede que páginas levem a janela principal para uma URL data:, e outros navegadores também restringem isso. Use a saída HTML <a download>, que salva o arquivo em vez de abri-lo, ou crie uma Blob URL em JavaScript.
Qual vai ser o tamanho do meu PDF em Base64?
Cerca de 4/3 do tamanho do arquivo: um PDF de 3 MB vira uns 4 MB de texto. O contador de acréscimo abaixo da saída mostra o valor exato, e o Base64 para PDF faz o caminho inverso.