So wandeln Sie ein PDF in Base64 um
- Legen Sie das PDF auf dem Feld ab oder wählen Sie es über die Dateiauswahl. Mehrere PDFs auf einmal sind kein Problem.
- Wählen Sie unter Ausgabe als das Format. Diese Seite startet mit Reines Base64, das die meisten APIs erwarten.
- Aktivieren Sie Umbruch bei 76 nur, wenn die Zeichenkette in eine rohe MIME-E-Mail kommt. Für JSON und HTML lassen Sie es aus.
- Drücken Sie Ausgabe kopieren. Für große Dokumente nutzen Sie Als .txt speichern, das
yourfile.pdf.b64.txtschreibt.
Die Infozeile zeigt Dateiname, Größe und MIME-Typ, die Zähler darunter die kodierte Größe und den Zuwachs. Das PDF wird von Ihrem Browser gelesen und nicht hochgeladen; die Content Security Policy der Seite erlaubt keine Netzwerkanfragen außer dem Seitenaufrufzähler von Cloudflare.
Wo ein Base64-PDF verwendet wird
JSON kann keine rohen Bytes transportieren, daher nehmen Dienste, die Dokumente im Request-Body annehmen, sie als Base64 entgegen. E-Signatur-Plattformen, Rechnungs- und Buchhaltungssysteme, OCR- und Dokumentanalyse-Dienste sowie KI-Modelle, die PDFs lesen, folgen alle diesem Muster. Die Feldnamen unterscheiden sich von API zu API, die Form ist aber meist ein Dateiname, ein MIME-Typ und eine Base64-Zeichenkette.
KI-Modelle, die PDFs direkt lesen, nehmen die Datei meist auf dieselbe Weise an: Base64-Daten plus den Medientyp application/pdf, entweder als separate Felder oder als eine Data-URI. Sie begrenzen oft Dateigröße und Seitenzahl, teilen Sie lange Dokumente also vor dem Kodieren.
Anhänge in MIME-E-Mails sind Base64 mit Zeilen von höchstens 76 Zeichen. Bauen Sie eine Nachricht von Hand zusammen oder testen Sie eine SMTP-Bibliothek, liefert Umbruch bei 76 genau den Inhalt eines solchen Teils:
Content-Type: application/pdf; name="invoice.pdf"
Content-Disposition: attachment; filename="invoice.pdf"
Content-Transfer-Encoding: base64
JVBERi0xLjcKJeLjz9MK...
Mail-APIs, die JSON annehmen, wollen den Anhang dagegen ohne Umbruch in einem Feld. Mehr dazu unter Base64 in E-Mails, und der EML-Decoder holt Anhänge aus einer Rohnachricht.
Um mehrere PDFs zu kodieren, legen Sie einen Stapel ab und drücken Alles als JSON kopieren. Sie erhalten ein Array mit einem {name, type, size, data}-Objekt pro Dokument, praktisch zum Befüllen einer Testdatenbank oder für einen Massenimport.
Für Download-Links erzeugt die Ausgabe HTML <a download> einen Link, der das PDF beim Klicken speichert:
<a href="data:application/pdf;base64,JVBERi0xLjcK..." download="invoice.pdf">invoice.pdf</a>
Das ist praktisch für HTML-Berichte in einer Datei. Ein Link auf die Data-URI ohne download scheitert meist: Chrome blockiert von der Seite ausgelöste Navigation zu data:-URLs im Hauptfenster, der Klick öffnet also nichts oder einen leeren Tab. Firefox macht für PDFs eine Ausnahme, weshalb ein Link in einem Browser funktionieren kann und in einem anderen nicht.
Mit einem kleinen PDF als Base64-Konstante durchläuft ein Unit-Test einen Upload- oder Parsing-Pfad, ohne dass eine Fixture-Datei daneben liegen muss.
Womit das Base64 eines PDFs beginnt
Jedes PDF beginnt mit %PDF- und einer Versionsnummer, gefolgt von einem Zeilenumbruch. In Base64 ist dieser Header leicht zu erkennen:
| Datei-Header | Base64 |
|---|---|
%PDF-1.4 + Zeilenumbruch | JVBERi0xLjQK |
%PDF-1.5 + Zeilenumbruch | JVBERi0xLjUK |
%PDF-1.7 + Zeilenumbruch | JVBERi0xLjcK |
%PDF-2.0 + Zeilenumbruch | JVBERi0yLjAK |
Beginnt Ihre Ausgabe nicht mit JVBERi0, ist die gewählte Datei kein PDF, oder vor dem Header steht Datenmüll. Eine Zeichenkette, die mit PCFET0NUWVBF (<!DOCTYPE) oder PGh0bWw (<html) beginnt, ist HTML. Das bedeutet oft, dass ein Download-Link eine Fehlerseite unter einem .pdf-Namen gespeichert hat.
Wie groß das kodierte PDF wird
Base64 erzeugt 4 Zeichen für je 3 Bytes, und der Umbruch fügt pro 76 Zeichen einen Zeilenumbruch hinzu:
| PDF-Größe | Base64-Länge | Mit Umbruch bei 76 |
|---|---|---|
| 100 KB | 136.536 Zeichen | 138.332 Zeichen |
| 1 MB | 1.398.104 Zeichen | 1.416.500 Zeichen |
| 5 MB | 6.990.508 Zeichen | 7.082.488 Zeichen |
| 10 MB | 13.981.016 Zeichen | 14.164.976 Zeichen |
| 25 MB | 34.952.536 Zeichen | 35.412.437 Zeichen |
Die Größen sind in binären Einheiten angegeben (1 MB = 1.048.576 Bytes). Vergleichen Sie das Größenlimit einer API mit der kodierten Größe, nicht mit der Dateigröße. Nimmt die API auch einen Multipart-Upload oder eine vorsignierte URL an, entfällt auf diesem Weg der Mehraufwand, was für Dokumente mit Dutzenden Megabyte besser passt. Der Größenrechner rechnet das für jede Größe aus.
Dieses Tool kodiert auch große PDFs in Ihrem Browser, kopiert Ausgaben über etwa 48 MB aber nicht in die Zwischenablage. Nutzen Sie dann Als .txt speichern.
Ein PDF im Code kodieren
Python, mit einem JSON-Body:
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 });
In einer Shell mit GNU coreutils und jq (-w 0 schaltet den Zeilenumbruch ab):
base64 -w 0 invoice.pdf > invoice.b64
jq -n --rawfile content invoice.b64 '{filename: "invoice.pdf", content: $content}'
Die Schlüssel filename und content sind Platzhalter; verwenden Sie die Namen, die Ihre API dokumentiert. Weitere Optionen unter Base64 in Python und Base64 in Node.js.
Häufige Probleme
- Die API meldet ungültiges Base64. Meist ist das Präfix
data:application/pdf;base64,enthalten, wo die API reines Base64 will, oder es stecken Zeilenumbrüche darin, etwa vonbase64ohne-w 0, vonopenssl base64(bricht nach 64 um) oder von Umbruch bei 76. Manche APIs lehnen auch URL-sicheres Base64 ab. - Das dekodierte PDF ist beschädigt oder leer. Die Zeichenkette wurde irgendwo abgeschnitten, oft durch ein Zeilenlimit in Logs, eine zu kurze Datenbankspalte oder eine Tabellenzelle. Vergleichen Sie die Länge mit der Tabelle oben. Die letzten Bytes eines PDFs sind
%%EOF, eine vollständige Kodierung ergibt dekodiert also etwas, das mit dieser Markierung endet. - Das PDF öffnet sich bei Ihnen, der Empfänger sieht aber eine leere Seite. Base64 verändert das Dokument nicht, das Problem liegt also im PDF selbst: fehlende Schriften, eine ungewöhnliche PDF-Version oder eine beschädigte Querverweistabelle. Testen Sie, indem Sie die Zeichenkette mit Base64 in PDF dekodieren und das Ergebnis öffnen.
- Base64 ist keine Verschlüsselung. Jeder, der die Zeichenkette hat, kann das Dokument dekodieren. Ist das PDF vertraulich, schützen Sie den Übertragungsweg oder verschlüsseln Sie es; siehe Kodierung vs. Verschlüsselung.
Häufige Fragen
Wie sende ich ein PDF in einem JSON-Request?
Kodieren Sie die Datei als reines Base64 und setzen Sie die Zeichenkette in das Feld, das Ihre API für den Dateiinhalt dokumentiert, meist neben einem Dateinamen und dem MIME-Typ application/pdf. Die Ausgabe JSON liefert ein fertiges Objekt mit name, type, size und data, das Sie anpassen können.
Kann ich ein passwortgeschütztes PDF in Base64 umwandeln?
Ja. Base64 kodiert die Bytes so, wie sie sind, samt Verschlüsselung. Die kodierte Datei bleibt geschützt, und wer sie dekodiert, braucht zum Öffnen weiterhin das Passwort.
Woran erkenne ich ein Base64-kodiertes PDF?
Es beginnt mit JVBERi0, der Kodierung von %PDF-. Die nächsten Zeichen zeigen die Version, zum Beispiel JVBERi0xLjc für PDF 1.7.
Warum öffnet mein Base64-PDF-Link einen leeren Tab?
Chrome hindert Seiten daran, das Hauptfenster auf eine data:-URL zu navigieren, und andere Browser schränken das ebenfalls ein. Nutzen Sie die Ausgabe HTML <a download>, die die Datei speichert, statt sie zu öffnen, oder erzeugen Sie in JavaScript eine Blob-URL.
Wie groß wird mein PDF in Base64?
Etwa 4/3 der Dateigröße: Ein PDF mit 3 MB wird zu rund 4 MB Text. Der Zähler für den Zuwachs unter der Ausgabe zeigt den genauen Wert, und Base64 in PDF macht es rückgängig.