Skip to content

Konversi Base64 ke PDF & File · PDF ke Base64

Konversi Base64 ke PDF online: tempel Base64 mentah, data URI, atau seluruh respons JSON. Deteksi tipe file asli, pratinjau, unduh, dan peringatan jika PDF terpotong. Juga PDF ke Base64. Tidak ada yang diunggah.

Tanpa Pelacakan Berjalan di Browser Gratis
Decode dan encode berjalan sepenuhnya di browser Anda. Base64 dan file Anda tidak pernah diunggah.

Dibaca sebagai:

File apa Base64 ini? Lihat awalnya

Setiap tipe file diawali byte "magic" yang tetap, sehingga Base64-nya diawali karakter yang tetap. Prefiks di bawah dihitung dari header file sungguhan oleh mesin yang sama dengan yang dipakai alat ini.

Base64 diawali Tipe file Magic bytes (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
Perilaku diperiksa terhadap RFC 4648, RFC 2045, dan RFC 2397, serta terhadap signature file PDF, PNG, ZIP, dan Office. — Go Tools Engineering · Sep 30, 2026

Ditulis dan ditinjau oleh engineer yang membangun alat encoding Go Tools. Setiap panjang, prefiks, dan contoh di halaman ini dihasilkan oleh mesin halaman ini sendiri dan diperiksa dengan pengujian otomatis.

Base64 ke PDF — jawaban singkat

File apa yang Base64-nya diawali JVBERi0?

JVBERi0 = PDF PDF. Setiap PDF diawali byte `%PDF-`, dan byte itu menjadi `JVBERi0` dalam Base64. `iVBORw0KGgo` adalah PNG, `/9j/` adalah JPEG, dan `UEsDB` adalah ZIP, termasuk DOCX dan XLSX.

Seberapa besar Base64 dibanding file aslinya?

+33.3% 4 karakter untuk setiap 3 byte, jadi sekitar 33.3% lebih besar: PDF 1 MB (1,048,576 byte) menjadi 1,398,104 karakter. Dengan jeda baris setiap 76 karakter, seperti pada lampiran email, hasilnya 1,434,896 karakter, atau 36.8% lebih besar.

Apa itu PDF Base64?

Base64 menulis byte apa pun hanya dengan 64 karakter teks yang aman (A–Z, a–z, 0–9, +, /), dengan = sebagai padding. Setiap 3 byte menjadi 4 karakter. Dengan begitu, file biner seperti PDF bisa melewati saluran yang hanya membawa teks — field JSON, elemen XML, isi email, kolom teks database. Mengonversi Base64 ke PDF hanyalah membaliknya: ubah karakter kembali menjadi byte lalu simpan dengan ekstensi .pdf. Masalahnya, Base64 di dunia nyata jarang datang dalam keadaan bersih: ada prefiks data:, escape JSON, jeda baris, atau alfabet yang berbeda, dan banyak konverter diam-diam menghasilkan file yang tidak bisa dibuka.

%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

Fitur

Tempel apa adanya

Menangani data URI, escape JSON \/ dan \n, tanda kutip, jeda baris MIME, karakter URL-safe - _, %2B %2F dari URL, header PEM, dan padding = yang hilang — lalu menampilkan setiap langkah yang dilakukannya.

Menerima seluruh respons JSON

Tempel {"code":0,"data":{"file":"JVBERi0…"}} apa adanya. Field terpanjang yang tampak seperti Base64 akan dipakai dan path-nya (data.file) ditampilkan, jadi Anda tahu field mana yang di-decode.

Tipe asli dari magic bytes

PDF, PNG, JPEG, GIF, WebP, DOCX, XLSX, PPTX, ZIP, GZIP, MP3, MP4, dan lebih dari 40 format lain dikenali dari byte pertamanya. File yang diunduh mendapat ekstensi yang benar meskipun prefiksnya berkata lain.

Menjelaskan file yang tidak bisa dibuka

Menandai PDF tanpa %%EOF (terpotong saat disalin atau oleh batas panjang kolom), Base64 yang di-encode dua kali, hex yang ditempel sebagai Base64, data terkompresi gzip, dan PDF terenkripsi.

Pratinjau langsung

PDF dibuka di penampil bawaan browser, gambar dan SVG ditampilkan, teks dan JSON ditampilkan sebagai teks. HTML tidak pernah dirender — hanya source-nya — karena kodenya akan berjalan di halaman ini.

PDF atau file apa pun ke Base64

Jatuhkan file hingga 50 MB dan dapatkan Base64 polos atau data URI, opsional URL-safe atau dibungkus per 76 karakter, lengkap dengan besar tambahan ukurannya secara tepat.

Base64 ke PDF di Python, Java, JavaScript, dan lainnya

Python

base64.b64decode

open('out.pdf', 'wb').write(base64.b64decode(s)). Gunakan urlsafe_b64decode untuk - dan _; b64decode mengabaikan jeda baris kecuali Anda memberikan validate=True.

Java

java.util.Base64

Files.write(Path.of("out.pdf"), Base64.getMimeDecoder().decode(s)). getDecoder() menolak jeda baris; getUrlDecoder() untuk - dan _.

Node.js

Buffer

fs.writeFileSync('out.pdf', Buffer.from(s, 'base64')). Buffer menerima kedua alfabet dan mengabaikan whitespace, tetapi juga diam-diam melewati karakter ilegal lainnya alih-alih melempar error, jadi pastikan hasilnya diawali %PDF-.

JavaScript di browser

atob / Uint8Array.fromBase64

Buat Uint8Array sebelum membuat Blob. Uint8Array.fromBase64() adalah fungsi bawaan yang lebih baru; periksa dukungannya di browser target Anda.

PHP

base64_decode

file_put_contents('out.pdf', base64_decode($s, true)). Berikan true untuk mode ketat; jika tidak, karakter tidak valid dibuang diam-diam.

C#

Convert.FromBase64String

File.WriteAllBytes("out.pdf", Convert.FromBase64String(s)). Whitespace diizinkan; - dan _ tidak.

Command line

base64 -d / certutil

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

Contoh Base64 ke PDF

Base64 polos dari sebuah PDF

JVBERi0xLjQKMSAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMiAwIFIgPj4K…
PDF · versi 1.4 · diunduh sebagai file.pdf

Diawali JVBERi0, yaitu %PDF-. Tidak ada yang perlu dibersihkan, jadi langsung di-decode apa adanya.

String yang disalin dari respons JSON

"data:application\/pdf;base64,JVBERi0xLjQK…"
Dibaca sebagai: tanda kutip di sekeliling dihapus → escape JSON dikembalikan → prefiks data URI dihapus (application/pdf)

json_encode di PHP dan sebagian serializer Java menulis / sebagai \/. Jika ditempel ke decoder yang tidak mengembalikannya, backslash menjadi karakter ilegal.

Seluruh respons API

{"code":0,"data":{"name":"invoice.pdf","file":"JVBERi0xLjQK…"}}
Dibaca sebagai: field data.file diambil dari JSON

Tidak perlu memotong string secara manual. Field terpanjang yang tampak seperti Base64 dipakai dan path-nya ditampilkan.

Berlabel PDF, ternyata PNG

data:application/pdf;base64,iVBORw0KGgoAAAANSUhEUgAA…
Peringatan: data URI menyebut application/pdf, tetapi byte-nya PNG. Disimpan sebagai file.png

Banyak konverter akan menulis .pdf yang tidak bisa dibuka pembaca mana pun. Di sini magic bytes mengalahkan label.

Hex ditempel alih-alih Base64

255044462d312e370a…
Peringatan: ini tampak seperti heksadesimal — dibaca sebagai hex, isinya PDF. [Decode sebagai hex]

Semua digit hex adalah karakter Base64 yang sah, jadi decode Base64 tidak gagal; hasilnya diam-diam berupa data sampah. 25 50 44 46 adalah %PDF.

Cara mengonversi Base64 ke PDF

  1. 1

    Tempel Base64 apa adanya

    Base64 mentah, data:application/pdf;base64,…, string yang disalin dari JSON dengan escape \/, atau seluruh respons API. Untuk string yang sangat panjang, gunakan Buka file .txt alih-alih menempel.

  2. 2

    Periksa cara input dibaca

    Baris di bawah kotak mencantumkan setiap langkah pembersihan — prefiks dihapus, escape dikembalikan, padding ditambahkan, field diambil dari JSON. Jika ada yang salah, pesan error menyebutkan karakter dan posisinya secara tepat.

  3. 3

    Lihat tipe yang terdeteksi dan peringatannya

    Badge menampilkan tipe yang dibaca dari magic bytes file. Catatan kuning muncul jika file ternyata bukan PDF, jika data URI berbohong soal tipenya, atau jika PDF terpotong sebelum %%EOF.

  4. 4

    Pratinjau dan unduh

    PDF dibuka di penampil bawaan browser, gambar dan teks ditampilkan langsung. Ganti nama file jika perlu lalu klik Unduh. Untuk arah sebaliknya, pindah ke PDF / file → Base64 dan jatuhkan sebuah file.

Kenapa PDF Base64 tidak bisa dibuka: kesalahan umum

Ikut men-decode prefiks data URI bersama datanya

data:application/pdf;base64, bukan bagian dari Base64. Jika dibiarkan, decoder akan melempar error (: dan ; ilegal) atau, pada decoder yang longgar, merusak byte pertama sehingga file tidak lagi diawali %PDF-.

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

Menulis byte hasil decode sebagai teks

PDF adalah file biner. Mengubah byte hasil decode menjadi string lalu menulisnya dengan encoding teks akan mengganti byte yang tidak valid dan mengubah akhir baris, sehingga tabel cross-reference rusak.

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

Decoder ketat menerima Base64 berjeda baris

Base64.getDecoder() di Java menolak jeda baris. Base64 dari email atau dari perintah base64 di Linux dibungkus per 76 karakter. Gunakan decoder MIME, atau hapus whitespace terlebih dahulu.

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

Base64 URL-safe diberikan ke decoder standar

JWT dan banyak parameter URL memakai - dan _ sebagai ganti + dan /, serta membuang padding =. Decoder standar akan menolaknya atau menghasilkan byte yang salah.

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

Memakai hasil atob() sebagai teks

Di browser, atob mengembalikan binary string, satu karakter per byte. Jika diteruskan ke new Blob([str]), string itu di-encode sebagai UTF-8 sehingga setiap byte di atas 127 menjadi dua byte. Salin dulu ke Uint8Array.

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

String terpotong

PDF diakhiri %%EOF. Jika Base64 terpotong oleh kolom VARCHAR, batas panjang baris log, atau salinan yang tidak lengkap, file tetap bisa di-decode tetapi pembaca menampilkan error atau halaman yang hilang. Bandingkan panjangnya dengan yang dihasilkan pengirim.

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

Kapan Anda butuh Base64 ke PDF

API mengembalikan PDF sebagai Base64
API faktur, tanda tangan elektronik, dan pencetakan label sering mengembalikan dokumen di dalam JSON. Tempel responsnya untuk memeriksa dokumen sebelum menulis kode yang menyimpannya.
Debug PDF yang tidak bisa dibuka
Saat file yang disimpan kosong atau rusak, tempel Base64 yang sama di sini. Alat ini memberi tahu apakah datanya terpotong, di-encode dua kali, sama sekali bukan PDF, atau baik-baik saja — yang berarti bug-nya ada pada cara kode Anda menulis file.
Mengirim file dalam request JSON
Banyak endpoint upload mengharapkan {"filename": …, "content": "<base64>"}. Encode file di sini untuk menyusun request uji di Postman atau cURL.
Menyematkan file di HTML, CSS, atau email
Buat data URI untuk tautan PDF inline, font, atau gambar kecil, atau Base64 76 kolom untuk bagian MIME dalam email.
Membaca lampiran dari log dan database
File yang disimpan di kolom teks atau dicetak ke log bisa langsung diambil kembali — dan %%EOF yang hilang menandakan kolom atau baris log-nya terlalu pendek.

Cara kerja encoding file Base64

Kenapa Base64 33% lebih besar
Setiap karakter membawa 6 bit, jadi 3 byte (24 bit) butuh 4 karakter. Panjangnya dengan padding adalah 4 × ⌈n ÷ 3⌉: 100 KB (102,400 byte) menjadi 136,536 karakter. Pembungkusan MIME menambahkan CRLF setiap 76 karakter, sehingga 1 MB menjadi 1,434,896, bukan 1,398,104.
Alfabet standar dan URL-safe
RFC 4648 mendefinisikan dua alfabet yang hanya berbeda pada dua karakter terakhir: + / (standar, bagian 4) dan - _ (aman untuk URL dan nama file, bagian 5). Base64 URL-safe biasanya menghilangkan padding =. Jika keduanya bercampur dalam satu string, berarti string itu pernah diedit atau digabung.
Padding dan panjang yang mustahil
Padding = membuat panjang menjadi kelipatan 4. Tanpanya, sisa 2 atau 3 masih bisa dipulihkan; sisa 1 mustahil untuk Base64 yang valid — ada karakter yang hilang atau bertambah. = di tengah biasanya berarti dua string digabungkan.
Magic bytes menentukan tipe
File menyatakan formatnya di byte pertama: %PDF- untuk PDF, 89 50 4E 47 untuk PNG, 50 4B 03 04 untuk format berbasis ZIP seperti DOCX dan XLSX. Byte tersebut menentukan karakter Base64 pertama, sehingga tipenya bisa dibaca sebelum decode — lihat tabel di alat ini.
Cara PDF terpotong dideteksi
PDF diakhiri %%EOF. Jika penanda itu tidak muncul dalam 1,024 byte terakhir, file hampir pasti terpotong. Header boleh dimulai hingga 1,024 byte dari awal; kebanyakan pembaca tetap membuka file seperti itu, jadi hal ini dilaporkan tetapi tidak ditolak.

Praktik terbaik mengirim file sebagai Base64

Kirim tipe MIME dan nama file bersama datanya
Base64 tidak membawa nama maupun tipe. Letakkan keduanya di sampingnya ({"filename": "invoice.pdf", "mime": "application/pdf", "content": "…"}) atau gunakan data URI, supaya penerima tidak perlu menebak.
Periksa magic bytes di sisi penerima
Sebelum menyimpan, pastikan byte hasil decode diawali %PDF-. Satu baris kode ini menangkap field yang salah, encoding ganda, dan halaman error yang dikembalikan sebagai Base64.
Pilih multipart atau URL untuk file besar
Base64 menambah sepertiga ukuran dan seluruh string harus berada di memori. Di atas beberapa megabyte, multipart/form-data atau URL unduhan pre-signed lebih ringan bagi kedua sisi.
Simpan byte, bukan Base64, di database
Kolom BLOB/bytea sepertiga lebih kecil dan tidak bisa terpotong diam-diam seperti VARCHAR. Encode ke Base64 hanya di batas API.

Base64 ke PDF — FAQ

Bagaimana cara mengonversi Base64 ke PDF?
Tempel Base64 ke kotak di halaman ini. Data langsung di-decode, PDF terbuka di pratinjau, dan tombol Unduh menyimpannya sebagai .pdf. Prefiks data:application/pdf;base64,, tanda kutip, jeda baris, dan escape JSON boleh tetap ada — semuanya dihapus otomatis.
Kenapa PDF hasil decode saya tidak bisa dibuka?
Penyebab umumnya: prefiks data: ikut di-decode sebagai data; byte ditulis sebagai teks, bukan biner; string terpotong (tidak ada %%EOF di akhir); Base64 di-encode dua kali; atau datanya sama sekali bukan PDF — misalnya PNG atau pesan error JSON. Tempel string yang sama di sini: setiap kasus tersebut menampilkan peringatan khusus.
Apakah file saya diunggah ke server?
Tidak. Decode, deteksi tipe, pratinjau, dan encode semuanya berjalan di browser Anda dengan JavaScript. Tidak ada yang Anda tempel atau jatuhkan yang dikirim ke mana pun, jadi aman untuk faktur, kontrak, dan dokumen identitas.
Bagaimana mengetahui tipe file dari sebuah Base64?
Lihat awalnya: JVBERi0 adalah PDF, iVBORw0KGgo adalah PNG, /9j/ adalah JPEG, R0lGOD adalah GIF, UEsDB adalah ZIP (dan karena itu DOCX, XLSX, PPTX), H4sI adalah gzip. Alat ini membaca magic bytes hasil decode, menampilkan tipenya, dan menyimpan file dengan ekstensi yang sesuai.
Bisakah saya mengonversi Base64 ke Word, Excel, gambar, atau ZIP?
Bisa. Tipe file apa pun dapat di-decode; ekstensinya ditentukan dari isinya. DOCX, XLSX, dan PPTX dikenali di dalam kontainer ZIP, dan file DOC/XLS lama dikenali sebagai Office 97–2003. Gambar, audio, dan video dipratinjau; tipe lain langsung diunduh.
Bagaimana cara mengonversi PDF ke Base64?
Buka tab PDF / file → Base64 dan jatuhkan PDF-nya. Pilih Base64 polos atau data URI, opsional URL-safe atau dibungkus per 76 karakter, lalu salin atau unduh sebagai file .txt.
Apa bedanya Base64 dan data URI?
Data URI adalah Base64 dengan header yang menyebutkan tipenya: data:application/pdf;base64,JVBERi0…. Browser bisa langsung membukanya sebagai tautan atau src. API biasanya hanya menginginkan bagian Base64 setelah koma.
Kenapa muncul "Ini bukan PDF"?
Karena byte hasil decode tidak diawali %PDF-. Tipe yang ditampilkan adalah tipe byte yang sebenarnya. Kejutan yang sering terjadi: hasil pindaian PNG atau JPEG, DOCX, ZIP berisi beberapa PDF, atau pesan error JSON atau HTML yang di-encode Base64 menggantikan dokumennya.
Apa arti "tidak ada %%EOF di akhir"?
Setiap PDF diakhiri penanda %%EOF. Jika tidak ada, Base64 hampir pasti terpotong: hanya disalin sebagian, dipotong kolom database seperti TEXT MySQL (65,535 byte), atau dipendekkan oleh batas panjang baris log. Ambil ulang string lengkapnya; decode tidak bisa memulihkan data yang hilang.
Apa arti "di-decode untuk kedua kalinya"?
Data hasil decode ternyata juga teks Base64. Ini terjadi ketika nilai di-encode sekali oleh kode Anda lalu sekali lagi oleh framework atau HTTP client. Alat ini hanya men-decode lapisan dalam jika hasilnya ternyata file yang dikenali, jadi teks biasa tidak pernah terbongkar secara keliru.
Apakah ada batas ukuran?
Teks yang ditempel bisa hingga 100 MB dan file hingga 50 MB untuk encode. Untuk Base64 yang sangat panjang, Buka file .txt lebih cepat daripada menempel. Pratinjau teks menampilkan 100,000 karakter pertama; unduhan selalu lengkap.
Kenapa pratinjau PDF kosong di ponsel saya?
Browser seluler menangani PDF tersemat dengan cara berbeda; sebagian hanya menampilkan halaman pertama atau tidak menampilkan apa-apa. Gunakan Buka di tab baru atau Unduh — file-nya sendiri tidak terpengaruh.