PDF Form Alanları Nasıl Çalışır? AcroForm, Görünüm Akışı ve Düzleştirme
6 dk okuma
Bir PDF formunu doldurup gönderdiniz, alıcı "alanlar boş görünüyor" diyor. Ya da form bir programda düzgün, diğerinde farklı yazı tipiyle görünüyor. Bu tuhaflıkların hepsinin kaynağı PDF formlarının nasıl yapılandığında. Bu yazıda form alanlarının dosya içindeki karşılığını ve düzleştirmenin bu yapıyı nasıl ortadan kaldırdığını anlatıyoruz.
İki ayrı dünya: sayfa içeriği ve interaktif katman
Bir PDF sayfasında iki farklı içerik türü bulunur.
Sayfa içerik akışı, sayfanın nasıl çizileceğini anlatan komut dizisidir. Metin, çizgiler, dolgular, görseller — statik olan her şey buradadır.
Açıklamalar (annotations), sayfanın üzerinde duran ayrı nesnelerdir. Yapışkan notlar, vurgulamalar, köprüler ve — bizim konumuz — form alanı widget'ları bu kategoridedir.
Bu ayrım kritik: bir form alanı sayfa içeriğinin parçası değildir. Sayfa nesnesinin /Annots dizisinde listelenen ayrı bir nesnedir. Sayfayı çizen kod ile form alanını çizen kod farklı yollardan çalışır.
AcroForm: belge düzeyindeki form sözlüğü
Belgenin katalog nesnesinde /AcroForm anahtarı bulunur ve bir sözlüğe işaret eder. Bu sözlük formun tamamını yönetir:
/Fields: Belgedeki tüm form alanlarının listesi. Alanlar hiyerarşik olabilir; bir üst alan altında birden çok çocuk alan bulunabilir./DA: Varsayılan görünüm dizesi. Yazı tipi, boyut ve renk gibi bilgiler burada tanımlıdır (/Helv 0 Tf 0 ggibi)./DR: Varsayılan kaynak sözlüğü./DAiçinde adı geçen yazı tiplerinin gerçek tanımları buradadır./NeedAppearances: Kritik bir bayrak; birazdan detaylandıracağız./XFA: Varsa, XML tabanlı dinamik form verisi.
Form alanı nesnesinin kendisi ise şunları taşır:
/FT: Alan tipi —/Tx(metin),/Btn(düğme/onay kutusu),/Ch(seçim listesi),/Sig(imza)./T: Alan adı ("ad_soyad", "tarih" gibi)./V: Alanın değeri — kullanıcının girdiği veri./AP: Görünüm sözlüğü — bu değerin nasıl çizileceği.
Görünüm akışı: tutarsızlığın kaynağı
Şimdi en önemli noktaya geliyoruz. Bir form alanının değeri (/V) ile o değerin görüntüsü (/AP) ayrı şeylerdir.
/V sadece veridir: (Ahmet Yılmaz). Bu metnin sayfada hangi yazı tipiyle, hangi boyutta, nereye hizalanmış olarak çizileceği bilgisi burada yoktur.
/AP ise bir görünüm akışıdır — küçük bir XObject form, tıpkı sayfa içerik akışı gibi çizim komutları içerir. Doğru çalışan bir form doldurma programı, siz bir alana yazdığınızda hem /V değerini günceller hem de /AP görünüm akışını yeniden üretir.
Sorun, bazı programların ikinci adımı atlamasıdır. Değeri yazar, görünümü güncellemez. Bu durumda ne olur?
Görüntüleyiciye bağlı. Gelişmiş bir görüntüleyici, /AP eksikse veya güncel değilse görünümü kendisi üretir — /DA dizesindeki yazı tipi bilgisini kullanarak. Ama her görüntüleyici bunu aynı şekilde yapmaz: satır aralığı, dikey hizalama, taşan metnin kırpılması gibi konularda farklı davranırlar.
Basit görüntüleyicilerde alan boş görünür. Bazı hafif PDF görüntüleyicileri ve mobil uygulamalar görünüm üretme yeteneğine sahip değildir. /AP yoksa hiçbir şey çizmezler.
Yazıcı sürücüleri de aynı sorunu yaşar. "Formu doldurdum ama boş çıkıyor" şikayetinin en yaygın teknik sebebi budur.
NeedAppearances bayrağı
Bu duruma bir çözüm olarak standarda /NeedAppearances bayrağı eklenmiştir. true olarak ayarlandığında şu anlama gelir: "bu formdaki görünüm akışlarına güvenmeyin, siz yeniden üretin."
Form doldurma araçları, görünümü güncelleyemedikleri durumlarda bu bayrağı açarlar.
Ama bayrak sorunu tam çözmez:
- Görünüm üretme yeteneği olmayan görüntüleyiciler bayrağı görmezden gelir ve alan boş kalır.
- Görünüm üretebilen görüntüleyiciler bunu kendi tarzlarında yapar; sonuç programdan programa değişir.
- Yazıcı sürücüleri genellikle bayrağa aldırmaz.
Yani /NeedAppearances, sorunu belirli görüntüleyicilerde çözer ama evrensel bir garanti sağlamaz.
Düzleştirme bu belirsizliği nasıl bitiriyor
Düzleştirme işlemi şunları yapar:
1. Her form alanının görünüm akışını alır. /AP mevcutsa doğrudan kullanılır; yoksa /V değeri ve /DA bilgisi kullanılarak üretilir.
2. Bu görünümü sayfa içerik akışına çizer. Alanın konumu (/Rect) ve boyutu kullanılarak bir XObject form çağrısı olarak veya doğrudan çizim komutları olarak eklenir.
3. Widget açıklamasını /Annots dizisinden kaldırır.
4. /AcroForm sözlüğünü ve içindeki /Fields listesini siler.
5. Form JavaScript'lerini kaldırır — hesaplama ve doğrulama kodları artık işlevsizdir.
Sonuç: değer artık sayfanın kalıcı bir parçasıdır. Hiçbir görüntüleyicinin yorumlamasına gerek yoktur, her programda ve her yazıcıda aynı görünür.
| Konu | Düzleştirme öncesi | Düzleştirme sonrası | |---|---|---| | Görünüm tutarlılığı | Görüntüleyiciye bağlı | Kesin | | Yazdırma güvenilirliği | Sürücüye bağlı | Kesin | | Düzenlenebilirlik | Var | Yok | | JavaScript hesaplamaları | Çalışır | Kaldırılır | | Ekran okuyucu form etiketleri | Var | Kaybolur | | Dosya boyutu | — | Biraz küçülür |
Görünüm akışı bozuksa ne olur
Düzleştirmenin bir tuzağı burada. Araç, mevcut /AP görünüm akışını sabitler. Eğer o akış eski veya boşsa — yani form doldurma programı değeri yazmış ama görünümü güncellememişse — düzleştirme boş veya yanlış bir görünümü sabitleyebilir.
Belirtisi şudur: dosyayı bir programda açtığınızda değerler görünüyor (o program görünümü kendisi üretiyor), düzleştirdikten sonra ise boş çıkıyor.
Çözüm: formu görünüm akışlarını düzgün üreten bir programda açıp kaydedin, sonra düzleştirin. Ya da düzleştirme aracının /V değerinden görünüm üretme yeteneği varsa onu kullanın.
Metin taşması sorunu
Form alanları kendi dikdörtgenleri (/Rect) içinde çizilir. Girdiğiniz metin bu dikdörtgene sığmazsa, interaktif modda alan kaydırılabilir — tıklayıp okumak için kaydırırsınız.
Düzleştirmede kaydırma diye bir şey yoktur. Sadece görünen kısım sabitlenir; gerisi kaybolur.
Bu, uzun adres alanlarında, açıklama kutularında ve çok satırlı metin alanlarında gerçek bir veri kaybı riskidir. Düzleştirmeden önce uzun içerikli alanları kontrol etmek gerekir.
XFA formları: ayrı bir dünya
Bazı PDF'ler AcroForm yerine (veya onunla birlikte) XFA kullanır. Bu, Adobe'nin XML tabanlı dinamik form teknolojisidir: alanlar veriye göre büyür, tablolara satır eklenir, sayfa sayısı değişebilir.
XFA formları PDF standardının doğal parçası değildir; PDF içine gömülmüş ayrı bir teknolojidir. Sadece Adobe'nin kendi ürünlerinde tam çalışırlar. Diğer görüntüleyicilerde genellikle "bu belgeyi görüntülemek için Adobe Reader gerekli" uyarısı görürsünüz.
Yeni PDF sürümlerinde XFA kullanımdan kaldırılmıştır. Karşınıza çıkan bir XFA formunu düzleştirmek genellikle mümkün değildir; önce onu düz bir AcroForm veya statik PDF'e dönüştürmeniz gerekir.
Dijital imzayla ilişkisi
Dijital imza, belgenin imzalandığı andaki bayt aralığının kriptografik özetini saklar. Düzleştirme dosyayı yeniden yazdığı için bu özet artık eşleşmez ve imza doğrulaması başarısız olur.
Ayrıca imza alanının kendisi bir form alanıdır (/FT /Sig). Düzleştirme onu sabit içeriğe çevirirse, imzanın kriptografik yapısı da kaybolur — geriye sadece imzanın görsel temsili kalır ki bu hiçbir doğrulama değeri taşımaz.
Doğru sıra: doldur → düzleştir → imzala.
Özetle
PDF form alanları, sayfa içeriğinden ayrı bir interaktif katmanda yaşar. Alanın değeri (/V) ile o değerin çizimi (/AP görünüm akışı) ayrı yapılardır ve görünüm akışı eksik veya güncel olmadığında her görüntüleyici kendi yorumunu yapar — tutarsız görünüm ve boş yazdırma sorunlarının kaynağı budur. /NeedAppearances bayrağı kısmi bir çözümdür ama evrensel değildir. Düzleştirme, görünümü sayfa içeriğine kalıcı olarak çizip interaktif katmanı tamamen kaldırarak belirsizliği bitirir. Bedeli, geri dönülemezlik ve erişilebilirlik yapısının kaybıdır; riski ise bozuk bir görünüm akışının veya taşan metnin sabitlenmesidir.
Sıkça Sorulan Sorular
Neden aynı form farklı programlarda farklı görünüyor?
Çünkü form alanının değeri ile o değerin nasıl çizileceğini anlatan görünüm akışı ayrı şeylerdir. Görünüm akışı yoksa veya güncel değilse, her görüntüleyici alanı kendi varsayılan yazı tipi, boyutu ve hizalamasıyla çizer. Bir programda 11 punto Helvetica görünen alan, başka bir programda 9 punto sistem yazı tipiyle çizilebilir. Düzleştirme bu belirsizliği ortadan kaldırır.
NeedAppearances bayrağı ne işe yarıyor?
Belge düzeyinde bir bayraktır ve 'bu formdaki alanların görünüm akışları güvenilmez, görüntüleyici onları yeniden üretsin' anlamına gelir. Bir form doldurma programı değeri yazıp görünümü güncellemediyse bu bayrağı açar. Sorun şu ki her görüntüleyici görünümü kendi tarzında üretir ve tutarsızlık doğar; ayrıca bazı basit görüntüleyiciler bayrağı görmezden gelir ve alanlar boş görünür.
Düzleştirme sonrası dosyada form alanı verileri kalıyor mu?
Düzgün bir düzleştirme, AcroForm sözlüğünü ve widget açıklamalarını dosyadan kaldırır, dolayısıyla alan verileri de gider. Ancak dosya artımlı güncelleme geçmişi taşıyorsa önceki sürümler dosyada durmaya devam edebilir. Hassas bilgi söz konusuysa düzleştirmenin ardından dosyayı tam yeniden yazan bir işlemden (örneğin sıkıştırma) geçirmek ve metadata temizlemek daha güvenlidir.
XFA formu nedir, AcroForm'dan farkı ne?
XFA, Adobe'nin XML tabanlı, dinamik form teknolojisidir; alanlar veriye göre büyüyüp küçülebilir, sayfa sayısı değişebilir. AcroForm ise PDF standardının bir parçasıdır ve statiktir. XFA formları yalnızca Adobe'nin kendi ürünlerinde tam çalışır, diğer görüntüleyicilerde çoğu zaman 'bu formu görüntülemek için Adobe Reader gerekli' uyarısı verir. Yeni PDF sürümlerinde XFA kullanımdan kaldırılmıştır.
Bu konuyu Formu Düzleştir aracıyla hemen deneyin.
Formu Düzleştir aracını dene