Skip to content

Convertir Base64 a PDF y archivo · PDF a Base64

Base64 a PDF online: pega Base64 puro, una data URI o la respuesta JSON completa. Detecta el tipo real del archivo, lo previsualiza y descarga, y avisa si el PDF está truncado. También PDF a Base64. No se sube nada.

Sin rastreo Se ejecuta en el navegador Gratis
La decodificación y la codificación se ejecutan por completo en tu navegador. Tu Base64 y tus archivos nunca se suben.

Interpretado así:

¿Qué archivo es este Base64? Mira cómo empieza

Cada tipo de archivo empieza con unos bytes "mágicos" fijos, así que su Base64 empieza con unos caracteres fijos. Los prefijos de abajo se calculan a partir de cabeceras de archivo reales con el mismo motor que usa esta herramienta.

El Base64 empieza por Tipo de archivo Bytes mágicos (hex)
JVBERi0 PDF 25 50 44 46 2D
iVBORw0KGgoAAAANSUhEU PNG 89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52
/9j/ JPEG FF D8 FF
R0lGOD GIF 47 49 46 38
UEsDB ZIP / DOCX / XLSX / PPTX 50 4B 03 04
0M8R4KGxGu Office 97–2003 (DOC/XLS/PPT) D0 CF 11 E0 A1 B1 1A E1
H4sI Gzip 1F 8B 08
UklGR RIFF (WebP / WAV / AVI) 52 49 46 46
SUQz MP3 (ID3) 49 44 33
e1xydG RTF 7B 5C 72 74 66
Comportamiento verificado frente a los RFC 4648, RFC 2045 y RFC 2397, y frente a las firmas de archivo de PDF, PNG, ZIP y Office. — Go Tools Engineering · Sep 30, 2026

Escrito y revisado por los ingenieros que desarrollan las herramientas de codificación de Go Tools. Cada longitud, prefijo y ejemplo de esta página lo genera el propio motor de la página y lo comprueban pruebas automatizadas.

Base64 a PDF — respuestas rápidas

¿Qué archivo es un Base64 que empieza por JVBERi0?

JVBERi0 = PDF Un PDF. Todo PDF empieza con los bytes `%PDF-`, que en Base64 quedan como `JVBERi0`. `iVBORw0KGgo` es un PNG, `/9j/` es un JPEG y `UEsDB` es un ZIP, lo que incluye DOCX y XLSX.

¿Cuánto más grande es el Base64 que el archivo original?

+33.3% 4 caracteres por cada 3 bytes, es decir, un 33.3% más: un PDF de 1 MB (1.048.576 bytes) se convierte en 1.398.104 caracteres. Con un salto de línea cada 76 caracteres, como en los adjuntos de correo, son 1.434.896 caracteres, un 36.8% más.

¿Qué es un PDF en Base64?

Base64 representa bytes arbitrarios usando solo 64 caracteres de texto seguros (A–Z, a–z, 0–9, +, /), con = como relleno (padding). Cada 3 bytes se convierten en 4 caracteres. Así, un archivo binario como un PDF puede viajar por canales que solo admiten texto: un campo JSON, un elemento XML, el cuerpo de un correo, una columna de texto en una base de datos. Convertir Base64 a PDF es simplemente deshacerlo: volver a pasar los caracteres a bytes y guardarlos con extensión .pdf. El problema es que el Base64 real casi nunca llega limpio: trae un prefijo data:, escapes JSON, saltos de línea o un alfabeto distinto, y muchos conversores generan sin avisar un archivo que no se abre.

%PDF-1.4          → bytes 25 50 44 46 2D 31 2E 34
JVBERi0xLjQ=      → the same bytes in Base64
data:application/pdf;base64,JVBERi0xLjQ=   → data URI form

Funciones

Pégalo tal como te llegó

Procesa data URIs, escapes JSON \/ y \n, comillas, saltos de línea MIME, - _ URL-safe, %2B %2F copiados de URLs, cabeceras PEM y padding = que falta, y muestra cada paso aplicado.

Acepta la respuesta JSON completa

Pega {"code":0,"data":{"file":"JVBERi0…"}} tal cual. Se usa el campo más largo con aspecto de Base64 y se muestra su ruta (data.file), para que sepas qué campo se decodificó.

Tipo real a partir de los bytes mágicos

PDF, PNG, JPEG, GIF, WebP, DOCX, XLSX, PPTX, ZIP, GZIP, MP3, MP4 y más de 40 formatos más se reconocen por sus primeros bytes. La descarga lleva la extensión correcta aunque el prefijo diga otra cosa.

