Fast Web View: bagaimana PDF terbuka sebelum selesai diunduh
Spec: ISO 32000-2, Annex FISO 32000-2 Annex F
Sekilas
Bagian berjudul “Sekilas”PDF yang terlinearisasi disusun ulang sehingga halaman pertama dan sebuah indeks navigasi kecil berada di bagian paling depan berkas. Karena itu, sebuah penampil dapat menggambar halaman satu sementara sisa dokumen masih dalam perjalanan, dan melompat langsung ke halaman 147 tanpa harus membaca halaman 2 sampai 146 lebih dahulu.
Inilah fitur yang dikenal kebanyakan pembaca dengan nama akrabnya: Fast Web View.
Mengapa ini penting
Bagian berjudul “Mengapa ini penting”Bayangkan laporan 200 halaman pada ponsel dengan sinyal satu bar. Tanpa linearisasi, penampil sering kali membutuhkan bagian paling akhir berkas sebelum dapat menggambar apa pun, karena indeks utama yang menyatakan di mana setiap objek berada secara tradisional terletak di belakang. Jadi Anda menatap pemutar loading sementara dua ratus halaman terunduh, hanya untuk membaca halaman pertama.
Dengan linearisasi, berkas ditata sehingga jawaban atas “apa yang ada di halaman satu” adalah hal pertama yang keluar dari saluran. Pembaca menggambar halaman satu dalam sekejap, dan mengambil sisanya hanya saat Anda menggulir atau melompat. Pada koneksi cepat Anda mungkin tidak pernah menyadarinya. Pada koneksi yang lambat atau berkuota, inilah pembeda antara dokumen yang bisa dipakai dan tab yang ditinggalkan.
Versi singkat
Bagian berjudul “Versi singkat”- Berkas yang terlinearisasi bersifat front-loaded: halaman satu dan sebuah tabel petunjuk ditempatkan lebih dulu, sebelum sisa badannya.
- Tabel petunjuk adalah peta rentang. Ia memberi tahu penampil rentang byte mana yang menjadi milik setiap halaman dan objek bersama, sehingga penampil dapat meminta server hanya potongan-potongan itu — lalu tabel referensi-silang menyelesaikan setiap nomor objek ke offset persisnya.
- Hal ini mengandalkan byte-range requests — penampil mengambil potongan berkas sesuai permintaan, bukan keseluruhannya.
- Byte-nya adalah konten yang identik dengan PDF biasa. Linearisasi mengubah urutan dan indeksnya, bukan halamannya sendiri.
- Ia adalah satu langkah eksplisit yang dapat dialihkan di NextPDF — dihasilkan oleh pembangunan ulang tiga lintasan yang nyata, bukan sebuah flag yang berharap-harap baik-baik saja.
Bagaimana NextPDF menanganinya
Bagian berjudul “Bagaimana NextPDF menanganinya”Anda tidak dapat menempatkan sebuah halaman di depan sampai Anda tahu persis seberapa besar segala sesuatunya, karena tabel petunjuk mencatat offset byte dan sebuah offset hanya benar setelah panjang setiap objek bersifat final. Sirkularitas itu — offset bergantung pada ukuran, ukuran bergantung pada tata letak — adalah alasan mengapa sebuah linearizer berjalan dalam beberapa lintasan, bukan satu sapuan.
NextPDF menyelesaikannya dengan pembangunan ulang tiga lintasan yang deterministik. Lintasan pertama mengukur, lintasan kedua memutuskan penempatan, lintasan ketiga menulis byte yang sebenarnya dengan offset yang kini telah diketahui tertanam di dalamnya.
- MEASURESerialise every object once to learn its exact byte length. Offsets are circular — they depend on sizes — so sizes are pinned first.
- PLACEDecide the order: first page and its dependencies up front, then the rest. Reserve space for the linearization parameter dictionary and the hint table.
- FILLWrite the final bytes. Each reserved field is filled with values computed after MEASURE and PLACE — the first-page length, the hint-table location, the main cross-reference offset — derived from the measured sizes and the chosen placement.
Keluarannya membawa sebuah linearization parameter dictionary sebagai objek pertamanya dan satu atau lebih hint table yang mengindeks halaman-halaman, persis seperti yang ditentukan standar (Spec: ISO 32000-2, Annex FISO 32000-2 Annex F). Tabel petunjuk itu bekerja berdampingan dengan sebuah cross-reference table tradisional — keduanya mencatat rentang byte dan lokasi yang perlu diambil sebuah penampil, sedangkan tabel referensi-silang adalah indeks yang memetakan setiap nomor objek ke offset byte persisnya. Linearizer NextPDF mengeluarkan bentuk tabel klasik dan menyingkirkan cross-reference stream apa pun di sepanjang jalan, sehingga begitu sebuah potongan tiba, pembaca menyelesaikan sebuah objek berdasarkan offset-nya langsung dari tabel itu (Spec: ISO 32000-2, §7.5.4ISO 32000-2 §7.5.4).
Sebuah model mental yang berguna: PDF biasa adalah sebuah buku yang daftar isinya direkatkan ke sampul belakang. PDF yang terlinearisasi memindahkan halaman daftar isi itu ke depan dan menambahkan indeks nomor-halaman per halaman, sehingga Anda dapat membuka langsung ke halaman mana pun. Bab-babnya tidak berubah. Hanya navigasinya yang berpindah.
Contoh praktis
Bagian berjudul “Contoh praktis”Linearisasi adalah langkah eksplisit yang dapat dialihkan. Anda memintanya; mesin melakukan pembangunan ulang dan mengeluarkan berkas Fast-Web-View.
<?php
declare(strict_types=1);
use NextPDF\Core\Document;use NextPDF\Contracts\OutputDestination;
$document = Document::createStandalone();$document->setTitle('Annual Report');
for ($page = 1; $page <= 200; $page++) { $document->addPage(); $document->setFont('helvetica', '', 12); $document->cell(0, 12, "Page {$page}", newLine: true);}
// Linearization is requested explicitly — an operability choice, not a default.// enableLinearization() takes no arguments; it is the on-switch. The engine// runs the MEASURE -> PLACE -> FILL rebuild and emits a Fast-Web-View file// with the first page and hint table at the front.$document->enableLinearization();
$bytes = $document->output(dest: OutputDestination::String);Konten halaman persis seperti yang Anda buat. Perbedaannya ada pada urutan berkas dari byte yang Anda terima, dan pada tabel petunjuk yang kini berada di dekat bagian atas.
Anda memverifikasi hasilnya sebagaimana orang asing akan melakukannya — dengan sebuah pemeriksa eksternal:
$ qpdf --check-linearization report.pdfreport.pdf: no linearization errorsqpdf --check-linearization tidak sekadar mencari sebuah flag. Ia menurunkan ulang
offset yang diklaim berkas dan memastikan offset itu benar: bahwa objek-objek
halaman pertama memang berada di tempat yang dinyatakan oleh linearization dictionary,
bahwa tabel petunjuk menunjuk ke byte yang tepat, dan bahwa strukturnya sesuai dengan
Annex F. Sebuah berkas yang berbohong tentang tata letaknya sendiri akan gagal dalam
pemeriksaan ini meski sekilas tampak terlinearisasi.
Kesalahpahaman umum
Bagian berjudul “Kesalahpahaman umum”Asumsi yang sering muncul adalah bahwa linearisasi mengompresi berkas atau membuat unduhan lebih cepat secara keseluruhan. Ia tidak melakukan keduanya. Sebuah berkas terlinearisasi sering kali justru beberapa byte lebih besar, karena ia membawa tabel petunjuk tambahan. Total waktu transfer untuk keseluruhan dokumen pada dasarnya tidak berubah.
Yang berubah adalah kapan piksel berguna pertama muncul. Linearisasi mengoptimalkan time-to-first-page, bukan total byte. Ia adalah fitur latensi, bukan fitur kompresi. Mengalirkan halaman satu lebih awal dan mengunduh berkas dengan cepat adalah tujuan yang berbeda, dan linearisasi melayani yang pertama.
Kesalahpahaman kedua adalah bahwa sembarang server web akan mengalirkan berkas terlinearisasi. Penampil perlu mengambil rentang byte, yang berarti server harus menghormati HTTP range request. Sebagian besar melakukannya, tetapi server yang selalu mengembalikan seluruh berkas mengubah Fast Web View kembali menjadi penantian seluruh-berkas yang lambat — berkas sudah siap untuk dialirkan, tetapi transportnya tidak.
Batasan dan ruang lingkup
Bagian berjudul “Batasan dan ruang lingkup”NextPDF memiliki dukungan inti penuh untuk menghasilkan berkas terlinearisasi: sebuah linearizer tiga lintasan tingkat produksi yang mengeluarkan parameter dictionary dan tabel petunjuk serta lolos pemeriksaan Annex F eksternal.
| Edition | Availability |
|---|---|
| Core | Full support. NextPDF produces linearized (Fast Web View) output through a production three-pass MEASURE → PLACE → FILL rebuild, conforming to ISO 32000-2 Annex F. |
| Pro | Not in this edition |
| Enterprise | Not in this edition |
Dua batas layak disebut. Pertama, linearisasi adalah properti dari satu revisi. Begitu Anda menambahkan sebuah incremental update — sebuah tanda tangan, pengisian formulir, sebuah suntingan — byte yang ditambahkan masuk di akhir dan berkas tidak lagi terlinearisasi secara ketat sampai dibangun ulang. Itu adalah kompromi yang normal, bukan cacat; lihat incremental updates untuk alasan mengapa penambahan di akhir adalah perilaku yang tepat untuk dokumen yang ditandatangani.
Kedua, mesin mengendalikan berkas. Ia tidak mengendalikan jaringan. Fast Web View hanya memenuhi janjinya ketika koneksi penyajian menghormati byte-range request; byte bisa terlinearisasi dengan sempurna namun tetap tiba sebagai satu gumpalan lambat jika server bersikeras mengirim seluruh berkas.
Dokumen terkait
Bagian berjudul “Dokumen terkait”- The anatomy of a PDF file — header, badan, tabel referensi-silang, dan trailer yang ditata ulang oleh linearisasi. Baca ini lebih dahulu untuk melihat apa yang sedang diurutkan ulang.
- Memory and streaming — streaming di sisi penulisan, sebuah sumbu yang berbeda: bagaimana NextPDF menjaga memori tetap datar saat menghasilkan byte, dibandingkan bagaimana sebuah pembaca mengalirkannya masuk.
- Incremental updates and why they matter — mengapa suntingan yang terjadi kemudian ditambahkan di akhir, dan apa artinya itu bagi tata letak front-loaded sebuah berkas terlinearisasi.
- Streams and filters — apa yang berada di dalam objek-objek badan yang ditunjuk tabel petunjuk, dan bagaimana mereka dikompresi.
Glosarium
Bagian berjudul “Glosarium”- Linearization — pembangunan ulang yang menempatkan halaman pertama dan sebuah indeks navigasi di depan sehingga penampil dapat merender dan bernavigasi sebelum seluruh berkas tiba. Nama yang diberikan standar untuk hasilnya.
- Fast Web View — nama yang menghadap konsumen untuk PDF terlinearisasi; kedua istilah ini menggambarkan berkas yang sama.
- Hint table — struktur di dalam berkas terlinearisasi yang mencatat rentang dan lokasi byte setiap halaman dan objek bersama, sehingga penampil tahu potongan mana yang harus diminta; tabel referensi-silang adalah yang kemudian memetakan sebuah nomor objek ke offset byte persisnya.
- Linearization parameter dictionary — objek pertama dalam berkas terlinearisasi; ia mendeklarasikan offset-offset kunci (panjang halaman pertama, lokasi tabel petunjuk, posisi referensi-silang utama) yang memungkinkan pengambilan sesuai permintaan.
- Byte-range request — sebuah permintaan HTTP untuk satu potongan berkas alih-alih keseluruhannya; mekanisme transport yang menjadi sandaran Fast Web View.
- Time-to-first-page — berapa lama sampai pembaca melihat halaman satu. Latensi yang dioptimalkan linearisasi, berbeda dari total waktu unduh.