Bir PDF’yi sıkıştırdığınızda aslında ne olur
PDF123 Compress qpdf ile akışları yeniden sıkıştırır ve nesneleri nesne akışlarında paketler; görüntüleri örnek seyreltmez, yazı tiplerini alt kümelemez. Doğrusallaştırma dosya boyutunu neredeyse hiç değiştirmez.

İki PDF ekranda birebir aynı görünüp boyut olarak üç mertebeye varan fark taşıyabilir: 50 KB’ye karşı 50 MB. Bu fark neredeyse hiçbir zaman metin operatörlerinden gelmez. Yirmi sayfalık bir sözleşmede o operatörler genelde birkaç on kilobayt tutar; geri kalan her şey görüntü örnekleri, tam olarak gömülü bir yazı tipi programı ve akışların nesnelerle ne kadar sıkı paketlendiğidir.
Bunun en baştan söylenmesi gereken bir sonucu var: “PDF sıkıştırma” tek bir eylem değil, dört ayrı eylemdir. Her biri farklı şeyleri küçültür ve farklı bir bedel ödetir; dördünü tek şey sanmak çelişkili deneyimler üretir: dosya sıkıştırılır ama küçülmez, ya da küçülür ama sayfalar bulanıklaşır.
Boyut üç ayrı kaynaktan geliyor
“Bu PDF neden bu kadar büyük?” vakalarının çoğu, hâlâ yakalandığı boyutta gömülü duran yüksek çözünürlüklü bir tarama ya da fotoğrafla başlar. Aritmetiği bir kez yapmaya değer: 8,5 × 11 inç boyutundaki bir sayfa 300 DPI’da yaklaşık 2550 × 3300 piksel eder ve piksel başına üç baytla sıkıştırılmamış hâlde kabaca 25 MB tutar. Böyle yirmi sayfa, kimse sıkıştırmaya dokunmadan önce çoğu zaman 60-80 MB’a ulaşır.
İkinci kaynak yazı tipleridir. Bir PDF, her makinenin metni aynı biçimde işlemesi için tam bir yazı tipi programını gömebilir ve bu maliyet metnin ne kadarının okunduğuna göre değil, glif tablolarının boyutuna göre hesaplanır. Yazı tipi alt kümeleme bu yüzden ayrı bir boyut kaldıracıdır.
Üçüncüsü paketlemenin kendisidir. Aynı içerik savurgan sıkıştırma ayarlarıyla saklanabilir ya da nesneleri dosyanın içine dağılmış, her biri kendi kayıt yükünü taşıyacak biçimde yerleştirilebilir. Bunların hiçbiri tek bir pikseli veya glifi değiştirmez ve akış yeniden sıkıştırmasının erişebildiği tam da bu kısımdır.
“Sıkıştırma” dört ayrı kaldıraç demek
Boyut söz konusu olduğunda dört kaldıraç vardır; farklı katmanlarda çalışırlar ve bedelleri neredeyse hiç örtüşmez. Yanlış olanı seçmek, bir sıkıştırma işleminin hiçbir şey yapmamış gibi görünmesinin en yaygın nedenidir.
| Kaldıraç | Neye dokunur | Boyut kazancı | Bedeli |
|---|---|---|---|
| Akış yeniden sıkıştırma ve nesne akışları | İçerik akışlarının nasıl sıkıştırıldığı, nesnelerin nasıl saklanıp paketlendiği | Özgün dosyanın ne kadar gevşek olduğuna bağlı | Sayfa görünümü değişmez |
| Görüntü örnek seyreltme | Piksel sayısı, yani çözünürlük | Büyük | Çözünürlük kalıcı olarak düşer |
| Kayıplı görüntü yeniden kodlama | Bitmap’in bayt temsili | Büyük | Görüntü kalitesi düşer |
| Yazı tipi alt kümeleme | Gömülü glif tabloları | Orta | Kullanılmayan glifler artık düzenlenemez |
| Doğrusallaştırma | Nesnelerin sırası | Neredeyse sıfır | Karşılığında ilk sayfanın yüklenme süresini satın alır |
İlk dört satırın hepsine gelişigüzel “sıkıştırma” denir, oysa yalnızca birincisi içeriği olduğu gibi bırakır. Getirisi en kolay yanlış değerlendirilen satır da odur: boyutunun çoğu ham görüntü örneklerinden gelen bir taramada çıkarılacak fazlalık azdır; onu ciddi biçimde küçültecek kaldıraçlar ise o çözünürlüğü ve kaliteyi kalıcı olarak kaybetme pahasına örnek seyreltme ve kayıplı yeniden kodlamadır.
PDF123 Compress dördünden yalnızca ilkini yapar
PDF sıkıştır (POST /api/v1/misc/compress-pdf) yalnızca ilk satırı uygular. qpdf’yi sıkıştırılmamış akışların sıkıştırılması (--compress-streams=y), hâlihazırda Flate ile sıkıştırılmış akışlar üzerinden ikinci bir geçiş (--recompress-flate) ve nesnelerin nesne akışlarında paketlenmesi (--object-streams=generate) ile çalıştırır.
Görüntüleri örnek seyreltmez, bitmap’leri daha düşük JPEG kalitesine yeniden kodlamaz ve yazı tiplerini alt kümelemez. Sayfalar aynı görünmelidir; kazanç Flate yeniden sıkıştırmasından ve nesne akışı paketlemesinden gelir.
Başarısızlık koşulu da aynı netliği hak ediyor. Bir dosyanın boyutu çoğunlukla zaten JPEG olarak sıkıştırılmış görüntü verisinden geliyorsa Flate’in sıkacağı bir şey kalmaz; çünkü o görüntü baytları yukarıdaki üç anahtarın dokunduğu alanın dışındadır. Bu yüzden bir tarama paketi yalnızca birkaç yüzde küçülerek dönebilirken benzer boyuttaki metin ağırlıklı bir PDF belirgin biçimde daha fazla kazanır.
Ters yol, akışları inceleme için açan PDF sıkıştırmasını aç aracıdır (--qdf, nesne akışları kapalı); o da sayfaların görünümünü değiştirmez.
Boyut dışındaki sorunların aracı başka
| İhtiyacınız | Kullanacağınız yol |
|---|---|
| Görünüm birebir aynı kalsın, yalnızca paketleme yükü gitsin | PDF sıkıştır |
| Tarama paketi gerçekten çok büyük ve kalite kaybı kabul edilebilir | Örnek seyreltme veya kayıplı yeniden kodlama; bu Compress değil |
| Düzenlenebilir kalsın ama bir sonraki karakter yazılamıyor | Farklı dışa aktarma ayarları ya da kaynak dosya, bkz. yazı tipi alt kümeleme |
| Tarayıcı ilk sayfayı daha erken görsün | Doğrusallaştırma ilk boyamayı çözer, boyutu değil |
| Dosya hiç açılmıyor | PDF onar; bu bir boyut değil, yapı sorunudur |
Son satırda bir tuzak var: burada PDF doğrusallaştır ayrı bir uygulama değil, Compress’in bir takma adıdır. İkisi de aynı işlemi gösterir; kurallı kimlik misc/compress-pdf, linearize-pdf ise yalnızca takma addır. Portal bu araç için her zaman linearize=true ve optimizeLevel=1 gönderir; sunucu bu iki alanı da okumaz ve qpdf’ye hiçbir zaman --linearize geçirilmez. Bir dosyayı gerçekten doğrusallaştıran işlem, parola ekle aracının dosyayı şifrelemesidir.
Öyleyse istediğiniz şey aynı görünümle daha küçük bir dosyaysa PDF sıkıştır tek başına yeter. Kayıplı görüntü küçültme ya da yazı tipi alt kümeleme istiyorsanız bu yol yanlış kaldıraçtır. Dosya doğrudan, hesap gerekmeden döner. Nesnelerin, akışların ve çapraz başvuru tablosunun dosyada tam olarak nerede durduğunu görmek için PDF’nin içinde ne var yazısına geçebilirsiniz.