Explica por qué un archivo no abre

Detecta un PDF sin %%EOF (cortado al copiar o por el límite de longitud de una columna), Base64 codificado dos veces, hexadecimal pegado como Base64, datos comprimidos con gzip y PDF cifrados.

Vista previa en la página

Los PDF se abren en el visor integrado del navegador, las imágenes y los SVG se muestran, el texto y el JSON aparecen como texto. El HTML nunca se renderiza, solo se ve su código fuente, porque se ejecutaría en esta página.

PDF o cualquier archivo a Base64

Suelta un archivo de hasta 50 MB y obtén Base64 puro o una data URI, opcionalmente URL-safe o con saltos cada 76 caracteres, con el aumento de tamaño exacto.

Base64 a PDF en Python, Java, JavaScript y más

Python

base64.b64decode

open('out.pdf', 'wb').write(base64.b64decode(s)). Usa urlsafe_b64decode para - y _; b64decode ignora los saltos de línea salvo que pases validate=True.

Java

java.util.Base64

Files.write(Path.of("out.pdf"), Base64.getMimeDecoder().decode(s)). getDecoder() rechaza los saltos de línea; getUrlDecoder() es para - y _.

Node.js

Buffer

fs.writeFileSync('out.pdf', Buffer.from(s, 'base64')). Buffer acepta ambos alfabetos e ignora los espacios, pero también se salta sin avisar cualquier otro carácter no válido en lugar de lanzar un error, así que comprueba que el resultado empiece por %PDF-.

JavaScript en el navegador

atob / Uint8Array.fromBase64

Construye un Uint8Array antes de crear el Blob. Uint8Array.fromBase64() es la función nativa más reciente; comprueba la compatibilidad en tus navegadores objetivo.

PHP

base64_decode

file_put_contents('out.pdf', base64_decode($s, true)). Pasa true para el modo estricto; si no, los caracteres no válidos se descartan sin avisar.

C#

Convert.FromBase64String

File.WriteAllBytes("out.pdf", Convert.FromBase64String(s)). Admite espacios en blanco; - y _, no.

Línea de comandos

base64 -d / certutil

macOS y Linux: base64 -d < in.txt > out.pdf. Windows: certutil -decode in.txt out.pdf.

Ejemplos de Base64 a PDF

Base64 puro de un PDF

JVBERi0xLjQKMSAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMiAwIFIgPj4K…
PDF · versión 1.4 · descargado como file.pdf

Empieza por JVBERi0, que es %PDF-. No hay nada que limpiar, así que se decodifica tal cual.

Cadena copiada de una respuesta JSON

"data:application\/pdf;base64,JVBERi0xLjQK…"
Interpretado así: comillas eliminadas → escapes JSON deshechos → prefijo data URI eliminado (application/pdf)

El json_encode de PHP y algunos serializadores de Java escriben / como \/. Si lo pegas en un decodificador que no lo deshace, la barra invertida es un carácter no válido.

Respuesta completa de la API

{"code":0,"data":{"name":"invoice.pdf","file":"JVBERi0xLjQK…"}}
Interpretado así: campo data.file extraído del JSON

No hace falta recortar la cadena a mano. Se usa el campo más largo con aspecto de Base64 y se muestra su ruta.

Etiquetado como PDF, pero es un PNG

data:application/pdf;base64,iVBORw0KGgoAAAANSUhEUgAA…
Aviso: la data URI dice application/pdf, pero los bytes son PNG. Guardado como file.png

Muchos conversores escribirían un .pdf que ningún lector puede abrir. Los bytes mágicos mandan sobre la etiqueta.

Hexadecimal pegado en lugar de Base64

255044462d312e370a…
Aviso: parece hexadecimal; leído como hex es un PDF. [Decodificar como hex]

Todos los dígitos hexadecimales son caracteres Base64 válidos, así que la decodificación Base64 no falla: produce basura sin avisar. 25 50 44 46 es %PDF.

