PDFMove
PDF Sayfa Çıkarma Nasıl Çalışır? Nesne Ağacı ve Paylaşılan Kaynaklar
Rehber

PDF Sayfa Çıkarma Nasıl Çalışır? Nesne Ağacı ve Paylaşılan Kaynaklar

6 dk okuma

Bir PDF'ten üç sayfa çıkardığınızda arka planda ne oluyor? Sayfalar kesilip yapıştırılmıyor, çünkü PDF'te "sayfa" tek parça bir şey değil. Bu yazıda formatın iç yapısına bakıp, çıkarma işleminin neden bu kadar hızlı olduğunu, çıkardığınız dosyanın neden bazen beklenmedik biçimde büyük kaldığını ve yer imleriyle bağlantılara neden bir şeyler olduğunu açıklıyoruz.

PDF'in içi: nesneler ve referanslar

Bir PDF dosyası, numaralandırılmış nesnelerden oluşan bir koleksiyondur. Her nesnenin bir numarası vardır ve nesneler birbirine numarayla referans verir. Kabaca şöyle şeyler bulunur:

  • Katalog: Belgenin kök nesnesi. "Sayfa ağacı şu nesnede, dış çizgi bu nesnede" der.
  • Sayfa ağacı: Sayfaları sıralı biçimde tutan bir ağaç yapısı.
  • Sayfa nesneleri: Her biri bir yaprağı temsil eder. Kendi içinde içerik değil, referanslar taşır: "içeriğim şu nesnede, kaynaklarım bu nesnede, boyutum şu."
  • İçerik akışı (content stream): Sayfanın nasıl çizileceğini anlatan komut dizisi.
  • Kaynak nesneleri: Yazı tipleri, görseller, renk profilleri, şeffaflık grupları.

Kritik nokta şu: sayfa nesnesi içeriği barındırmaz, ona işaret eder. Ve birden çok sayfa aynı kaynağa işaret edebilir. Belgede kullanılan gömülü bir yazı tipi tek bir nesnedir; 300 sayfanın hepsi ona referans verir. Bir kurumsal logo her sayfanın üstündeyse, dosyada tek bir görsel nesnesi vardır ve 300 sayfa ona bakar.

Bu paylaşım, PDF'lerin makul boyutta kalmasını sağlayan temel mekanizmadır — ve birazdan göreceğimiz gibi, çıkarma sonrası boyut sürprizlerinin de sebebidir.

Çıkarma işlemi adım adım ne yapıyor

Siz "10-12. sayfaları çıkar" dediğinizde araç şunları yapar:

1. Sayfa ağacını gezer ve istenen indekslerdeki sayfa nesnelerini bulur.

2. Bağımlılık takibi yapar. Her seçili sayfa nesnesinden yola çıkıp ona bağlı olan her şeyi izler: içerik akışı, o akışın kullandığı yazı tipleri, görseller, renk uzayları, açıklamalar (annotation), form alanları. Bu, bir grafta erişilebilirlik taraması gibidir — kökten başlayıp ulaşılabilen tüm düğümleri işaretlersiniz.

3. Ulaşılabilir nesneleri yeni dosyaya kopyalar. Kopyalama sırasında nesne numaraları yeniden atanır, çünkü yeni dosyada numaralandırma sıfırdan başlar. Referanslar buna göre güncellenir.

4. Yeni bir katalog ve sayfa ağacı kurar. Yeni sayfa ağacında sadece üç sayfa vardır ve sırayla dizilirler.

5. Çapraz referans tablosunu (xref) yeniden yazar. Bu tablo, her nesnenin dosyanın hangi baytında başladığını söyler; görüntüleyicinin bir nesneyi bulmak için tüm dosyayı taramasını engeller.

Bu adımların hiçbirinde görsel işleme yoktur. Hiçbir JPEG yeniden kodlanmaz, hiçbir metin yeniden çizilmez. İşlem esasen bir kopyalama ve yeniden numaralandırma işidir — bu yüzden hem çok hızlıdır hem de kalite kaybı kesinlikle sıfırdır.

Boyut sürprizinin açıklaması

Şimdi en sık sorulan soruya gelelim: 300 sayfalık, 40 MB'lık bir dosyadan 2 sayfa çıkardınız ve sonuç 4 MB. Neden?

