Skip to content
Back to Blog
how-to-convert

Cara Mengubah HTML ke PDF (Mempertahankan Gaya CSS)

2026-05-17 9 min read

Mengapa Konversi HTML-ke-PDF Sering Gagal

Siapa pun yang pernah berjuang dengan ekspor PDF yang bermasalah pasti tahu betapa menyebalkannya. Kamu mengubah file HTML, dan hasilnya berantakan—layout rusak, font hilang, atau halaman yang sama sekali tidak mirip dengan pratinjau di browser kamu. Masalahnya bukan pada konsepnya, tetapi pada eksekusinya. Renderer PDF sangat bervariasi dalam cara mereka menafsirkan CSS, dan sebagian besar converter generik hanya menghapus atau mengabaikan stylesheet kecuali kamu memaksanya. Konflik mendasarnya adalah antara model HTML yang berbasis alur (flow-based) dan model PDF yang berbasis halaman (page-based). Konten web bisa melar dan menyusut agar pas di viewport. Halaman PDF punya dimensi tetap. Tidak ada scrolling, tidak ada reflow dinamis. Menjembatani kedua dunia ini membutuhkan renderer yang memahami aturan halaman CSS, menangani font yang di-embed dengan benar, dan menghormati layout modern seperti flexbox dan grid. Banyak alat yang tidak bisa melakukan itu. Kegagalan umum sayangnya mudah ditebak: Google Fonts tidak termuat karena converter berjalan offline; warna latar belakang hilang karena renderer secara default menggunakan 'mode cetak' yang menghapusnya untuk menghemat tinta; layout multi-kolom ambruk menjadi satu tumpukan yang menyedihkan. Mengetahui jebakan-jebakan ini adalah separuh dari perjuangan. Panduan ini akan memandumu untuk menghindarinya, baik saat kamu menggunakan [alat HTML ke PDF](/convert/html-to-pdf) dari CocoConvert maupun saat membangun alur kerjamu sendiri.

Apa Arti Sebenarnya dari 'Mempertahankan Gaya CSS'

Sebelum membahas solusi, mari kita perjelas apa arti 'mempertahankan CSS'. Styling dalam konteks PDF bukanlah satu hal tunggal; ini adalah empat kategori berbeda, dan tidak semuanya bisa bertahan dalam setiap metode konversi. **Gaya visual** adalah yang paling rapuh. Ini termasuk warna, border, box shadow, dan gambar latar belakang. Renderer cetak sering kali menekan latar belakang secara default untuk menghemat tinta. Di dialog cetak Chrome sendiri, misalnya, kamu harus masuk ke 'Setelan lainnya' dan mencentang 'Grafik latar belakang' atau latar belakangmu akan hilang begitu saja. **Tipografi**—keluarga font, ketebalan, ukuran, tinggi baris—bertahan atau tidaknya tergantung pada ketersediaan font. Jika font kamu direferensikan oleh URL jarak jauh, converter mana pun yang tidak mengambil sumber daya eksternal akan kembali ke default sistem. Jenis huruf Inter atau Lato yang indah milikmu langsung berubah menjadi Times New Roman yang membosankan. Satu-satunya cara pasti untuk mempertahankan font adalah dengan menyematkannya (embed). **Layout** adalah bagian yang paling rumit. Fitur CSS modern seperti flexbox, CSS Grid, dan positioning absolut ditangani dengan baik oleh renderer berbasis Chromium. Tetapi mesin yang lebih tua seperti wkhtmltopdf (yang menggunakan mesin WebKit dari sekitar tahun 2013) akan merusak layout modern dengan cara yang sudah bisa ditebak dan membuat frustrasi. **CSS khusus halaman** seperti aturan `@page`, `page-break-before`, dan `break-inside: avoid` sebenarnya lebih didukung dalam konversi PDF daripada di browser. CSS ini ada secara spesifik untuk media berbasis halaman. Dengan menggunakan blok `@media print`, kamu bisa membuat gaya yang hanya berlaku untuk versi PDF, memberimu kontrol yang sangat detail tanpa merusak tampilan situs webmu. Mengetahui masalah styling-mu termasuk dalam kategori mana akan memberitahumu alat dan teknik mana yang kemungkinan besar bisa memperbaikinya.

