Comment convertir un PDF en Base64
- Déposez le PDF dans la zone ou choisissez-le avec le sélecteur de fichiers. Plusieurs PDF à la fois ne posent pas de problème.
- Choisissez le format sous Sortie en. Cette page démarre sur Base64 brut, ce que veulent la plupart des API.
- Ne cochez Couper à 76 que si la chaîne va dans un e-mail MIME brut. Laissez l’option désactivée pour le JSON et le HTML.
- Appuyez sur Copier la sortie. Pour les gros documents, utilisez Enregistrer en .txt, qui écrit
yourfile.pdf.b64.txt.
La ligne d’infos affiche le nom du fichier, sa taille et son type MIME, et les compteurs en dessous indiquent la taille encodée et le surcoût. Le PDF est lu par votre navigateur et n’est pas envoyé ; la Content Security Policy de la page ne lui permet d’effectuer aucune requête réseau hormis le comptage des pages vues de Cloudflare.
Où l’on utilise un PDF en Base64
JSON ne peut pas transporter d’octets bruts : les services qui acceptent des documents dans le corps de la requête les reçoivent donc en Base64. Les plateformes de signature électronique, les systèmes de facturation et de comptabilité, les services d’OCR et d’analyse de documents, et les modèles d’IA qui lisent des PDF suivent tous ce schéma. Les noms de champs varient d’une API à l’autre, mais la structure comprend généralement un nom de fichier, un type MIME et une chaîne Base64.
Les modèles d’IA qui lisent directement des PDF reçoivent généralement le fichier de la même façon : des données Base64 plus le type de média application/pdf, en champs séparés ou en une seule data URI. Ils limitent souvent la taille et le nombre de pages : découpez les longs documents avant l’encodage.
Les pièces jointes des e-mails MIME sont du Base64 en lignes de 76 caractères au plus. Si vous assemblez un message à la main ou testez une bibliothèque SMTP, Couper à 76 vous donne exactement le corps d’une partie comme celle-ci :
Content-Type: application/pdf; name="invoice.pdf"
Content-Disposition: attachment; filename="invoice.pdf"
Content-Transfer-Encoding: base64
JVBERi0xLjcKJeLjz9MK...
Les API d’envoi d’e-mails qui acceptent du JSON veulent plutôt la pièce jointe sans coupure, dans un champ. Plus d’informations dans Base64 dans les e-mails, et le décodeur EML extrait les pièces jointes d’un message brut.
Pour encoder plusieurs PDF, déposez un lot et appuyez sur Tout copier en JSON pour obtenir un tableau avec un objet {name, type, size, data} par document, pratique pour alimenter une base de données de test ou un import en masse.
Pour les liens de téléchargement, la sortie HTML <a download> produit un lien qui enregistre le PDF au clic :
<a href="data:application/pdf;base64,JVBERi0xLjcK..." download="invoice.pdf">invoice.pdf</a>
C’est pratique pour les rapports HTML en un seul fichier. Un lien vers la data URI sans download échoue généralement : Chrome bloque la navigation déclenchée par une page vers des URL data: dans la fenêtre principale, et le clic n’ouvre rien ou un onglet vide. Firefox fait une exception pour les PDF, ce qui explique qu’un lien puisse fonctionner dans un navigateur et pas dans un autre.
Un petit PDF stocké sous forme de constante Base64 permet à un test unitaire d’exercer un chemin d’envoi ou d’analyse sans fichier de fixture à côté.
Par quoi commence le Base64 d’un PDF
Tout PDF commence par %PDF- et un numéro de version, suivis d’un saut de ligne. En Base64, cet en-tête se repère facilement :
| En-tête du fichier | Base64 |
|---|---|
%PDF-1.4 + saut de ligne | JVBERi0xLjQK |
%PDF-1.5 + saut de ligne | JVBERi0xLjUK |
%PDF-1.7 + saut de ligne | JVBERi0xLjcK |
%PDF-2.0 + saut de ligne | JVBERi0yLjAK |
Si votre sortie ne commence pas par JVBERi0, le fichier choisi n’est pas un PDF, ou des données parasites précèdent l’en-tête. Une chaîne qui commence par PCFET0NUWVBF (<!DOCTYPE) ou PGh0bWw (<html) est du HTML, ce qui signifie souvent qu’un lien de téléchargement a enregistré une page d’erreur sous un nom en .pdf.
Quelle taille atteint le PDF encodé
La sortie Base64 compte 4 caractères pour 3 octets, et la coupure ajoute un saut de ligne tous les 76 caractères :
| Taille du PDF | Longueur Base64 | Avec Couper à 76 |
|---|---|---|
| 100 Ko | 136 536 car. | 138 332 car. |
| 1 Mo | 1 398 104 car. | 1 416 500 car. |
| 5 Mo | 6 990 508 car. | 7 082 488 car. |
| 10 Mo | 13 981 016 car. | 14 164 976 car. |
| 25 Mo | 34 952 536 car. | 35 412 437 car. |
Les tailles sont en unités binaires (1 Mo = 1 048 576 octets). Comparez la limite de taille des requêtes de l’API avec la taille encodée, pas avec la taille du fichier. Si l’API accepte aussi un envoi multipart ou une URL présignée, cette voie évite le surcoût et convient mieux aux documents de plusieurs dizaines de mégaoctets. Le calculateur de taille fait ce calcul pour n’importe quelle taille.
Cet outil encode les gros PDF dans votre navigateur, mais il ne copie pas dans le presse-papiers une sortie de plus de 48 Mo environ. Utilisez Enregistrer en .txt dans ce cas.
Encoder un PDF dans le code
Python, en construisant un corps 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 });
Depuis un shell avec GNU coreutils et jq (-w 0 désactive la coupure des lignes) :
base64 -w 0 invoice.pdf > invoice.b64
jq -n --rawfile content invoice.b64 '{filename: "invoice.pdf", content: $content}'
Les clés filename et content sont des exemples ; utilisez les noms documentés par votre API. D’autres options sur Base64 en Python et Base64 en Node.js.
Problèmes courants
- L’API dit que le Base64 n’est pas valide. Le plus souvent, le préfixe
data:application/pdf;base64,est inclus alors que l’API veut du Base64 seul, ou des sauts de ligne sont restés, issus debase64sans-w 0, d’openssl base64(qui coupe à 64) ou de Couper à 76. Certaines API rejettent aussi le Base64 URL-safe. - Le PDF décodé est corrompu ou vide. La chaîne a été coupée quelque part, souvent par une limite de longueur de ligne de log, une colonne de base de données trop courte ou une cellule de tableur. Comparez la longueur avec le tableau ci-dessus. Les derniers octets d’un PDF sont
%%EOF: un encodage complet se décode donc en quelque chose qui se termine par ce marqueur. - Le PDF s’ouvre chez vous, mais le destinataire voit une page blanche. Base64 ne modifie pas le document : le problème vient donc du PDF lui-même, qu’il s’agisse de polices manquantes, d’une version de PDF inhabituelle ou d’une table de références croisées endommagée. Vérifiez en décodant la chaîne avec Base64 en PDF et en ouvrant le résultat.
- Base64 n’est pas du chiffrement. Quiconque possède la chaîne peut décoder le document. Si le PDF est confidentiel, protégez le canal ou chiffrez le fichier ; voir encodage ou chiffrement.
FAQ
Comment envoyer un PDF dans une requête JSON ?
Encodez le fichier en Base64 brut et placez la chaîne dans le champ que votre API documente pour le contenu du fichier, généralement à côté d’un nom de fichier et d’un type MIME application/pdf. La sortie JSON vous donne un objet prêt à adapter, avec name, type, size et data.
Puis-je convertir un PDF protégé par mot de passe en Base64 ?
Oui. Base64 encode les octets tels quels, chiffrement compris. Le fichier encodé reste protégé, et la personne qui le décode a toujours besoin du mot de passe pour l’ouvrir.
Comment reconnaître un PDF encodé en Base64 ?
Il commence par JVBERi0, l’encodage de %PDF-. Les caractères suivants indiquent la version, par exemple JVBERi0xLjc pour PDF 1.7.
Pourquoi mon lien PDF en Base64 ouvre-t-il un onglet vide ?
Chrome empêche les pages de faire naviguer la fenêtre principale vers une URL data:, et les autres navigateurs le restreignent aussi. Utilisez la sortie HTML <a download>, qui enregistre le fichier au lieu de l’ouvrir, ou créez une URL Blob en JavaScript.
Quelle taille fera mon PDF en Base64 ?
Environ les 4/3 de la taille du fichier : un PDF de 3 Mo devient environ 4 Mo de texte. Le compteur de surcoût sous la sortie donne la valeur exacte, et Base64 en PDF fait l’opération inverse.