Cómo convertir Base64 a PDF

  1. 1

    Pega el Base64 tal como lo recibiste

    Base64 puro, data:application/pdf;base64,…, una cadena copiada de un JSON con escapes \/ o la respuesta completa de la API. Para cadenas muy largas usa Abrir un archivo .txt en lugar de pegar.

  2. 2

    Comprueba cómo se interpretó

    La línea bajo el cuadro enumera cada paso de limpieza: prefijo eliminado, escapes deshechos, padding añadido, campo extraído del JSON. Si algo falla, el error indica el carácter exacto y su posición.

  3. 3

    Revisa el tipo detectado y los avisos

    La etiqueta muestra el tipo leído de los bytes mágicos del archivo. Aparece una nota amarilla si en realidad no es un PDF, si la data URI miente sobre el tipo o si el PDF está cortado antes de %%EOF.

  4. 4

    Previsualiza y descarga

    Los PDF se abren en el visor del propio navegador; las imágenes y el texto se muestran en la página. Cambia el nombre del archivo si quieres y haz clic en Descargar. Para el sentido inverso, cambia a PDF / archivo → Base64 y suelta un archivo.

Por qué no abre un PDF en Base64: errores comunes

Decodificar el prefijo data URI junto con los datos

data:application/pdf;base64, no forma parte del Base64. Si lo dejas, o bien lanza un error (: y ; no son válidos) o, en decodificadores permisivos, corrompe los primeros bytes y el archivo deja de empezar por %PDF-.

✗ Incorrecto
base64.b64decode(value)  # value = 'data:application/pdf;base64,JVBERi0…'
✓ Correcto
b64 = value.split(',', 1)[1] if value.startswith('data:') else value
pdf = base64.b64decode(b64)

Escribir los bytes decodificados como texto

Un PDF es binario. Convertir los bytes decodificados en una cadena y escribirla con una codificación de texto sustituye los bytes no válidos y cambia los finales de línea, lo que rompe la tabla de referencias cruzadas.

✗ Incorrecto
fs.writeFileSync('out.pdf', Buffer.from(b64, 'base64').toString())
✓ Correcto
fs.writeFileSync('out.pdf', Buffer.from(b64, 'base64'))

Decodificador estricto con Base64 partido en líneas

Base64.getDecoder() de Java rechaza los saltos de línea. El Base64 de un correo o del comando base64 en Linux viene partido cada 76 caracteres. Usa el decodificador MIME o elimina antes los espacios.

✗ Incorrecto
byte[] pdf = Base64.getDecoder().decode(wrapped);  // IllegalArgumentException
✓ Correcto
byte[] pdf = Base64.getMimeDecoder().decode(wrapped);

Base64 URL-safe en un decodificador estándar

Los JWT y muchos parámetros de URL usan - y _ en lugar de + y /, y omiten el padding =. Un decodificador estándar los rechaza o decodifica bytes incorrectos.

✗ Incorrecto
base64.b64decode(token_part)  # contains - and _
✓ Correcto
base64.urlsafe_b64decode(token_part + '=' * (-len(token_part) % 4))

Usar el resultado de atob() como texto

En el navegador, atob devuelve una cadena binaria, un carácter por byte. Pasarla a new Blob([str]) la codifica en UTF-8 y convierte cada byte por encima de 127 en dos bytes. Cópiala antes a un Uint8Array.

✗ Incorrecto
new Blob([atob(b64)], { type: 'application/pdf' })
✓ Correcto
const bytes = Uint8Array.from(atob(b64), c => c.charCodeAt(0));
new Blob([bytes], { type: 'application/pdf' })

Cadena truncada

Un PDF termina en %%EOF. Si el Base64 se cortó por una columna VARCHAR, un límite de longitud de línea de log o una copia incompleta, el archivo se decodifica pero los lectores muestran un error o faltan páginas. Compara la longitud con la que generó el emisor.

✗ Incorrecto
SELECT LENGTH(pdf_b64) FROM docs;  -- 65535: suspiciously round
✓ Correcto
ALTER TABLE docs MODIFY pdf_b64 LONGTEXT;  -- or store the bytes in a BLOB

Cuándo necesitas convertir Base64 a PDF

Una API devuelve el PDF en Base64
Las API de facturación, firma electrónica e impresión de etiquetas suelen devolver documentos dentro de un JSON. Pega la respuesta para revisar el documento antes de escribir el código que lo guarda.
Depurar un PDF que no abre
Cuando el archivo guardado sale en blanco o dañado, pega aquí el mismo Base64. La herramienta te dice si está truncado, codificado dos veces, si ni siquiera es un PDF o si está bien, lo que significa que el fallo está en cómo tu código escribe el archivo.
Enviar un archivo en una petición JSON
Muchos endpoints de subida esperan {"filename": …, "content": "<base64>"}. Codifica aquí el archivo para montar una petición de prueba en Postman o cURL.
Incrustar un archivo en HTML, CSS o un correo
Genera una data URI para un enlace a un PDF en línea, una fuente o una imagen pequeña, o Base64 a 76 columnas para una parte MIME de un correo.
Recuperar adjuntos de logs y bases de datos
Los archivos guardados en una columna de texto o impresos en un log se pueden recuperar directamente, y si falta el %%EOF sabrás que la columna o la línea de log era demasiado corta.