Menggunakan CocoConvert untuk Mengubah HTML ke PDF

Converter [HTML ke PDF](/convert/html-to-pdf) dari CocoConvert berjalan di atas mesin rendering modern berbasis Chromium. Ini berarti ia menangani CSS kontemporer—termasuk flexbox, Grid, variabel CSS, dan nilai `calc()`—dengan fidelitas tinggi. Berikut cara mendapatkan hasil yang sempurna. **Langkah 1: Siapkan file HTML-mu.** Jika gayamu ada di stylesheet eksternal, kamu punya dua pilihan: buat menjadi inline dengan library seperti Juice, atau pastikan path stylesheet-nya relatif dan disertakan dalam upload-mu. CocoConvert memproses satu file HTML pada satu waktu dan tidak mengambil URL jarak jauh. Google Fonts atau stylesheet yang di-host di CDN tidak akan termuat. **Langkah 2: Sematkan (embed) font-mu.** Ini tidak bisa ditawar untuk tipografi kustom. Ubah file font-mu menjadi base64 dan sematkan langsung di blok `<style>` menggunakan `@font-face`. Ya, ini akan menambah ukuran file, tapi ini satu-satunya cara untuk menjamin font-mu dirender dengan benar. Untuk font isi teks biasa dengan ketebalan reguler dan tebal, ini mungkin menambah 80–150 KB ke file HTML-mu. **Langkah 3: Unggah dan atur opsi halaman.** Setelah diunggah, CocoConvert menyajikan opsi untuk ukuran halaman (A4, Letter, Legal, atau dimensi kustom), orientasi, dan margin. A4 dengan margin 15mm di semua sisi adalah default yang solid. Jika kamu mengonversi dasbor atau tabel yang lebar, ganti ke orientasi lanskap. **Langkah 4: Aktifkan grafik latar belakang.** Ini adalah kesalahan yang paling umum. Di panel opsi CocoConvert, kamu harus mengalihkan 'Cetak latar belakang' ke posisi Nyala. Jika tidak, elemen apa pun dengan `background-color` atau `background-image` akan dirender menjadi putih polos. **Langkah 5: Unduh dan verifikasi.** Jangan hanya melihat sekilas PDF di browser-mu. Buka di penampil yang proper seperti Adobe Acrobat Reader dan periksa apakah font sudah disematkan dengan benar dengan membuka File > Properties > Fonts. Setiap font dalam daftar seharusnya memiliki tulisan 'Embedded Subset' di sebelahnya.

Menangani Keterbatasan: Apa yang Tidak Bisa Dilakukan CocoConvert

Mari kita jujur tentang apa yang bukan CocoConvert. Ini adalah converter serbaguna yang kuat, tetapi tugas-tugas tertentu berada di luar cakupannya. Mengetahui keterbatasan ini di awal akan menyelamatkanmu dari pemecahan masalah yang buntu. **Konten yang dirender JavaScript.** Jika halamanmu dibuat oleh framework seperti React atau Vue, mengunggah file HTML sumber tidak akan berhasil. Converter hanya melihat HTML statis, bukan halaman final yang dibangun oleh JavaScript. Untuk halaman yang banyak menggunakan JS, cara terbaikmu adalah dengan menyimpan HTML yang sudah dirender penuh dari browser-mu (klik kanan > Save As > Webpage, Complete) lalu unggah file tersebut. Alternatifnya, kamu memerlukan alat browser headless seperti Puppeteer. **Elemen interaktif.** Formulir, dropdown, dan state hover tidak interaktif dalam PDF. Konversi menangkap potret statis dari state default elemen tersebut. Jika sebuah akordeon tertutup saat halaman dirender, maka ia akan tertutup di dalam PDF. Tidak ada cara untuk mengatasinya; itulah sifat PDF. **File yang sangat besar.** CocoConvert memiliki batas file 50 MB pada paket gratis dan 200 MB pada paket berbayar. Ini terdengar besar, tetapi file HTML dengan banyak gambar yang di-encode base64 bisa mencapai batas ini dengan sangat cepat. Satu PNG resolusi tinggi saja bisa dengan mudah menambah 3–5 MB pada ukuran file. **Animasi SVG yang kompleks.** SVG statis dirender dengan indah. Namun, animasi CSS atau SMIL apa pun di dalam SVG akan dibekukan pada frame awalnya. CocoConvert dibuat untuk konversi berbasis file yang lugas. Ketika kamu memiliki dokumen HTML yang sudah jadi dan membutuhkan PDF yang andal, inilah alat yang tepat. Untuk pipeline sisi server yang kompleks dan memerlukan eksekusi JavaScript, kamu perlu mencari alat terprogram seperti Playwright atau Puppeteer.