Cevap ikinci adımda: bağımlılık takibi. Çıkardığınız sayfa, belgede kullanılan gömülü yazı tipini kullanıyorsa, o yazı tipi nesnesi yeni dosyaya kopyalanmak zorundadır. Tam bir Türkçe destekli yazı tipi ailesi (normal, kalın, italik, kalın-italik) rahatlıkla 2-3 MB tutar. Sayfa üzerinde tam sayfa bir fotoğraf varsa o da olduğu gibi taşınır.

| Kaynak tipi | Çıkarılan dosyaya etkisi | |---|---| | Gömülü yazı tipi (tam) | Tamamı taşınır, MB'larca olabilir | | Gömülü yazı tipi (alt küme) | Alt küme taşınır, daha küçük | | Sayfadaki görseller | Olduğu gibi taşınır, kalite değişmez | | ICC renk profili | Taşınır, birkaç yüz KB | | Kullanılmayan kaynaklar | Taşınmaz, atılır |

Bazı araçlar bir adım daha ileri gider ve gömülü yazı tipini "yeniden alt kümeler" — yani sadece çıkarılan sayfalarda geçen harfleri tutar. Bu ciddi bir küçülme sağlar ama daha ağır bir işlemdir ve her araç yapmaz.

Boyut sizin için kritikse pratik çözüm basittir: çıkarma işleminden sonra dosyayı bir kez sıkıştırma aracından geçirin. Sıkıştırma, kullanılmayan kaynakları atar, görselleri yeniden kodlar ve akışları yeniden sıkıştırır.

Yer imleri ve bağlantılara ne oluyor

Belgenin dış çizgi (outline) ağacı, katalog düzeyinde yaşar ve her girdisi bir hedefe işaret eder: "Bölüm 3 → sayfa nesnesi 147".

3 sayfa çıkardığınızda bu ağacın girdilerinin neredeyse tamamı artık dosyada olmayan sayfalara işaret eder. Kırık hedefli bir yer imi, tıklandığında hiçbir şey yapmaz veya görüntüleyiciyi hata verdirir. Bazı araçlar hayatta kalan girdileri süzüp taşımaya çalışır; sonuç genellikle iki başlıktan ibaret, hiyerarşisi kopmuş bir ağaç olur ve faydadan çok karışıklık yaratır. Bu yüzden birçok uygulama dış çizgiyi tamamen atmayı tercih eder.

Aynı mantık iç bağlantılar için de geçerli. "Bkz. Ek B" gibi bir bağlantının hedefi çıkarılmadıysa bağlantı kırılır. Buna karşılık dış bağlantılar (bir web adresine giden URI eylemleri) hiçbir sayfaya bağlı olmadıkları için sorunsuz çalışmaya devam eder.

Form alanları ilginç bir ara durumda. Alanın kendisi sayfaya bağlı bir açıklamadır, dolayısıyla taşınır. Ama formun alan sözlüğü (AcroForm) belge düzeyindedir ve alanlar arası hesaplama veya doğrulama mantığı içerebilir. Çok sayfalı bir formun bir kısmını çıkardığınızda alanlar görünür ama mantık kopuk olabilir.

Sayfa numarası ikilemi

Çıkardığınız dosyada sayfa sayacı 1'den başlar — bu, sayfa ağacındaki sıradan gelir. Ama sayfanın üzerine basılı olan "47" numarası, içerik akışının bir parçasıdır: bir metin çizim komutudur. Çıkarma işlemi içerik akışına dokunmadığı için o numara aynen kalır.

Yani yeni dosyanızın 1. yaprağının altında "47" yazıyor olabilir. Bu bir hata değil, formatın doğal sonucudur. Düzeltmek isterseniz iki yol var: yeni bir numaralandırma basmak (eski numaranın yanında görünür) veya eskiyi düzenleme aracıyla beyaz kutuyla örtüp yeni numara eklemek.

Bazı PDF'lerde ayrıca sayfa etiketi (page label) tanımları bulunur — görüntüleyicinin sayfa kutusunda "iv" veya "A-3" gibi özel etiketler göstermesini sağlayan belge düzeyi bir yapıdır. Bunlar çıkarma sırasında genellikle taşınmaz.

Neden tarayıcıda yapılabiliyor

