Comment décoder du Base64 en PDF
- Collez la chaîne dans Base64 ou data URI. Une URI complète
data:application/pdf;base64,…fonctionne, tout comme les sauts de ligne, les guillemets autour, le Base64 URL-safe (-et_) et un remplissage=manquant. Pour une longue chaîne enregistrée dans un fichier, utilisez Ouvrir un fichier .txt ou déposez le fichier sur la zone ; au-delà de 4 Mo, la chaîne est décodée sans être affichée dans la zone de texte. - L’aperçu s’ouvre sous les boutons. Le décodage démarre dès que vous collez ; décochez En direct si vous préférez appuyer vous-même sur Décoder.
- Vérifiez le Nom du fichier. Il vaut d’abord
decoded, mais reprend le nom d’un paramètrename=de la data URI ou du fichier texte que vous avez ouvert :invoice.pdf.b64.txtdevientinvoice.pdf. - Appuyez sur Télécharger le fichier. Le lien ouvrez-le dans un nouvel onglet sous l’aperçu affiche le même PDF en grand.
Un PDF d’exemple est chargé à l’ouverture de la page : vous voyez ainsi à quoi ressemble un résultat correct avant de coller le vôtre.
D’où viennent les PDF en Base64
Le JSON ne peut pas transporter d’octets bruts : les services qui renvoient des documents via une API JSON les envoient donc sous forme de chaîne Base64, souvent dans un champ nommé content, document, file ou label.
- Les API d’étiquettes et de logistique renvoient l’étiquette d’expédition imprimable sous forme de PDF en Base64. La même requête peut souvent produire du ZPL ou du PNG à la place, selon un paramètre de format : un champ « PDF » n’est donc pas toujours un PDF (voir le tableau plus bas).
- Les services de signature électronique renvoient le document signé, et souvent un certificat d’audit séparé, en Base64 dans la réponse de finalisation ou le webhook.
- Les factures électroniques au format XML UBL intègrent une copie PDF lisible dans un élément comme
<cbc:EmbeddedDocumentBinaryObject mimeCode="application/pdf" filename="INV-1001.pdf">. Copiez le texte entre les balises ; l’attributfilenamevous indique quoi saisir dans Nom du fichier. - Dans la source brute d’un e-mail, une pièce jointe PDF est une partie MIME avec
Content-Transfer-Encoding: base64et des lignes de 76 caractères. Collez uniquement le bloc encodé, ou ouvrez le message entier dans le décodeur EML, qui liste chaque pièce jointe. Base64 dans les e-mails explique la structure. - Les documents stockés dans des colonnes BLOB d’une base de données sont souvent exportés en texte.
encode(data, 'base64')de PostgreSQL etTO_BASE64()de MySQL ou MariaDB insèrent tous deux un saut de ligne tous les 76 caractères ; le décodeur les ignore.
Pour une réponse JSON contenant plusieurs champs encodés, décoder le Base64 dans du JSON les trouve et les décode tous d’un coup. Pour aller dans l’autre sens, d’un fichier PDF vers une chaîne, utilisez PDF en Base64.
Ce que montre l’aperçu
| Champ | Provenance |
|---|---|
| Version PDF | La ligne d’en-tête, par exemple %PDF-1.7 |
| Pages | Compté à partir des objets page du fichier (voir ci-dessous) |
| Titre | Le titre des informations du document, s’il est stocké en texte simple |
| Chiffré | Présent quand le fichier a un dictionnaire de chiffrement : mot de passe d’ouverture, ou seulement des restrictions de permissions |
| SHA-256 | Empreinte des octets décodés. Comparez-la avec sha256sum invoice.pdf côté expéditeur pour prouver que le fichier est arrivé intact |
L’aperçu lui-même est la visionneuse PDF de votre navigateur, qui affiche les octets décodés depuis une URL blob: locale. Chrome, Edge, Firefox et Safari pour ordinateur l’affichent dans la page. Il reste vide si le navigateur est réglé pour télécharger les PDF au lieu de les ouvrir (Chrome : Paramètres, Confidentialité et sécurité, Paramètres des sites, Paramètres de contenu supplémentaires, Documents PDF ; Firefox : Paramètres, Général, Applications, Portable Document Format), et beaucoup de navigateurs mobiles ne savent pas du tout afficher un PDF dans une page. Dans ces cas, ouvrez-le dans un nouvel onglet ou Télécharger le fichier fonctionnent toujours, et la liste d’informations au-dessus de l’aperçu est remplie dans tous les cas.
Comment le nombre de pages est calculé
L’outil n’affiche pas le PDF pour compter les pages. Il compte les objets page (/Type /Page) dans les 32 premiers Mo du fichier. S’il n’en voit aucun, il lit l’entrée /Count de l’arbre des pages, et si celle-ci est également cachée, il affiche inconnu. Deux situations font différer ce nombre de celui de la visionneuse :
- Trop de pages. Un PDF modifié, annoté ou signé après sa création est souvent enregistré de façon incrémentale : les pages modifiées sont ajoutées comme nouveaux objets et les anciennes versions restent dans le fichier. Dans un fichier de test de 2 pages dont une a été réécrite, le décompte est de 3.
- Inconnu. Depuis PDF 1.5, les objets peuvent être regroupés dans des flux d’objets compressés : ni les objets page ni l’arbre des pages ne peuvent alors être lus sans les décompresser.
Quand les deux divergent, c’est le nombre de pages de la visionneuse qui est juste.
Quand le résultat n’est pas un PDF
Si les octets décodés sont autre chose, une note au-dessus des champs indique ce qui a été trouvé, par exemple « Cela ressemble à HTML, pas à un fichier PDF. », avec un bouton Télécharger en .html. Le début du Base64 explique souvent ce qui s’est passé :
| Le Base64 commence par | Ce que vous avez |
|---|---|
JVBERi0 | Un PDF (%PDF-) |
SlZCRVJpMH | Un PDF encodé deux fois : le Base64 de JVBERi0… |
H4sI | Des données compressées avec gzip |
PCFET0NUWVBF, PCFkb2N0eXBl, PGh0bWw | Une page HTML, en général une page d’erreur ou de connexion |
eyJ | Du JSON, souvent un message d’erreur comme {"error":… |
XlhB | Une étiquette ZPL (^XA) pour imprimantes thermiques |
iVBORw0KGgo | Une image PNG |
Pour une chaîne encodée deux fois ou des données gzip, l’outil affiche une seconde note avec Décoder à nouveau, qui remplace l’entrée par la couche intérieure ; Retour revient à ce que vous aviez collé. Pour un fichier endommagé ou non reconnu, la note indique « Cela ne ressemble pas à un fichier PDF » et nomme le type détecté, et l’extension reste .pdf pour que vous puissiez quand même télécharger les octets et essayer un autre lecteur.
Les erreurs avant le décodage ont leurs propres causes :
- Les échappements d’un JSON brut, comme
\/(json_encodede PHP écrit les barres obliques ainsi) ou un\nlittéral entre les lignes, sont supprimés automatiquement. Si un autre échappement\déclenche encore Caractère\non valide, utilisez Réparer du Base64, ou analysez d’abord le JSON et copiez la valeur. - Caractère
%non valide signifie que la chaîne a été encodée pour une URL. Les échappements de+,/et=(%2B,%2F,%3D) sont corrigés automatiquement ; pour le reste, passez d’abord la chaîne dans le décodeur d’URL. - Un PDF détecté mais qui n’affiche rien est en général tronqué. L’en-tête a survécu, la détection réussit donc, mais la fin du fichier, où se trouve la table des références croisées, manque. Voir les erreurs Base64 pour les autres suspects habituels.
Décoder du Base64 en PDF dans le code
En Python, à partir d’une réponse 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)
b64decode supprime en silence les caractères hors de l’alphabet standard : une chaîne URL-safe avec - et _ se décode donc en données inutilisables sans erreur. Utilisez base64.urlsafe_b64decode dans ce cas. Node.js accepte les deux alphabets en un seul appel :
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);
Dans un shell, jq -r est important : sans -r, la valeur garde ses guillemets et base64 -d s’arrête avec « invalid input ».
jq -r '.document' response.json | base64 -d > document.pdf
La clé document représente le nom que votre API donne au champ. D’autres modèles se trouvent sur Base64 en Python, Base64 en Node.js et Base64 en Bash.
FAQ
Comment convertir une chaîne Base64 en fichier PDF ?
Collez la chaîne dans la zone ci-dessus, vérifiez l’aperçu et appuyez sur Télécharger le fichier. Depuis du JSON, copiez uniquement la valeur entre les guillemets ; un préfixe data:application/pdf;base64, et les sauts de ligne peuvent rester.
Pourquoi le PDF décodé s'ouvre-t-il comme endommagé ou vide ?
Presque toujours, la chaîne a été raccourcie par une limite de longueur de ligne de log, une colonne de base de données ou une limite de copier-coller : la fin du fichier manque. Un PDF complet se termine par %%EOF ; comparez la taille décodée avec celle qu’indique l’expéditeur.
Puis-je afficher un PDF protégé par mot de passe ?
Oui. La liste d’informations affiche Chiffré : oui, et les visionneuses intégrées de Chrome et de Firefox demandent le mot de passe dans l’aperçu. Le fichier téléchargé est inchangé et s’ouvre avec le même mot de passe.
Pourquoi l'outil dit-il que mon Base64 n'est pas un PDF ?
Les octets décodés ne commencent pas par %PDF-. Le plus souvent, l’API a envoyé une page d’erreur ou un message JSON au lieu du document ; l’avertissement nomme ce qui a été trouvé et propose de l’enregistrer avec l’extension correspondante pour que vous puissiez le lire.
Est-il sûr de décoder ici un PDF confidentiel ?
Le PDF est décodé et affiché dans votre navigateur, et la Content Security Policy de la page l’empêche d’effectuer des requêtes réseau autres que le comptage des pages vues de Cloudflare. Vous pouvez même vous déconnecter une fois la page chargée et continuer à l’utiliser.