Teknik CSS untuk Menghasilkan Output PDF yang Lebih Rapi

Kamu bisa menyelamatkan dirimu dari banyak penderitaan dengan menulis CSS yang sudah memikirkan output PDF sejak awal. Memperbaiki masalah di kemudian hari selalu lebih sulit. **Gunakan `@media print` untuk override khusus PDF.** Ini adalah senjata rahasiamu. Bungkus aturan apa pun yang hanya untuk PDF dalam blok `@media print` untuk menyembunyikan elemen seperti bilah navigasi, menghapus box shadow yang terlihat kotor saat dicetak, atau menyesuaikan ukuran font agar mudah dibaca di halaman. Contohnya: ```css @media print { nav, .sidebar { display: none; } body { font-size: 11pt; } .card { box-shadow: none; border: 1px solid #ddd; } } ``` **Kontrol pemisah halaman secara eksplisit.** Jangan biarkan renderer yang memutuskan di mana halaman harus dipisah. Gunakan `break-before: page` untuk memaksa halaman PDF baru sebelum bagian utama, dan terapkan `break-inside: avoid` pada elemen seperti tabel dan gambar untuk mencegahnya terpotong secara aneh di antara dua halaman. Ini sangat penting untuk laporan yang terlihat profesional. **Atur dimensi `@page` secara eksplisit.** Jika kamu tahu ukuran halaman target, deklarasikan di CSS-mu. Ini mencegah ketidakcocokan antara gayamu dan pengaturan converter, yang dapat menyebabkan pemotongan teks yang tidak terduga. ```css @page { size: A4 portrait; margin: 15mm 20mm; } ``` **Hindari unit viewport dalam layout cetak.** Unit seperti `vw` dan `vh` tidak ada artinya untuk halaman PDF yang tetap. Untuk elemen yang perlu membentang di seluruh halaman, gunakan `mm`, `pt`, atau persentase sebagai gantinya. **Uji dengan pratinjau cetak bawaan Chrome terlebih dahulu.** Sebelum kamu mengunggah apa pun, tekan Ctrl+P (atau Cmd+P) dan pilih 'Save as PDF'. Ini memberimu pratinjau instan menggunakan mesin Chromium yang sama yang menggerakkan CocoConvert. Ini adalah cara tercepat untuk mengulang-ulang CSS-mu tanpa membuang waktu dengan unggahan berulang kali.

Mengubah Halaman Web Penuh (URL) vs. File HTML

