Membuat PDF yang Lebih Besar dari Jerman
(alexwlchan.net)- Angka “ukuran maksimum PDF 381 km × 381 km” yang beredar di internet berasal dari batas implementasi Adobe Acrobat 7.0, bukan batas format PDF itu sendiri
- Sejak PDF 1.6, 1/72 inci sebagai satuan dasar bisa diperbesar dengan
/UserUnit, dan nilai maksimum75,000di Acrobat 7.0 membentuk batas atas15,000,000 inci - PDF yang dibuat manual terdiri dari
%PDF-1.6, daftar objek,xref,trailer,startxref, dan%%EOF, sementara ukuran halaman ditentukan oleh kombinasi/MediaBoxdan/UserUnit - Acrobat tetap menampilkan 15,000,000 inci meski
/MediaBoxmelewati 14,400 atau/UserUnitmelewati 75,000, dan nilai/UserUnityang berlebih diabaikan tanpa peringatan - macOS Preview.app mengabaikan
/UserUnit, tetapi tidak memberi batas atas/MediaBoxseperti Acrobat, sehingga file yang tampak seperti PDF lebih besar dari alam semesta pun bisa dibuat
Dari mana batas 381 km berasal
- Klaim bahwa ukuran maksimum dokumen PDF adalah 381 km × 381 km sudah lama berulang kali tersebar di internet
- Angka ini bukan berasal dari batas format PDF, melainkan dari batas implementasi Adobe Acrobat
- Menurut spesifikasi PDF 1.7, batas ukuran halaman dapat diringkas sebagai berikut
- Sebelum PDF 1.6, satuan ruang pengguna dasar tetap di 1/72 inci
- Sejak Acrobat 5.0, nilai maksimum ukuran halaman dasar adalah
14,400 × 14,400satuan, yaitu 200 × 200 inci - Mulai PDF 1.6, ukuran satuan ruang pengguna dasar dapat diatur dengan
/UserUnitdi kamus halaman - Acrobat 7.0 mendukung nilai maksimum
/UserUnitsebesar75,000, sehingga dimensi halaman maksimum menjadi 15,000,000 inci
15,000,000 incikira-kira setara dengan 381 km, dan ungkapan “PDF version 7” tampaknya merujuk bukan pada versi PDF, melainkan pada Adobe Acrobat 7.0
Struktur dasar PDF buatan tangan
- File PDF memiliki nomor versi di awal dan penanda EOF di akhir
- Contoh:
%PDF-1.6 - Penanda akhir:
%%EOF
- Contoh:
- Setelah nomor versi, ada daftar objek yang merepresentasikan halaman, teks, grafik, dan sebagainya
xrefadalah tabel referensi silang yang menunjukkan posisi objek- Pembaca PDF memeriksa berapa byte jarak tiap objek dari awal file
trailermenyimpan metadata seluruh dokumen- jumlah halaman
- apakah dokumen dienkripsi
- objek root dokumen
startxrefmenunjuk ke posisi awal tabelxref- Pembaca PDF mencari nilai
startxrefdari bagian akhir file lalu berpindah ke tabelxref
- Pembaca PDF mencari nilai
- Dengan merujuk pada artikel tentang membuat file PDF sederhana, kita bisa membuat PDF dengan persegi panjang merah secara manual
Objek dan definisi halaman
- Contoh PDF terdiri dari empat objek inti
- Objek 1: objek stream yang menggambar persegi panjang merah
- Objek 2: objek
Pageyang mendefinisikan satu halaman - Objek 3: objek
Pagesyang menyimpan informasi banyak halaman - Objek 4: objek
Catalogyang menyediakan struktur utama dokumen
- Objek
Pagemenghubungkan isi halaman melalui referensi ke objek lain1 0 Rmerujuk ke objek nomor 1, generasi nomor 03 0 Rmerujuk ke objekPages, yaitu kumpulan halaman
- Saat menulis PDF secara manual, setiap kali posisi objek berubah, nilai dalam tabel
xrefharus disesuaikan ulang, sehingga sangat merepotkan - Pada pembaruan 16 April 2025, nilai
xref 0 4di kode contoh dikoreksi karena salah- Tabel referensi silang yang sebenarnya memiliki 5 entri, jadi yang benar adalah
xref 0 5
- Tabel referensi silang yang sebenarnya memiliki 5 entri, jadi yang benar adalah
Memperbesar halaman dengan /MediaBox dan /UserUnit
- Ukuran halaman PDF diatur pada tiap objek
Page /MediaBox [0 0 300 300]membuat halaman dengan lebar dan tinggi masing-masing 300 satuan- Satuan dasarnya adalah 1/72 inci
- 300 satuan kira-kira 4.17 inci
- Jika
/MediaBoxdiubah menjadi600 600, Acrobat menampilkan halaman sebagai8.33 x 8.33 in - Nilai maksimum
/MediaBoxyang diizinkan di Acrobat, yaitu14400 14400, ditampilkan sebagai 200 × 200 inci- Jika melewati nilai ini, Acrobat akan menampilkan peringatan
- Dengan menambahkan
/UserUnit, ukuran satuan ruang pengguna dasar bisa diperbesar/UserUnit 2membuat kedua dimensi halaman menjadi dua kali lipat- Jika
/MediaBox [0 0 14400 14400]dipakai bersama/UserUnit 2, Acrobat menampilkannya sebagai400.00 x 400.00 in
- Jika
/UserUnit 75000diterapkan, Acrobat menampilkan halaman sebagai 15,000,000.00 × 15,000,000.00 inci- Ini kira-kira setara dengan 381 km × 381 km, sesuai dengan klaim awal
- File contoh: biggest.pdf
Perbedaan penanganan Acrobat dan Preview
- Acrobat tetap menampilkan ukuran halaman sebagai 15,000,000 inci walaupun
/MediaBoxatau/UserUnitdibuat lebih besar - Jika nilai
/UserUnitdiatur lebih besar dari75000, nilainya dibatasi tanpa peringatan atau error /UserUnittampaknya memang tidak banyak dipakai dalam praktik- Jawaban Stack Overflow juga menyebut nilai ini tidak digunakan secara luas
- Sulit menemukan contohnya secara online
- macOS Preview.app tidak mendukung
/UserUnit- Semua PDF diproses dengan satuan dasar 1/72 inci
- Namun, tidak seperti Acrobat, Preview.app tidak menetapkan batas atas besar untuk
/MediaBox- Lebar dengan 12 angka nol setelah
1pun masih diterima - Lebar ini kira-kira setara dengan jarak Bumi ke Bulan
- Lebar dengan 12 angka nol setelah
- Dengan memasukkan nilai
/MediaBoxyang lebih besar lagi, kita bahkan bisa membuat file yang ditampilkan Preview sebagai PDF berukuran sekitar 37 triliun tahun cahaya persegi- File contoh: universe.pdf
- Sebagian besar dokumen hanyalah ruang kosong, dan ada peringatan agar tidak mencetaknya
1 komentar
Komentar Hacker News
PDF secara teknis buruk dalam banyak hal, tetapi fakta bahwa ia adalah berkas statis yang mandiri yang bisa kusimpan di tangan sendiri itu hebat, apalagi dibandingkan situs web dinamis/SaaS yang memusuhi pengguna dan bisa hilang kapan saja
PDF/A lebih mendekati PDF yang sebenarnya, dan menyingkirkan sebagian besar sampah berbahaya
Kalau suka keisengan PDF yang aneh, ada berkas polyglot yang merupakan PDF/A, sekaligus CSV, dan juga soundtrack Amiga soundtracker mod: https://www.lab6.com/6
https://www.nytimes.com/2009/07/18/technology/companies/18am...
Banyak orang mengkhawatirkan eksekusi JavaScript, tetapi memakai berkas PDF tanpa banyak masalah
Untuk mengubah PDF sembarang menjadi PDF/A dengan perangkat lunak open source, tampaknya satu-satunya cara adalah lewat PostScript dengan Ghostscript lalu kembali lagi, tetapi Ghostscript berlisensi Affero sehingga bisa membawa berbagai masalah
Ada juga versi GPL lama, dan bekerja untuk kebanyakan PDF, tetapi usianya kira-kira 15 tahun
Di tempat kerja dulu aku harus menangani PDF/A, dan itu sama sekali tidak menyenangkan
Sekadar merekonstruksi paragraf saja butuh usaha besar, apalagi parsing tabel
Untuk sesuatu yang secara de facto menjadi standar, seharusnya bisa lebih baik, dan manual PDF juga benar-benar buruk
Sebagai perbandingan, kalau menganalisis PNG, lebar dan tinggi maksimumnya adalah 2147483647, yaitu 2^31 - 1
Kepadatan terendah yang bisa ditentukan dengan chunk pHYs adalah 1 piksel per meter, jadi 2 miliar meter lebih besar daripada diameter Matahari yang 1,39 gigameter: https://en.wikipedia.org/wiki/Orders_of_magnitude_(length)#g...
Karena chunk sCAL memakai bilangan floating-point ASCII, ukuran fisik yang jauh lebih besar pun bisa dinyatakan
Peta dunia berskala 1:10.000.000 lebarnya kurang dari 10 m menurut pHYs, tetapi menurut sCAL lebarnya sekitar 40.000 km
Begitu lebar PDF diukur dalam satuan kilometer, kita tahu sedang membaca tulisan teknis yang bagus
Aku jadi teringat PDF yang kubuat lebih dari 10 tahun lalu dari implementasi PostScript untuk Game of Life
Sepertinya masih berjalan, tetapi membuat macOS Preview crash: https://andrewcutler.net/docs/joke/life.pdf
Namun animasinya tidak terlihat, hanya keadaan akhirnya yang terlihat, sedangkan di penampil PDF Firefox tampak sedikit animasi
Skim juga mirip Preview, tetapi tidak menampilkan grid
Tulisan ini mengingatkanku pada permainan intelektual Umberto Eco
Terutama “On the Impossibility of Drawing a Map of the Empire on a Scale of 1 to 1”: https://s3.amazonaws.com/arena-attachments/881694/cb6119367b...
https://en.wikipedia.org/wiki/On_Exactitude_in_Science
Berbeda dari Acrobat, Preview tidak punya batas atas untuk nilai yang bisa dimasukkan ke MediaBox, dan bahkan menerima lebar berupa angka 1 diikuti 12 nol
Di pemeriksa dokumen, ukuran halaman ditampilkan sebagai 352777777777.78 x 10.59cm, dan lebar ini kira-kira setara jarak Bumi ke Bulan
Bahkan semua planet di tata surya jika diletakkan berjajar pun bisa masuk dengan longgar ke dalam dokumen ini
Pada akhirnya memang perlu penggaris
352777777777.78cm adalah 3.527.777,7777778km
Eksperimen yang menarik, alexwlchan
Ada dua kesalahan kecil di tulisannya: bagian “15,000,000,000.00 in” dan “ukuran halaman 15 miliar inci” seharusnya 15 juta inci
Disebutkan bahwa pemformatan teks sulit, tetapi untuk contoh PDF yang hanya berisi dua kata “Hello World”, cukup definisikan objek font, lalu di stream gunakan
Tfuntuk memakai font,Tduntuk menentukan posisi, danTjuntuk menulis teksTerima kasih juga untuk contoh teksnya; kelihatannya mirip dengan yang kucoba, tetapi pasti ada kesalahan di suatu tempat
Dari spesifikasinya, tampaknya memang diperlukan
Pada titik ini rasanya ingin memparafrasakan Steven Wright
“Saya punya peta Amerika Serikat. Ukurannya sebesar aslinya”
Saya tidak tahu apakah bagian atas peta adalah arah saya bergerak atau utara; peta-peta lama dulu selalu menempatkan utara di atas, tetapi Google Maps sepertinya tidak begitu, jadi membingungkan
Kalau saya berputar 90 derajat, petanya ikut berputar, tetapi saya juga bingung apakah yang berputar itu peta atau saya
Kalau saya diam, peta tidak bisa tahu saya sedang menuju ke mana, jadi sepertinya saya harus bergerak dulu untuk mengetahui arah
Kalau saya mengangkat smartphone di depan mata, bagian atas peta mengarah ke langit, dan saya juga tidak tahu apakah saya seharusnya melihat peta dari atas
Saya penasaran apa kiat memakai Google Maps dengan baik di ponsel
https://s3.amazonaws.com/arena-attachments/881694/cb6119367b...
https://scomedy.com/quotes/10779
“Jangan dicetak” terdengar seperti kalimat yang siap menjadi bom cetak
Terakhir kali saya memakai printer, membatalkan pekerjaan cetak di Windows hampir mustahil
Masa ketika printer Wi-Fi masih terbuka atau keamanannya lemah itu menyenangkan
Satu-satunya cara andal yang saya temukan adalah mematikan printer lalu menghapus pekerjaan cetak dari antrean
Tidak bisa kalau printernya tidak persis di sebelah kita, dan saya tidak tahu kenapa ini begitu sulit
Sekitar 30 tahun lalu, dalam wawancara magang musim panas di Microsoft, pewawancara mengajukan pertanyaan yang sangat mirip tentang Excel
Topik seperti ini selalu bagus untuk melihat rasa ingin tahu seseorang dan kemampuannya memecah potensi masalah