Cómo convertir un PDF a Base64
- Suelta el PDF en el recuadro o elígelo con el selector de archivos. Puedes usar varios PDF a la vez.
- Elige el formato en Salida como. Esta página empieza en Base64 simple, que es lo que quieren la mayoría de las API.
- Marca Ajustar a 76 solo si la cadena va en un correo MIME en bruto. Déjalo desactivado para JSON y HTML.
- Pulsa Copiar salida. Para documentos grandes, usa Guardar como .txt, que escribe
yourfile.pdf.b64.txt.
La línea de información muestra el nombre del archivo, el tamaño y el tipo MIME, y los contadores de abajo muestran el tamaño codificado y la sobrecarga. Tu navegador lee el PDF y no lo sube; la Content Security Policy de la página no le permite más peticiones de red que las del contador de visitas de Cloudflare.
Dónde se usa un PDF en Base64
JSON no puede transportar bytes en bruto, así que los servicios que aceptan documentos dentro del cuerpo de la petición los reciben en Base64. Las plataformas de firma electrónica, los sistemas de facturación y contabilidad, los servicios de OCR y de análisis de documentos, y los modelos de IA que leen PDF siguen este patrón. Los nombres de los campos cambian de una API a otra, pero la estructura suele ser un nombre de archivo, un tipo MIME y una cadena Base64.
Los modelos de IA que leen PDF directamente suelen recibir el archivo de la misma manera: datos Base64 más el tipo de medio application/pdf, ya sea en campos separados o como un único data URI. Suelen limitar el tamaño del archivo y el número de páginas, así que divide los documentos largos antes de codificar.
Los adjuntos en el correo MIME son Base64 con líneas de 76 caracteres como máximo. Si estás montando un mensaje a mano o probando una biblioteca SMTP, Ajustar a 76 te da exactamente el cuerpo de una parte como esta:
Content-Type: application/pdf; name="invoice.pdf"
Content-Disposition: attachment; filename="invoice.pdf"
Content-Transfer-Encoding: base64
JVBERi0xLjcKJeLjz9MK...
Las API de envío de correo que reciben JSON quieren el adjunto sin ajustar, en un campo. Más en Base64 en el correo electrónico, y el decodificador EML extrae los adjuntos de un mensaje en bruto.
Para codificar varios PDF, suelta un lote y pulsa Copiar todo como JSON para obtener un array con un objeto {name, type, size, data} por documento, útil para poblar una base de datos de prueba o para una importación masiva.
Para enlaces de descarga, la salida HTML <a download> genera un enlace que guarda el PDF al hacer clic:
<a href="data:application/pdf;base64,JVBERi0xLjcK..." download="invoice.pdf">invoice.pdf</a>
Es práctico para informes HTML de un solo archivo. Enlazar al data URI sin download suele fallar: Chrome bloquea la navegación iniciada por la página hacia URL data: en la ventana principal, así que el clic no abre nada o abre una pestaña en blanco. Firefox hace una excepción con los PDF, y por eso un enlace puede funcionar en un navegador y no en otro.
Un PDF pequeño guardado como constante Base64 permite que una prueba unitaria ejercite una ruta de subida o de análisis sin un archivo de fixture al lado.
Cómo empieza el Base64 de un PDF
Todo PDF empieza por %PDF- y un número de versión, seguido de un salto de línea. En Base64 esa cabecera es fácil de reconocer:
| Cabecera del archivo | Base64 |
|---|---|
%PDF-1.4 + salto de línea | JVBERi0xLjQK |
%PDF-1.5 + salto de línea | JVBERi0xLjUK |
%PDF-1.7 + salto de línea | JVBERi0xLjcK |
%PDF-2.0 + salto de línea | JVBERi0yLjAK |
Si tu salida no empieza por JVBERi0, el archivo que elegiste no es un PDF o tiene basura delante de la cabecera. Una cadena que empieza por PCFET0NUWVBF (<!DOCTYPE) o PGh0bWw (<html) es HTML, lo que a menudo significa que un enlace de descarga guardó una página de error con nombre .pdf.
Cuánto ocupa el PDF codificado
La salida Base64 son 4 caracteres por cada 3 bytes, y el ajuste añade un salto de línea cada 76 caracteres:
| Tamaño del PDF | Longitud en Base64 | Con Ajustar a 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 |
Los tamaños están en unidades binarias (1 MB = 1.048.576 bytes). Compara el límite de tamaño de petición de la API con el tamaño codificado, no con el del archivo. Si la API también acepta una subida multipart o una URL prefirmada, esa vía evita la sobrecarga y va mejor con documentos de decenas de megabytes. La calculadora de tamaño hace esta cuenta para cualquier tamaño.
Esta herramienta codifica PDF grandes en tu navegador, pero no copia al portapapeles salidas de más de unos 48 MB. En ese caso, usa Guardar como .txt.
Codificar un PDF en código
Python, construyendo un cuerpo 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 });
Desde una shell con GNU coreutils y jq (-w 0 desactiva el ajuste de línea):
base64 -w 0 invoice.pdf > invoice.b64
jq -n --rawfile content invoice.b64 '{filename: "invoice.pdf", content: $content}'
Las claves filename y content son de ejemplo; usa los nombres que indique tu API. Hay más opciones en Base64 en Python y Base64 en Node.js.
Problemas habituales
- La API dice que el Base64 no es válido. Lo más frecuente es que se incluya el prefijo
data:application/pdf;base64,donde la API quiere Base64 sin más, o que queden saltos de línea debase64sin-w 0, deopenssl base64(ajusta a 64) o de Ajustar a 76. Algunas API también rechazan el Base64 URL-safe. - El PDF decodificado está dañado o vacío. La cadena se cortó en algún punto, a menudo por el límite de longitud de una línea de log, una columna de base de datos demasiado corta o una celda de hoja de cálculo. Compara la longitud con la tabla de arriba. Los últimos bytes de un PDF son
%%EOF, así que una codificación completa se decodifica en algo que termina con esa marca. - El PDF se abre en tu equipo, pero el receptor ve una página en blanco. Base64 no cambia el documento, así que el problema es el propio PDF: fuentes que faltan, una versión de PDF poco habitual o una tabla de referencias cruzadas dañada. Compruébalo decodificando la cadena con Base64 a PDF y abriendo el resultado.
- Base64 no es cifrado. Cualquiera que tenga la cadena puede decodificar el documento. Si el PDF es confidencial, protege el canal o cífralo; consulta codificación frente a cifrado.
Preguntas frecuentes
¿Cómo envío un PDF en una petición JSON?
Codifica el archivo como Base64 simple y pon la cadena en el campo que tu API indique para el contenido del archivo, normalmente junto a un nombre de archivo y el tipo MIME application/pdf. La salida JSON te da un objeto listo con name, type, size y data para adaptar.
¿Puedo convertir a Base64 un PDF protegido con contraseña?
Sí. Base64 codifica los bytes tal como son, cifrado incluido. El archivo codificado sigue protegido, y quien lo decodifique seguirá necesitando la contraseña para abrirlo.
¿Cómo reconozco un PDF codificado en Base64?
Empieza por JVBERi0, la codificación de %PDF-. Los caracteres siguientes indican la versión, por ejemplo JVBERi0xLjc para PDF 1.7.
¿Por qué mi enlace a un PDF en Base64 abre una pestaña en blanco?
Chrome impide que las páginas lleven la ventana principal a una URL data:, y otros navegadores también lo restringen. Usa la salida HTML <a download>, que guarda el archivo en lugar de abrirlo, o crea una URL de Blob en JavaScript.
¿Cuánto ocupará mi PDF en Base64?
Alrededor de 4/3 del tamaño del archivo: un PDF de 3 MB se convierte en unos 4 MB de texto. El contador de sobrecarga bajo la salida muestra el valor exacto, y Base64 a PDF hace el camino inverso.