Pendekatan untuk mengonversi file HTML lokal secara fundamental berbeda dari mengonversi URL halaman web langsung. Kamu perlu memilih alat yang tepat untuk pekerjaan yang tepat. **Mengonversi file HTML lokal** adalah keahlian [alat HTML ke PDF](/convert/html-to-pdf) dari CocoConvert. Metode ini memerlukan dokumen yang mandiri. Semua CSS harus inline atau di dalam blok `<style>`, semua gambar harus di-encode base64 atau direferensikan melalui path relatif dalam file ZIP, dan font harus disematkan. Anggap saja seperti mengirim paket yang tersegel: semua yang dibutuhkan renderer harus ada di dalamnya sejak awal. Ini membuat prosesnya sangat andal. **Mengonversi halaman web langsung melalui URL** adalah hal yang sama sekali berbeda. Ini menuntut alat yang dapat menjalankan sesi browser nyata, menavigasi ke URL, menunggu JavaScript dieksekusi dan font web diunduh, lalu mencetak ke PDF. Alat seperti Puppeteer, Playwright, atau layanan seperti Browserless.io dirancang untuk ini. Imbalannya adalah kerumitan yang luar biasa. Kamu harus berurusan dengan otentikasi, pop-up cookie, konten yang dimuat secara malas (lazy-loaded), dan kecepatan jaringan yang tidak dapat diprediksi. Untuk sebagian besar tugas umum—membuat faktur PDF dari template, mengekspor laporan, atau mengarsipkan dokumen bergaya—pendekatan berbasis file lebih sederhana dan jauh lebih dapat diprediksi. Kamu mengontrol input sepenuhnya, sehingga outputnya konsisten. Jika kamu membangun sistem yang menghasilkan PDF dari data pengguna langsung, praktik terbaiknya adalah pendekatan hibrida: isi template HTML di server-mu dengan data pengguna, lalu teruskan string HTML yang sudah dirender penuh itu ke API konversi. API CocoConvert mendukung alur kerja ini, menerima HTML langsung dalam permintaan POST.

Memverifikasi Output: Daftar Periksa Kualitas PDF

Hanya karena sebuah PDF terlihat benar di layarmu, bukan berarti ia sudah siap. Sebelum kamu mengirim file itu ke klien atau mempublikasikannya, jalankan daftar periksa cepat namun penting ini. **Font sudah disematkan (embedded)?** Buka PDF di Adobe Acrobat Reader dan navigasikan ke File > Properties > Fonts. Setiap font yang kamu gunakan harus terdaftar dengan 'Embedded Subset'. Jika sebuah font tidak disematkan, ia akan digantikan oleh font default sistem di mesin mana pun yang tidak menginstalnya, merusak desainmu. **Warna akurat?** CSS web menggunakan ruang warna RGB. Sebagian besar PDF yang ditujukan untuk layar baik-baik saja dalam RGB. Namun, jika PDF ditujukan untuk pencetakan komersial, mungkin memerlukan ruang warna CMYK, yang merupakan langkah konversi terpisah yang terjadi setelah proses awal HTML-ke-PDF. **Teks dapat dipilih dan dicari?** Coba klik dan seret untuk memilih sebaris teks. Jika bisa, berarti teks tersebut adalah teks vektor asli, yang bagus untuk kemampuan pencarian dan aksesibilitas. Jika kamu tidak bisa memilihnya, converter mungkin telah me-rasterisasi halaman menjadi gambar datar—sebuah bencana untuk salin-tempel, pembaca layar, dan pencarian teks. **Jumlah halaman dan pemisahannya benar?** Gulir cepat setiap halaman. Apakah ada judul yang menjadi yatim piatu di bagian bawah halaman? Apakah tabel atau bagan terpotong di tempat yang aneh? Apakah gambar terpisah dari keterangannya? **Ukuran file wajar?** PDF sepuluh halaman yang banyak teksnya seharusnya jauh di bawah 1 MB. Jika ukurannya 15 MB, ada yang salah. Penyebabnya biasanya adalah gambar yang tidak terkompresi atau rasterisasi seluruh halaman secara tidak sengaja. **Hyperlink berfungsi?** Klik tautan apa pun di dalam dokumen. Converter yang baik akan mempertahankan tag `<a href>` sebagai tautan yang dapat diklik di PDF final. CocoConvert melakukan ini secara default, tetapi selalu ada baiknya untuk diperiksa. Menghabiskan tiga menit untuk enam pemeriksaan ini akan menangkap 95% masalah konversi sebelum dapat menimbulkan masalah bagi orang lain. Ini adalah sentuhan akhir yang membedakan output profesional dari hasil amatir.

Ready to convert?

Try it now — fast, secure, and private.

Convert Now →