PDF Overlay Nedir? İçerik Akışı ve Katman Mantığı
6 dk okuma
Bir PDF'i diğerinin üzerine bindirdiğinizde dosyanın içinde ne oluyor? İki sayfa üst üste yapıştırılmıyor, çünkü PDF'te sayfa bir görüntü değil, çizim komutlarından oluşan bir akış. Bu yazıda bindirme işleminin bu akışa nasıl müdahale ettiğini, XObject form nesnelerinin ne işe yaradığını ve çizim sırasının neden her şeyi belirlediğini anlatıyoruz.
Sayfa içeriği: sıralı bir çizim akışı
Her PDF sayfasının bir içerik akışı (content stream) vardır. Bu akış, sayfanın nasıl çizileceğini anlatan komutların sıralı listesidir:
q % grafik durumunu kaydet
1 0 0 RG % çizim rengini kırmızı yap
50 700 200 100 re % dikdörtgen tanımla
f % doldur
Q % grafik durumunu geri yükle
BT % metin bloğu başlat
/F1 12 Tf % F1 yazı tipini 12 punto seç
72 650 Td % konuma git
(Merhaba) Tj % metni çiz
ET % metin bloğu bitir
Kritik özellik: komutlar sırayla uygulanır ve sonraki çizim öncekinin üzerine gelir. Bir tuval üzerinde boya sürmek gibidir — önce sürdüğünüz kapanır.
Bu tek gerçek, bindirmenin tüm mantığını açıklar.
Bindirme akışa nasıl ekleniyor
Bindirme işlemi, bindirme dosyasının sayfa içeriğini ana belgenin sayfa akışına ekler. İki konumdan biri seçilir:
Ön plan (overlay): Bindirme komutları akışın sonuna eklenir. Sonra çizildiği için ana içeriğin üzerine gelir.
Arka plan (underlay): Bindirme komutları akışın başına eklenir. Önce çizildiği için ana içerik onun üzerine gelir.
Bu kadar basit. "Katman" kavramı burada mecazi — dosyada açılıp kapanabilir bir katman oluşmaz, sadece komutların sırası değişir.
Ancak dikkat edilmesi gereken bir teknik ayrıntı var: grafik durumu sızıntısı. Bindirme akışı bir rengi veya dönüşüm matrisini değiştirip geri almadan biterse, ardından gelen ana içerik o ayarlarla çizilir ve belge bozulur. Bu yüzden düzgün uygulamalar bindirme akışını q (kaydet) ve Q (geri yükle) komutlarıyla sarar. Bindirme sonrası belgenizde beklenmedik renk değişimleri veya kaymalar görüyorsanız sebebi genellikle budur.
XObject form: tekrarı çözen yapı
80 sayfalık bir belgeye antet bindirdiğinizi düşünün. Antet komutlarını 80 sayfanın her birinin akışına ayrı ayrı kopyalamak mümkündür ama israftır — özellikle antette karmaşık bir vektör logo veya gömülü görsel varsa.
Çözüm XObject form nesnesidir. Form XObject, "yeniden kullanılabilir bir çizim bloğu" gibidir: kendi içerik akışı ve kendi kaynakları olan bağımsız bir nesne. Bir sayfa onu tek bir komutla çağırır:
q
1 0 0 1 0 0 cm % dönüşüm matrisi (konum/ölçek)
/Antet Do % Antet formunu çiz
Q
Bindirme aracı, bindirme dosyasının sayfasını bir form XObject'e dönüştürür ve dosyaya bir kez koyar. Sonra her sayfaya sadece o iki satırlık çağrıyı ekler.
Pratik sonucu şudur: dosya boyutu artışı sayfa sayısından bağımsızdır. 10 sayfaya da 500 sayfaya da bindirseniz, antetin verisi bir kez saklanır. Artış, bindirme dosyasının kendi kaynaklarından gelir — gömülü yazı tipi, logo görseli.
Dönüşüm matrisi: konumlandırma nasıl yapılıyor
Form çağrısındaki cm komutu bir dönüşüm matrisi belirler. Bu matris altı sayıdan oluşur ve ölçekleme, kaydırma ve döndürmeyi birlikte tanımlar:
a b c d e f cm
Basit durumda 1 0 0 1 0 0 kullanılır — hiçbir dönüşüm yok, form kendi koordinatlarında çizilir. Bindirmeyi 20 birim sağa, 30 birim yukarı kaydırmak isterseniz 1 0 0 1 20 30 yazılır. Yarım ölçekte çizmek için 0.5 0 0 0.5 0 0.
PDF koordinat sisteminde orijin sayfanın sol alt köşesidir ve y ekseni yukarı doğru artar. Bu, ekran koordinatlarının (sol üst orijin, y aşağı artar) tersidir ve bindirme hizalamasında kafa karışıklığının yaygın kaynağıdır.
Sayfa boyutları farklıysa sorun burada çıkar. Ana belge A4 (595 × 842 punto), bindirme Letter (612 × 792 punto) ise ve dönüşüm matrisi kimlik matrisiyse, bindirme sol alt köşeden hizalanır. Sonuç: bindirmenin üst kısmı 50 punto aşağıda kalır ve sağ tarafı 17 punto taşar. Bu yüzden bindirme dosyasını hedef boyutta hazırlamak, sonradan hizalamaya çalışmaktan çok daha güvenilirdir.
Kaynak çakışması ve çözümü
Bindirme dosyası ile ana belge, aynı iç adları kullanan farklı kaynaklara sahip olabilir. Her ikisinde de /F1 adında bir yazı tipi, /Im1 adında bir görsel bulunabilir — ama bunlar farklı yazı tipleri ve farklı görsellerdir.
Birleştirme sırasında araç bunu çözmek zorundadır. Standart yaklaşım: bindirme dosyasının kaynaklarını ana belgeye kopyalarken çakışan adları yeniden adlandırmak (/F1 → /Ov_F1 gibi) ve form XObject'in içindeki referansları buna göre güncellemek.
Bunun bir yan etkisi vardır: aynı yazı tipi dosyada iki kez bulunabilir. Ana belgede Arial gömülüyse ve bindirme dosyasında da Arial gömülüyse, ikisi ayrı nesneler olarak durur. Dosya boyutu bir miktar artar. Bindirme sonrası sıkıştırma aracından geçirmek bu tür tekrarları genellikle temizler.
Saydamlık: neden sonradan eklenemiyor
Bindirmeyi ön plana koyduğunuzda ve bindirme içeriği opaksa, altındaki her şeyi kapatır. Filigran benzeri bir etki istiyorsanız saydamlık gerekir.
PDF'te saydamlık, ExtGState (genişletilmiş grafik durumu) sözlüğüyle tanımlanır. Bir çizim komutundan önce şu ayarlanır:
/GS1 gs % GS1 grafik durumunu uygula
ve GS1 sözlüğünde /ca 0.3 (doldurma saydamlığı) veya /CA 0.3 (çizgi saydamlığı) gibi değerler bulunur.
Bindirme araçları genellikle bindirme dosyasının içeriğini olduğu gibi taşır ve bu ayarlara müdahale etmez. Bu yüzden saydamlık, bindirme PDF'ini üretirken ayarlanmalıdır — tasarım programınızda öğenin opaklığını düşürüp PDF'e öyle aktarın.
Ayrıca saydamlık kullanan içerikler genellikle bir saydamlık grubu içine alınır. Bu, karışım (blending) hesaplamalarının doğru yapılmasını sağlar ama bazı eski görüntüleyicilerde ve bazı yazıcı sürücülerinde farklı işlenebilir. Kritik baskı işlerinde bindirme sonrası çıktıyı gerçek yazıcıda test etmek gerekir.
Metin olarak kalıyor mu?
Evet. Bindirme işlemi metni görsele çevirmez; bindirme dosyasındaki metin gerçek metinse, birleşik dosyada da seçilebilir ve aranabilir kalır.
Bunun iki yüzü var:
Faydası: Anteteki kurum adı arama sonuçlarında çıkar, damgadaki tarih kopyalanabilir, belge işleme sistemleri bu bilgileri okuyabilir.
Dikkat edilecek yanı: Bindirme, gizleme aracı değildir. Ana belgedeki bir bilgiyi bindirmeyle kapatırsanız, o bilgi dosyada durmaya devam eder ve metin seçme veya çıkarma işlemleriyle ortaya çıkar. Gizli bilgi kaldırmak için redaksiyon gerekir — o işlem içeriği dosyadan fiziksel olarak siler.
Gerçek katmanlar: isteğe bağlı içerik grupları
PDF'te açılıp kapanabilen gerçek katmanlar da vardır: isteğe bağlı içerik grupları (OCG - Optional Content Groups). Teknik çizimlerde ve haritalarda kullanılır; görüntüleyicide bir panelden katmanları açıp kapatabilirsiniz.
Bindirme araçları genellikle bunu kullanmaz — sadece çizim sırasını ayarlar. Yani bindirilen anteti sonradan görüntüleyicide kapatamazsınız; içerik akışının kalıcı bir parçası olmuştur.
Ayrılabilir bir katman istiyorsanız, bindirmeyi OCG olarak ekleyen özel araçlara ihtiyacınız olur. Bu, taslak damgası gibi geçici işaretlemelerde faydalı olabilir ama günlük kullanımda nadiren gerekir.
Özetle
Bindirme, PDF sayfasının içerik akışına yeni çizim komutları eklemekten ibarettir — akışın sonuna eklenirse üstte, başına eklenirse altta görünür. Tekrar eden bindirmeler XObject form nesnesi olarak bir kez saklanır ve her sayfa ona referans verir, bu yüzden dosya boyutu sayfa sayısından bağımsız olarak artar. Konumlandırma dönüşüm matrisiyle yapılır ve sayfanın sol alt köşesini referans alır; boyut uyuşmazlığı bu yüzden kayma yaratır. Saydamlık grafik durumu sözlüğünde tanımlıdır ve bindirme sırasında eklenemez, bindirme dosyasında hazır olmalıdır. Ve bindirilen metin gerçek metin olarak kalır — bu hem faydalı hem de gizlilik açısından farkında olunması gereken bir davranıştır.
Sıkça Sorulan Sorular
PDF'te gerçek anlamda 'katman' var mı?
İki farklı şey var. Biri isteğe bağlı içerik grupları (OCG) — kullanıcının açıp kapatabildiği gerçek katmanlar, teknik çizimlerde kullanılır. Diğeri ise çizim sırasıdır: içerik akışında sonra çizilen, önce çizilenin üzerine gelir. Bindirme işlemi genellikle ikincisini kullanır; ayrı bir açılıp kapanabilir katman oluşturmaz, sadece çizim komutlarını doğru sıraya yerleştirir.
Bindirme sonrası dosya boyutu neden çok artmıyor?
Çünkü bindirme içeriği tek bir XObject form nesnesi olarak dosyaya bir kez konur ve her sayfa ona referans verir. 200 sayfalık bir belgeye logo bindirdiğinizde logo 200 kez değil, bir kez saklanır. Artış esas olarak bindirme dosyasının kendi kaynaklarından (yazı tipi, görsel) gelir ve sayfa sayısından bağımsızdır.
İki dosyada aynı yazı tipi varsa çakışma olur mu?
Olmaz, çünkü birleştirme sırasında nesne numaraları yeniden atanır ve kaynak adları gerekirse yeniden adlandırılır. İki dosya da /F1 adında farklı yazı tipleri kullanıyorsa, araç bunları çakışmayacak adlarla ayırır. Sonuçta dosyada aynı yazı tipinin iki kopyası bulunabilir — bu, dosya boyutunu bir miktar artırır ama görsel bir soruna yol açmaz.
Bindirilen içerik metin olarak seçilebilir mi?
Evet, bindirme dosyasındaki metin gerçek metinse seçilebilir ve aranabilir kalır. Bindirme işlemi metni görsele çevirmez. Bu, bir damganın veya antet bilgisinin arama sonuçlarında çıkması anlamına gelir — genellikle istenen bir şeydir, ama gizlilik açısından farkında olmanız gereken bir davranıştır.
Bu konuyu PDF Bindirme (Overlay) aracıyla hemen deneyin.
PDF Bindirme (Overlay) aracını dene