Cómo funciona la codificación Base64 de archivos

Por qué el Base64 ocupa un 33% más
Cada carácter lleva 6 bits, así que 3 bytes (24 bits) necesitan 4 caracteres. Con padding, la longitud es 4 × ⌈n ÷ 3⌉: 100 KB (102.400 bytes) se convierten en 136.536 caracteres. El formato MIME añade un CRLF cada 76 caracteres, así que 1 MB pasa a 1.434.896 caracteres en lugar de 1.398.104.
Alfabeto estándar y alfabeto URL-safe
El RFC 4648 define dos alfabetos que solo difieren en los dos últimos caracteres: + / (estándar, sección 4) y - _ (seguro para URL y nombres de archivo, sección 5). El Base64 URL-safe suele omitir el padding =. Si una cadena mezcla los dos, se editó o se unió de dos fuentes.
Padding y longitudes imposibles
El padding = hace que la longitud sea múltiplo de 4. Sin él, un resto de 2 o 3 se puede restaurar; un resto de 1 es imposible en cualquier Base64 válido: se perdió o se añadió un carácter. Un = en medio suele indicar que se concatenaron dos cadenas.
Los bytes mágicos deciden el tipo
Un archivo declara su formato en sus primeros bytes: %PDF- en un PDF, 89 50 4E 47 en un PNG, 50 4B 03 04 en los formatos basados en ZIP como DOCX y XLSX. Esos bytes fijan los primeros caracteres del Base64, así que el tipo se puede leer antes de decodificar: consulta la tabla en la herramienta.
Cómo se detecta un PDF truncado
Un PDF termina en %%EOF. Si no aparece en los últimos 1.024 bytes, el archivo casi seguro se cortó. La cabecera puede empezar hasta 1.024 bytes más adelante; la mayoría de los lectores abren esos archivos igualmente, así que se avisa pero no se rechaza.

Buenas prácticas para enviar archivos en Base64

Envía el tipo MIME y el nombre del archivo junto con los datos
El Base64 no lleva nombre ni tipo. Pon ambos a su lado ({"filename": "invoice.pdf", "mime": "application/pdf", "content": "…"}) o usa una data URI, para que el receptor no tenga que adivinar.
Comprueba los bytes mágicos en el lado receptor
Antes de guardar, verifica que los bytes decodificados empiezan por %PDF-. Con una línea de código detectas campos equivocados, doble codificación y páginas de error devueltas en Base64.
Para archivos grandes, mejor multipart o una URL
Base64 añade un tercio al tamaño y la cadena entera tiene que estar en memoria. A partir de unos pocos megabytes, multipart/form-data o una URL de descarga prefirmada es más ligero para ambos extremos.
Guarda bytes, no Base64, en la base de datos
Una columna BLOB/bytea ocupa un tercio menos y no se puede truncar sin avisar como un VARCHAR. Codifica en Base64 solo en la frontera de la API.

Base64 a PDF — preguntas frecuentes

