So dekodieren Sie Base64 in PDF
- Fügen Sie die Zeichenkette in Base64 oder Data-URI ein. Eine vollständige URI
data:application/pdf;base64,…funktioniert, ebenso Zeilenumbrüche, umschließende Anführungszeichen, URL-sicheres Base64 (-und_) und fehlendes=-Padding. Für eine lange, in einer Datei gespeicherte Zeichenkette nutzen Sie .txt-Datei öffnen oder legen die Datei auf dem Feld ab; alles über 4 MB wird dekodiert, ohne im Textfeld angezeigt zu werden. - Die Vorschau öffnet sich unter den Schaltflächen. Das Dekodieren beginnt schon beim Einfügen; deaktivieren Sie Live, wenn Sie lieber selbst auf Dekodieren drücken.
- Prüfen Sie Dateiname. Er lautet zunächst
decoded, übernimmt aber den Namen aus einem Parametername=in der Data-URI oder aus der geöffneten Textdatei: Ausinvoice.pdf.b64.txtwirdinvoice.pdf. - Drücken Sie Datei herunterladen. Der Link öffnen Sie sie in einem neuen Tab unter der Vorschau zeigt dasselbe PDF in voller Größe.
Beim Öffnen der Seite ist ein Beispiel-PDF geladen, damit Sie sehen, wie ein funktionierendes Ergebnis aussieht, bevor Sie Ihr eigenes einfügen.
Woher Base64-PDFs kommen
JSON kann keine rohen Bytes transportieren, daher schicken Dienste, die Dokumente über eine JSON-API zurückgeben, sie als Base64-Zeichenkette, oft in einem Feld wie content, document, file oder label.
- Label- und Logistik-APIs liefern das druckbare Versandetikett als Base64-PDF. Dieselbe Anfrage kann je nach Formatparameter oft auch ZPL oder PNG erzeugen, ein „PDF“-Feld ist also nicht immer ein PDF (siehe die Tabelle weiter unten).
- E-Signatur-Dienste liefern das signierte Dokument und häufig ein separates Prüfprotokoll als Base64 in der Abschlussantwort oder im Webhook.
- E-Rechnungen im XML-Format UBL betten eine lesbare PDF-Kopie in ein Element wie
<cbc:EmbeddedDocumentBinaryObject mimeCode="application/pdf" filename="INV-1001.pdf">ein. Kopieren Sie den Text zwischen den Tags; das Attributfilenamesagt Ihnen, was Sie in Dateiname eintragen. - Im Quelltext einer E-Mail ist ein PDF-Anhang ein MIME-Teil mit
Content-Transfer-Encoding: base64und Zeilen zu 76 Zeichen. Fügen Sie nur den kodierten Block ein, oder öffnen Sie die ganze Nachricht im EML-Decoder, der jeden Anhang auflistet. Base64 in E-Mails erklärt die Struktur. - In BLOB-Spalten einer Datenbank gespeicherte Dokumente werden oft als Text exportiert. PostgreSQLs
encode(data, 'base64')undTO_BASE64()in MySQL oder MariaDB fügen beide nach jeweils 76 Zeichen einen Zeilenumbruch ein; der Decoder überspringt sie.
Für eine JSON-Antwort mit mehreren kodierten Feldern findet und dekodiert Base64 in JSON dekodieren alle auf einmal. Für die Gegenrichtung, von einer PDF-Datei zur Zeichenkette, nutzen Sie PDF in Base64.
Was die Vorschau zeigt
| Feld | Woher es stammt |
|---|---|
| PDF-Version | Aus der Kopfzeile, zum Beispiel %PDF-1.7 |
| Seiten | Gezählt aus den Seitenobjekten der Datei (siehe unten) |
| Titel | Der Titel aus den Dokumentinformationen, sofern er als reiner Text gespeichert ist |
| Verschlüsselt | Vorhanden, wenn die Datei ein Verschlüsselungs-Dictionary hat: ein Passwort zum Öffnen oder nur Einschränkungen der Berechtigungen |
| SHA-256 | Hash der dekodierten Bytes. Vergleichen Sie ihn mit sha256sum invoice.pdf auf der Seite des Absenders, um zu belegen, dass die Datei unversehrt angekommen ist |
Die Vorschau selbst ist der PDF-Viewer Ihres Browsers, der die dekodierten Bytes aus einer lokalen blob:-URL anzeigt. Chrome, Edge, Firefox und Safari auf dem Desktop zeigen sie inline an. Sie bleibt leer, wenn der Browser PDFs herunterladen statt öffnen soll (Chrome: Einstellungen, Datenschutz und Sicherheit, Website-Einstellungen, Zusätzliche Inhaltseinstellungen, PDF-Dokumente; Firefox: Einstellungen, Allgemein, Anwendungen, Portable Document Format), und viele mobile Browser können ein PDF überhaupt nicht innerhalb einer Seite darstellen. In diesen Fällen funktionieren öffnen Sie sie in einem neuen Tab und Datei herunterladen trotzdem, und die Infoliste über der Vorschau wird in jedem Fall ausgefüllt.
Wie die Seitenzahl ermittelt wird
Das Tool rendert das PDF nicht, um Seiten zu zählen. Es zählt die Seitenobjekte (/Type /Page) in den ersten 32 MB der Datei. Sind keine sichtbar, liest es den Eintrag /Count des Seitenbaums, und ist auch dieser verborgen, zeigt es unbekannt. Zwei Situationen führen dazu, dass die Zahl von der des Viewers abweicht:
- Zu viele Seiten. Ein PDF, das nach dem Erstellen bearbeitet, kommentiert oder signiert wurde, wird oft inkrementell gespeichert: Geänderte Seiten werden als neue Objekte angehängt, und die alten Versionen bleiben in der Datei. In einer Testdatei mit 2 Seiten und einer neu geschriebenen Seite ergibt die Zählung 3.
- Unbekannt. Seit PDF 1.5 lassen sich Objekte in komprimierte Objekt-Streams packen, und dann sind weder die Seitenobjekte noch der Seitenbaum lesbar, ohne sie zu entpacken.
Widersprechen sich beide, ist die Seitenzahl des Viewers die richtige.
Wenn das Ergebnis kein PDF ist
Sind die dekodierten Bytes etwas anderes, sagt ein Hinweis über den Feldern, was gefunden wurde, zum Beispiel „Erkannt: HTML, erwartet: PDF.“, mit einer Schaltfläche Als .html herunterladen. Der Anfang des Base64 erklärt oft, was passiert ist:
| Base64 beginnt mit | Was Sie haben |
|---|---|
JVBERi0 | Ein PDF (%PDF-) |
SlZCRVJpMH | Ein zweimal kodiertes PDF: das Base64 von JVBERi0… |
H4sI | gzip-komprimierte Daten |
PCFET0NUWVBF, PCFkb2N0eXBl, PGh0bWw | Eine HTML-Seite, meist eine Fehler- oder Login-Seite |
eyJ | JSON, oft eine Fehlermeldung wie {"error":… |
XlhB | Ein ZPL-Etikett (^XA) für Thermodrucker |
iVBORw0KGgo | Ein PNG-Bild |
Bei einer doppelt kodierten Zeichenkette oder gzip-Daten zeigt das Tool einen zweiten Hinweis mit Erneut dekodieren, das die Eingabe durch die innere Schicht ersetzt; Zurück kehrt zu dem zurück, was Sie eingefügt haben. Bei einer beschädigten oder nicht erkannten Datei lautet der Hinweis „Erwartet: PDF, erkannt: …“ und nennt den erkannten Typ, und die Endung bleibt .pdf, damit Sie die Bytes trotzdem herunterladen und einen anderen Reader ausprobieren können.
Fehler vor dem Dekodieren haben eigene Ursachen:
- Escapes aus rohem JSON, etwa
\/(so schreibt PHPsjson_encodeSchrägstriche) oder ein literales\nzwischen den Zeilen, werden automatisch entfernt. Löst ein anderes\-Escape trotzdem Ungültiges Zeichen\aus, nutzen Sie Base64 reparieren oder parsen Sie zuerst das JSON und kopieren den Wert. - Ungültiges Zeichen
%bedeutet, dass die Zeichenkette URL-kodiert wurde. Die Escapes für+,/und=(%2B,%2F,%3D) werden automatisch korrigiert; für alles andere schicken Sie die Zeichenkette zuerst durch den URL-Decoder. - Ein PDF, das erkannt wird, aber nichts zeigt, ist meist abgeschnitten. Der Header übersteht das, die Erkennung gelingt also, aber das Ende der Datei mit der Querverweistabelle fehlt. Weitere übliche Verdächtige finden Sie unter Base64-Fehler.
Base64 im Code in PDF dekodieren
Python, aus einer JSON-Antwort:
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 verwirft stillschweigend Zeichen außerhalb des Standardalphabets, eine URL-sichere Zeichenkette mit - und _ wird also ohne Fehlermeldung zu Datenmüll dekodiert. Verwenden Sie dafür base64.urlsafe_b64decode. Node.js akzeptiert beide Alphabete in einem Aufruf:
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);
In der Shell ist jq -r wichtig: Ohne -r behält der Wert seine Anführungszeichen, und base64 -d bricht mit „invalid input“ ab.
jq -r '.document' response.json | base64 -d > document.pdf
Der Schlüssel document ist ein Platzhalter für den Namen, den Ihre API dem Feld gibt. Weitere Muster finden Sie unter Base64 in Python, Base64 in Node.js und Base64 in Bash.
Häufige Fragen
Wie wandle ich eine Base64-Zeichenkette in eine PDF-Datei um?
Fügen Sie die Zeichenkette oben in das Feld ein, prüfen Sie die Vorschau und drücken Sie Datei herunterladen. Aus JSON kopieren Sie nur den Wert zwischen den Anführungszeichen; ein Präfix data:application/pdf;base64, und Zeilenumbrüche dürfen bleiben.
Warum öffnet sich das dekodierte PDF als beschädigt oder leer?
Fast immer wurde die Zeichenkette durch ein Zeilenlimit im Log, eine Datenbankspalte oder eine Begrenzung beim Kopieren gekürzt, sodass das Ende der Datei fehlt. Ein vollständiges PDF endet mit %%EOF; vergleichen Sie die dekodierte Größe mit der Angabe des Absenders.
Kann ich ein passwortgeschütztes PDF ansehen?
Ja. Die Infoliste zeigt Verschlüsselt: ja, und die eingebauten Viewer von Chrome und Firefox fragen in der Vorschau nach dem Passwort. Die heruntergeladene Datei ist unverändert und öffnet sich mit demselben Passwort.
Warum sagt das Tool, mein Base64 sei kein PDF?
Die dekodierten Bytes beginnen nicht mit %PDF-. Meist hat die API statt des Dokuments eine Fehlerseite oder eine JSON-Meldung geschickt; die Warnung nennt, was gefunden wurde, und bietet an, es mit dieser Endung zu speichern, damit Sie es lesen können.
Ist es sicher, ein vertrauliches PDF hier zu dekodieren?
Das PDF wird in Ihrem Browser dekodiert und angezeigt, und die Content Security Policy der Seite lässt außer dem Seitenaufrufzähler von Cloudflare keine Netzwerkanfragen zu. Sie können nach dem Laden der Seite sogar offline gehen und sie weiter nutzen.