Yukarıdaki adımların hiçbiri ağır hesaplama içermez. Nesneleri okumak, bağımlılıkları izlemek, yeniden numaralandırıp yazmak — bunların hepsi bellek ve dosya işlemleridir. Modern bir tarayıcı bunu birkaç yüz sayfalık dosyalarda bile hızla yapar.

Bunun pratik sonucu şu: dosyanız hiçbir sunucuya gitmez. Gizli bir sözleşmeden imza sayfalarını çıkarıyorsanız veya bir hasta raporundan ilgili yaprağı ayırıyorsanız, belge cihazınızdan hiç ayrılmaz. Ayrıca yükleme-indirme beklemesi olmadığı için işlem, dosya boyutundan bağımsız biçimde hızlıdır.

Sınır, tarayıcı sekmesinin kullanabileceği bellektir. Çok büyük dosyalarda (yüzlerce megabayt, binlerce yüksek çözünürlüklü sayfa) bellek baskısı yaşanabilir; bu durumda dosyayı önce kabaca bölüp sonra çıkarma yapmak işi rahatlatır.

Özetle

Sayfa çıkarma, PDF'in nesne grafında bir erişilebilirlik taraması yapıp seçili sayfalara bağlı her şeyi yeni bir dosyaya kopyalamaktır. Hiçbir içerik yeniden kodlanmadığı için kalite kaybı sıfırdır ve işlem çok hızlıdır. Buna karşılık paylaşılan kaynaklar (özellikle gömülü yazı tipleri) taşınmak zorunda olduğu için çıktı orantısız büyük kalabilir; sıkıştırma bunu çözer. Belge düzeyinde yaşayan yer imleri, iç bağlantılar ve sayfa etiketleri ise doğaları gereği bu işlemden sağ çıkamaz — hedefleri artık dosyada değildir.

Sıkça Sorulan Sorular

Sayfa çıkarınca görsel kalitesi düşer mi?

Hayır, hiç düşmez. Çıkarma işlemi görselleri yeniden kodlamaz; sayfanın içerik akışını ve bağlı olduğu nesneleri olduğu gibi yeni dosyaya kopyalar. Bir JPEG görsel neyse o kalır, metin vektör olarak kalır. Bu, sıkıştırma işleminden temel farkıdır — sıkıştırmada görseller yeniden kodlanabilir ve kalite düşebilir.

Neden 300 sayfalık dosyadan çıkardığım 2 sayfa 4 MB tutuyor?

Çünkü o iki sayfa, belge düzeyinde paylaşılan kaynaklara bağlı olabilir. Gömülü bir yazı tipi ailesi tek başına birkaç megabayt tutabilir ve sayfada o yazı tipi kullanıldığı sürece yeni dosyaya taşınması gerekir. Aynı şey renk profilleri ve sayfaya yerleştirilmiş yüksek çözünürlüklü görseller için de geçerlidir. Sıkıştırma aracı bu durumda genellikle işe yarar.

Yer imlerinin taşınmaması bir eksiklik mi, teknik bir zorunluluk mu?

İkisinin karışımı. Yer imleri belge düzeyinde bir dış çizgi (outline) ağacında saklanır ve her girdi bir sayfaya işaret eder. Çıkardığınız alt kümede o sayfaların çoğu bulunmadığı için girdilerin büyük kısmı kırık hedeflere işaret eder. Bazı araçlar hayatta kalan girdileri taşımaya çalışır, ama sonuç genellikle yarım ve kafa karıştırıcı olduğu için birçok uygulama dış çizgiyi tamamen atmayı tercih eder.

Çıkarma işlemi tarayıcıda nasıl yapılabiliyor, sunucu gerekmiyor mu?

Gerekmiyor, çünkü işlem hesaplama açısından hafiftir. Yapılan şey nesneleri okuyup yeni bir dosyaya yazmak ve referansları yeniden numaralandırmaktan ibarettir; görsel işleme veya yeniden kodlama yoktur. Modern tarayıcılar bunu birkaç yüz sayfalık dosyalarda bile rahatlıkla yapar ve dosya cihazdan hiç çıkmaz.

Bu konuyu Sayfa Çıkar aracıyla hemen deneyin.

Sayfa Çıkar aracını dene