¿Cómo convierto Base64 a PDF?
Pega el Base64 en el cuadro de esta página. Se decodifica al momento, el PDF se abre en la vista previa y Descargar lo guarda como .pdf. El prefijo data:application/pdf;base64,, las comillas, los saltos de línea y los escapes JSON pueden quedarse: se eliminan automáticamente.
¿Por qué no se abre mi PDF decodificado?
Las causas habituales son: el prefijo data: se decodificó como parte de los datos; los bytes se escribieron como texto en vez de binario; la cadena se cortó (no hay %%EOF al final); el Base64 se codificó dos veces; o directamente no es un PDF, por ejemplo un PNG o un mensaje de error JSON. Pega aquí la misma cadena: cada uno de estos casos muestra un aviso concreto.
¿Se sube mi archivo a un servidor?
No. La decodificación, la detección del tipo, la vista previa y la codificación se ejecutan en tu navegador con JavaScript. Nada de lo que pegas o sueltas se envía a ningún sitio, así que puedes usarlo con facturas, contratos y documentos de identidad.
¿Cómo sé qué tipo de archivo es un Base64?
Mira cómo empieza: JVBERi0 es PDF, iVBORw0KGgo es PNG, /9j/ es JPEG, R0lGOD es GIF, UEsDB es ZIP (y por tanto DOCX, XLSX, PPTX), H4sI es gzip. La herramienta lee los bytes mágicos decodificados, muestra el tipo y guarda el archivo con la extensión que corresponde.
¿Puedo convertir Base64 a Word, Excel, imagen o ZIP?
Sí. Se puede decodificar cualquier tipo de archivo; la extensión sale del contenido. DOCX, XLSX y PPTX se reconocen dentro del contenedor ZIP, y los antiguos DOC/XLS se reconocen como Office 97–2003. Las imágenes, el audio y el vídeo se previsualizan; el resto se descarga directamente.
¿Cómo convierto un PDF a Base64?
Abre la pestaña PDF / archivo → Base64 y suelta el PDF. Elige Base64 puro o una data URI, opcionalmente URL-safe o con saltos cada 76 caracteres, y luego cópialo o descárgalo como archivo .txt.
¿Qué diferencia hay entre Base64 y una data URI?
Una data URI es Base64 con una cabecera que indica el tipo: data:application/pdf;base64,JVBERi0…. Los navegadores pueden abrirla directamente como enlace o como src. Las API normalmente solo quieren la parte Base64 que va después de la coma.
¿Por qué dice "Esto no es un PDF"?
Porque los bytes decodificados no empiezan por %PDF-. El tipo que se muestra es lo que los bytes son en realidad. Las sorpresas habituales son un escaneo en PNG o JPEG, un DOCX, un ZIP con varios PDF, o un mensaje de error JSON o HTML codificado en Base64 en lugar del documento.
¿Qué significa "no hay %%EOF al final"?
Todo PDF termina con la marca %%EOF. Si falta, el Base64 casi seguro se truncó: se copió solo en parte, lo cortó una columna de base de datos como un TEXT de MySQL (65.535 bytes) o lo acortó un límite de longitud de línea de log. Vuelve a obtener la cadena completa; la decodificación no puede recuperar datos que faltan.
¿Qué significa "decodificado por segunda vez"?
Los datos decodificados eran a su vez texto Base64. Pasa cuando tu código codifica un valor una vez y un framework o cliente HTTP lo vuelve a codificar. La herramienta solo decodifica la capa interna cuando resulta ser un archivo reconocible, así que nunca desenvuelve por error un texto normal.
¿Hay un límite de tamaño?
El texto pegado puede llegar a 100 MB y los archivos a codificar a 50 MB. Para un Base64 muy largo, Abrir un archivo .txt es más rápido que pegar. La vista previa de texto muestra los primeros 100.000 caracteres; la descarga siempre está completa.
¿Por qué la vista previa del PDF sale en blanco en el móvil?
Los navegadores móviles manejan los PDF incrustados de forma distinta; algunos muestran solo la primera página o nada. Usa Abrir en una pestaña nueva o Descargar: el archivo en sí no se ve afectado.

Herramientas relacionadas

Ver todas las herramientas →

Tabla ASCII y convertidor de caracteres

Codificación y Formato

La tabla ASCII completa: 128 caracteres en decimal, hexadecimal, octal y binario, más un convertidor texto ↔ ASCII. Cada carácter de control trae su secuencia de escape, su notación caret y dónde te lo encuentras.

Generador de Código de Barras — EAN-13, UPC-A y Code 128

Codificación y Formato

Genera EAN-13, UPC-A, Code 128, Code 39 y 11 tipos más de código de barras en SVG o PNG listo para imprimir. Escribe 12 dígitos y el dígito de control se completa solo; si te equivocas, te decimos cuál debería ser.

Decodificador y Codificador Base64

Codificación y Formato

Decodifica y codifica Base64 online de forma gratuita. Conversión en tiempo real con soporte completo de UTF-8 y emojis. 100% privado — funciona en tu navegador. Sin registro.

Conversor de Base64 a Imagen

Codificación y Formato

Decodifica una cadena Base64 o data URI de vuelta a una imagen en tu navegador. Previsualiza, lee dimensiones y MIME, luego descarga como PNG, JPG, GIF, SVG. Sin subir.

Convertidor de CSV a JSON

Codificación y Formato

Convierte CSV a JSON en tu navegador. RFC 4180, inferencia de tipos, fila de cabecera, seguro para big-int. 100% privado, sin carga.

Conversor de codificación y reparador de mojibake

Codificación y Formato

Pega el texto ilegible y recupera el original. Se prueban y ordenan todas las cadenas de codificación plausibles — UTF-8, GBK, Big5, Shift_JIS, EUC-KR, Windows-1252 — y se muestra la cadena exacta. Gratis y todo en tu navegador.