Mengelola dokumen PDF di Linux tidak harus bergantung pada aplikasi GUI yang berat atau situs upload pihak ketiga yang berisiko. Artikel ini membahas cara merge, split, compress, dan convert PDF langsung lewat terminal Linux, memakai tiga tool andalan yaitu PDFtk, Ghostscript, dan Poppler-utils, lengkap dengan contoh perintah yang siap dipraktikkan.
Kenapa Kelola PDF Lewat Terminal Linux?
Bayangkan skenario ini: seorang user perlu mengecilkan ukuran file KTP, ijazah, atau kontrak kerja sebelum mengunggahnya ke sebuah formulir online. Opsi tercepat yang biasanya terlintas adalah situs kompresi PDF gratisan. Masalahnya, begitu file terkirim ke server pihak ketiga, kita kehilangan kendali penuh atas dokumen itu. Kita tidak pernah benar-benar tahu apakah file tersebut disimpan, dianalisis, atau bahkan dijual ke pihak lain.
Situasi ini makin berisiko kalau dokumennya berisi data pribadi yang sensitif seperti nomor identitas, tanda tangan, atau detail kontrak bisnis. Begitu data itu bocor, dampaknya bisa berupa penyalahgunaan identitas sampai pelanggaran kerahasiaan kontrak. Seorang attacker yang berhasil membobol server penyedia layanan kompresi gratisan berpotensi mengakses ribuan dokumen sensitif sekaligus, bukan cuma milik satu orang.
Banyak pengguna Linux sebenarnya punya alternatif yang jauh lebih aman, tapi mengira urusan PDF harus lewat aplikasi GUI yang berat seperti Adobe Acrobat atau LibreOffice Draw, atau lewat situs pihak ketiga tadi. Padahal ada opsi ketiga yang sering terlewat: terminal.
Distribusi Linux modern menyediakan sejumlah tool command-line yang mampu mengerjakan hampir semua kebutuhan pengelolaan PDF, mulai dari menggabungkan, memisahkan, mengecilkan ukuran, sampai mengonversi format. Seluruh proses berjalan lokal di komputer kita sendiri, jadi tidak ada file yang keluar ke server pihak ketiga. Prosesnya juga jauh lebih ringan dibanding aplikasi GUI, dan yang tidak kalah penting, bisa diotomatisasi lewat script untuk pekerjaan yang berulang.
Tool PDF di Linux
Sebelum masuk ke praktik, ada baiknya kita kenalan dulu dengan ekosistem tool PDF di Linux. Berbeda dari aplikasi GUI yang biasanya menggabungkan semua fungsi dalam satu program, ekosistem command-line interface (CLI) di Linux mengikuti filosofi Unix: satu tool mengerjakan satu tugas spesifik, tapi mengerjakannya dengan sangat baik.
Tabel berikut merangkum tool yang akan kita pakai sepanjang artikel ini beserta fungsi utamanya:
| Tool | Fungsi Utama | Kapan Dipakai |
|---|---|---|
pdftk (PDFtk) | Manajemen struktur dokumen: merge, split, rotate, password | Menyusun ulang urutan atau isi halaman PDF |
gs (Ghostscript) | Optimalisasi ukuran file (compress) | PDF hasil scan atau berisi gambar beresolusi tinggi jadi terlalu besar |
pdftoppm & pdftotext (Poppler-utils) | Ekstrak PDF menjadi gambar atau teks | Butuh cuplikan gambar halaman, atau isi teks murni dari PDF |
convert (ImageMagick) / img2pdf | Alih format gambar ke PDF | Menyatukan beberapa hasil scan atau foto jadi satu PDF |
Keempat tool ini umumnya tidak terinstal secara default di kebanyakan distro, kecuali Ghostscript yang sering sudah terpasang sebagai dependency dari sistem printing atau LibreOffice. Kita akan bahas cara instalasinya di masing-masing bagian.
PDFtk untuk Merge dan Split PDF
PDFtk (PDF Toolkit) adalah tool command-line untuk memanipulasi struktur dokumen PDF, mulai dari menggabungkan, memisahkan, memutar halaman, sampai menambahkan proteksi password. Versi yang aktif dikembangkan saat ini adalah pdftk-java, port Java dari PDFtk asli yang sempat mangkrak setelah developer originalnya berhenti me-maintain versi native-nya.
Instalasi PDFtk di Ubuntu, Debian, Fedora, dan Arch
Cara instalasi PDFtk berbeda-beda tergantung distro yang kita pakai, karena tidak semua distro memasukkan pdftk-java ke repository resminya.
Di Ubuntu dan Debian, kita bisa langsung instal lewat apt:
sudo apt update
sudo apt install pdftk-javaCatatan dari pengalaman lapangan: di Ubuntu Server, repository universe kadang belum aktif secara default. Kalau apt gagal menemukan package pdftk-java, aktifkan dulu repository-nya dengan sudo add-apt-repository universe sebelum mengulang perintah instalasi.
Fedora tidak menyediakan pdftk-java di repository resmi dnf. Opsi paling praktis adalah instal lewat Snap, dengan asumsi snapd sudah aktif di sistem:
sudo snap install pdftkPerlu digarisbawahi, paket snap PDFtk sudah cukup lama tidak mendapat update rutin. Sysadmin yang butuh fitur terbaru atau perbaikan bug spesifik sebaiknya mempertimbangkan build dari source sebagai alternatif.
Arch Linux juga tidak menaruh pdftk-java di repository resmi, jadi kita perlu AUR (Arch User Repository). Cara paling mudah memakai AUR helper seperti yay:
yay -S pdftk-binPaket pdftk-bin dipilih karena sudah dalam bentuk binary, jadi kita tidak perlu compile gcc-gcj yang prosesnya lumayan lama. Karena paket AUR dikelola komunitas, bukan tim resmi Arch, biasakan cek isi PKGBUILD-nya sebelum instal.
Setelah instalasi selesai di distro manapun, verifikasi dengan mengecek versinya:
pdftk --versionMenggabungkan PDF (Merge) dengan PDFtk
PDFtk memakai operasi cat untuk urusan merge maupun split. Operasi cat ("catenate") pada dasarnya menyusun ulang halaman dari satu atau lebih file PDF menjadi satu file baru.
Kalau kita cuma perlu menggabungkan beberapa file spesifik, urutan filenya mengikuti urutan penulisan di perintah:
pdftk laporan-jan.pdf laporan-feb.pdf laporan-mar.pdf cat output laporan-kuartal-1.pdfUntuk menggabungkan massal semua file PDF dalam satu folder, kita bisa manfaatkan wildcard:
pdftk *.pdf cat output gabungan.pdfSatu hal yang perlu diperhatikan: urutan penggabungan file dengan wildcard mengikuti urutan alfabet dari nama file, bukan urutan tanggal modifikasi. Kalau urutan halaman penting, sebaiknya beri nama file dengan prefix angka (01-cover.pdf, 02-isi.pdf, dst.) atau sebutkan nama filenya secara eksplisit seperti contoh sebelumnya.
Untuk kasus yang lebih rumit, misalnya kita cuma butuh mengambil beberapa halaman tertentu dari beberapa file berbeda, PDFtk punya fitur handle. Kita berikan label huruf kapital untuk tiap file input, lalu tentukan rentang halaman yang mau diambil dari tiap handle:
pdftk A=kontrak.pdf B=lampiran.pdf cat A1-3 B5-8 output paket-lengkap.pdfPerintah di atas mengambil halaman 1 sampai 3 dari kontrak.pdf, digabung dengan halaman 5 sampai 8 dari lampiran.pdf, lalu disimpan sebagai paket-lengkap.pdf. Teknik ini sangat membantu developer yang butuh menyusun ulang laporan dari beberapa sumber dokumen tanpa harus buka aplikasi GUI sama sekali.
Memisahkan PDF (Split) dengan PDFtk
Masih memakai operasi cat, kita bisa mengekstrak rentang halaman tertentu dari sebuah PDF menjadi file baru:
pdftk sumber.pdf cat 10-25 output bab-3.pdfKalau kebutuhannya memecah PDF menjadi file terpisah per satu halaman, PDFtk punya operasi khusus bernama burst:
pdftk sumber.pdf burst output halaman_%02d.pdfPerintah ini menghasilkan halaman_01.pdf, halaman_02.pdf, dan seterusnya, mengikuti pola printf yang kita tentukan di bagian output. Kalau bagian output dihilangkan, PDFtk otomatis memakai pola default pg_%04d.pdf dan tetap membuat satu file laporan tambahan bernama doc_data.txt berisi metadata dokumen sumber.
Rotate Halaman dan Proteksi Password
Selain merge dan split, PDFtk juga bisa memutar halaman lewat suffix rotasi pada operasi cat. Untuk memutar seluruh halaman 180 derajat, misalnya dokumen hasil scan yang terbalik:
pdftk sumber.pdf cat 1-endsouth output hasil-rotate.pdfKalau cuma satu halaman tertentu yang perlu diputar, kombinasikan dengan rentang halaman lain yang dibiarkan apa adanya:
pdftk sumber.pdf cat 1east 2-end output hasil.pdfPerintah di atas memutar halaman pertama 90 derajat searah jarum jam (east), sementara halaman kedua sampai terakhir tetap seperti aslinya.
Untuk proteksi password, PDFtk membedakan dua jenis password: user password untuk membuka dokumen, dan owner password untuk mengubah izin (permission) seperti print atau copy-paste:
pdftk dokumen.pdf output dokumen-terkunci.pdf owner_pw "passwordAdmin123" user_pw "passwordBuka123"Kalau cuma user_pw yang diisi, siapapun yang tahu password itu otomatis punya izin penuh atas dokumen. Isi juga owner_pw kalau kita ingin membedakan siapa yang boleh sekadar membaca dan siapa yang boleh mengubah izin dokumen.
Kompres PDF Tanpa Merusak Kualitas Pakai Ghostscript
PDFtk memang jago mengatur struktur dokumen, tapi tidak dirancang untuk mengecilkan ukuran file. Operasi merge atau split di PDFtk cuma menyusun ulang halaman, tanpa memproses ulang gambar yang tertanam di dalamnya. Akibatnya, PDF hasil scan yang isinya didominasi gambar resolusi tinggi tetap besar meski sudah "diolah" lewat PDFtk.
Di sinilah Ghostscript berperan. Ghostscript adalah interpreter untuk bahasa PostScript dan PDF yang, di antara banyak fungsinya, bisa merender ulang gambar di dalam PDF dengan resolusi dan tingkat kompresi lebih rendah, sehingga ukuran file menyusut signifikan.
Sintaks dasarnya:
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dBATCH -dQUIET -sOutputFile=hasil-kompres.pdf sumber.pdfBeberapa flag penting yang perlu dipahami, bukan cuma dihafal:
-sDEVICE=pdfwritememberi tahu Ghostscript untuk merender ulang input sebagai file PDF baru.-dPDFSETTINGSadalah profile kompresi yang mengatur seberapa agresif gambar di dalam PDF di-downsample.-dNOPAUSEdan-dBATCHmencegah Ghostscript berhenti menunggu input interaktif, penting untuk dipakai dalam script otomatis.-dQUIETmenekan output log yang biasanya cukup verbose.
Tiga profile -dPDFSETTINGS yang paling sering dipakai:
| Profile | Karakteristik | Rekomendasi Pemakaian |
|---|---|---|
/screen | Resolusi gambar diturunkan ke 72 dpi, ukuran file paling kecil | Kirim lewat WhatsApp/HP, kualitas visual bukan prioritas |
/ebook | Resolusi menengah, keseimbangan antara ukuran dan kualitas | Dokumen kerja sehari-hari, rekomendasi default |
/printer | Kualitas tinggi, ukuran file lebih besar dari dua profile di atas | Dokumen yang akan dicetak |
Kalau malas mengetik perintah gs yang panjang, Ghostscript menyediakan shortcut bernama ps2pdf. Aslinya, ps2pdf dirancang untuk mengonversi file PostScript ke PDF, tapi karena di baliknya tetap memanggil Ghostscript dengan device pdfwrite, tool ini juga bisa menerima file PDF sebagai input:
ps2pdf -dPDFSETTINGS=/ebook sumber.pdf hasil-kompres.pdfPerintah ini menghasilkan output yang setara dengan command gs panjang di atas, hanya lebih ringkas untuk dipakai sehari-hari.
Convert Format PDF dan Gambar
Bagian ini membahas tiga arah konversi yang paling sering dibutuhkan: PDF ke gambar, PDF ke teks, dan gambar ke PDF.
Mengubah PDF Menjadi Gambar dengan pdftoppm
pdftoppm adalah bagian dari package Poppler-utils yang bisa mengubah tiap halaman PDF menjadi file gambar terpisah. Secara default, pdftoppm merender halaman pada resolusi 150 DPI (dots per inch). Untuk kebutuhan yang menuntut ketajaman lebih, misalnya bahan OCR atau cetak, naikkan ke 300 DPI lewat flag -r:
pdftoppm -png -r 300 sumber.pdf halamanPerintah ini menghasilkan halaman-1.png, halaman-2.png, dan seterusnya, satu file per halaman. Kalau cuma butuh sebagian halaman, kombinasikan dengan flag -f (halaman pertama) dan -l (halaman terakhir), misalnya -f 2 -l 4 untuk merender halaman 2 sampai 4 saja.
Mengekstrak PDF Menjadi Teks dengan pdftotext
Masih dari Poppler-utils, pdftotext menarik seluruh konten teks dari PDF menjadi file .txt biasa:
pdftotext sumber.pdf hasil.txtUntuk PDF yang isinya berupa tabel atau kolom ganda, tambahkan flag -layout supaya pdftotext berusaha mempertahankan susunan spasial teks aslinya, bukan cuma menumpuk semua teks jadi satu alur:
pdftotext -layout sumber.pdf hasil.txtMengubah Gambar Menjadi PDF dengan ImageMagick dan img2pdf
Sintaks dasar untuk menggabungkan beberapa gambar menjadi satu PDF lewat convert (bagian dari package ImageMagick) cukup sederhana:
convert halaman1.jpg halaman2.jpg halaman3.jpg gabungan.pdfDi banyak instalasi Linux modern, perintah di atas justru gagal dengan pesan error mirip berikut:
convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/421.Root cause-nya bukan bug, melainkan kebijakan keamanan yang sengaja diterapkan. Sejak 2018, ImageMagick menonaktifkan izin baca/tulis PDF secara default lewat policy.xml, sebagai mitigasi setelah ditemukan celah keamanan pada delegate Ghostscript yang dipakai ImageMagick untuk memproses PDF.
Kalau kita memang mempercayai sumber file gambar yang dipakai (misalnya hasil scan sendiri), solusinya adalah mengedit file /etc/ImageMagick-6/policy.xml (path bisa berbeda tergantung distro dan versi ImageMagick). Cari baris berikut:
<policy domain="coder" rights="none" pattern="PDF" />Ubah nilai rights menjadi read|write supaya ImageMagick diizinkan memproses PDF lagi:
<policy domain="coder" rights="read|write" pattern="PDF" />Alternatif yang lebih aman dan tidak memerlukan utak-atik policy.xml sama sekali adalah img2pdf. Bedanya dengan ImageMagick, img2pdf menyisipkan gambar JPEG apa adanya ke dalam struktur PDF tanpa proses re-encode, jadi kualitas gambar benar-benar lossless dan prosesnya lebih cepat:
img2pdf halaman1.jpg halaman2.jpg halaman3.jpg -o gabungan.pdfUntuk kebutuhan sehari-hari yang tidak melibatkan manipulasi gambar lain (crop, resize, watermark), img2pdf jadi pilihan yang lebih direkomendasikan dibanding mengubah kebijakan keamanan ImageMagick.
Tips: Bikin Alias untuk Perintah Panjang
Command Ghostscript untuk kompresi PDF cukup panjang untuk diketik ulang setiap kali kita butuh mengompres file. Solusinya adalah membuat alias, atau lebih tepatnya shell function, karena command kompresi butuh dua argumen posisi (nama file input dan output) yang tidak bisa ditangani alias sederhana.
Buka file konfigurasi shell kita, ~/.bashrc untuk pengguna Bash atau ~/.zshrc untuk pengguna Zsh, lalu tambahkan function berikut di baris paling bawah:
kompres-pdf() {
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dBATCH -dQUIET -sOutputFile="kompres-$1" "$1"
}Simpan filenya, lalu muat ulang konfigurasi shell supaya function baru langsung bisa dipakai tanpa perlu membuka terminal baru:
source ~/.bashrcSekarang, mengompres PDF cukup lewat satu perintah pendek:
kompres-pdf dokumen.pdfHasilnya otomatis tersimpan sebagai kompres-dokumen.pdf di folder yang sama. Trik yang sama bisa diterapkan untuk perintah panjang lain di artikel ini, seperti konversi gambar ke PDF atau ekstraksi teks.
Kesimpulan
Mengelola PDF lewat terminal Linux terbukti bukan cuma soal gaya-gayaan sysadmin. Ada tiga keunggulan konkret yang didapat: privasi dokumen tetap terjaga karena seluruh proses berjalan lokal tanpa upload ke server manapun, prosesnya jauh lebih cepat karena tidak menunggu upload dan download, dan lebih hemat resource dibanding menjalankan aplikasi GUI yang berat.
Kombinasi PDFtk untuk manajemen struktur, Ghostscript untuk kompresi, dan Poppler-utils dengan ImageMagick atau img2pdf untuk konversi, sudah mencakup hampir seluruh kebutuhan pengelolaan PDF sehari-hari. Begitu terbiasa, workflow ini bahkan bisa dirangkai jadi satu script otomatis untuk tugas yang berulang, sesuatu yang mustahil dilakukan lewat situs kompresi online.




