PDF’yi parse etmek mi istiyorsunuz?
(eliot-jones.com)- PDF ayrıştırma, net bir sıra ve yapı temelinde çalışmalıdır; ancak gerçek dosyalar çoğu zaman bu kurala uymaz
- cross-reference (xref) işaretçileri ve ofsetlerin bulunması sırasında çeşitli hatalar ve tutarsızlıklar ortaya çıkar
- Pratikte birçok sorun, PDF başlığından önceki gereksiz veriler ya da işaretçi ve ofsetlerin yanlış konumlanması nedeniyle oluşur
- PDF xref tablosunun kendisinin belirsiz veya hatalı biçimlendirilmiş olduğu pek çok durum da vardır
- Bu yüzden başlıca görüntüleyiciler, standart dışı PDF dosyalarını da destekleyen ek mantıklar uygular
PDF ayrıştırmaya ideal yaklaşım
- PDF ayrıştırma teorik olarak belirli adımlarla ilerler
- Dosyanın başlangıcında sürüm başlığı yorumunu bulur
- cross-reference (xref) işaretçisini bulur
- Tüm nesne ofsetlerini toplar
- trailer sözlüğünü bularak genel katalog yapısına erişir
PDF nesnelerine giriş
- PDF nesneleri, sayı, string, sözlük gibi çeşitli PDF öğelerini sarmalayıp saklayan birimlerdir
- Her nesne,
obj/endobjişaretleri arasında bulunur - Nesneler, dolaylı referans (indirect reference, ör.
16 0 R) yöntemiyle birbirine bağlanır - Dosya içindeki nesne bölümlenmesi serbesttir; ancak bazı nesne türleri mutlaka dolaylı referans olmalıdır
cross-reference ofsetlerini bulma
- PDF yapısında, nesne konumları için bir indeks görevi gören cross-reference (xref) tablosu bulunur
- Dosyanın sonunda
startxrefifadesiyle belirli bir bayt konumu işaretçi olarak belirtilir - Bu işaretçi xref konumunu gösterir; ancak spesifikasyon ile gerçek dosyalar arasında farklar vardır. Örneğin
%EOFişaretinin aslında son satırda olması gerekirken, gerçek PDF’lerde son 1.024 bayt içindeki herhangi bir yerde olabilir - Gerçek dosyalarda işaretçi biçim hataları (
startrefvb.), satır sonu eksikliği gibi çeşitli varyasyonlar görülür
nesne ofsetlerini bulma
- xref tablosunda sırasıyla
xref, nesne başlangıç numarası ve nesne sayısı yer alır; her nesnenin ofseti/oluşturma numarası/durumu (nveyaf) bir satıra yazılır - Birden fazla xref tablosu olabilir ya da bunlar
/Prevgirdisi üzerinden birbirine bağlanabilir
trailer sözlüğünün konumunu arama
startxrefişaretinin üst tarafında trailer sözlüğü bulunur ve kök nesneyi bulmak için gerekli temel meta verileri içerir- Kök nesne temel alınarak tüm yapının yorumlanmasına başlanabilir
Gerçek dünya: beklenmedik sorunlar
-
PDF spesifikasyonuna uymayan çok sayıda dosya bulunduğundan, genel amaçlı ayrıştırıcılarla bunları işlemek zordur
-
cross-reference işaretçisi aramasında sık görülen başarısızlık durumları
- İşaretçi dosya sonunda veya son 1.024 bayt içinde değildir
- Yazım hataları (
startrefvb.) - İstisnai biçimler
-
3.977 gerçek PDF örneği üzerinde yapılan incelemede, yaklaşık %0,5’inde xref bildirimi hatası bulundu
PDF içeriği sıfır olmayan bir ofsette başlıyor
- Başlıktan önce gereksiz veri (junk) varsa, tüm bayt ofsetleri kayar ve
startxrefkonumu bozulur - Ofsetler başlığın konumuna göre yeniden hesaplanmalı ve her iki konum da kontrol edilmelidir
- Bu durum tüm hataların yaklaşık %50’sini oluşturur
xref işaretçisi xref tablosunun ortasını gösteriyor
- Belirtilen ofset bazen xref tablosunun tam ortasına da denk gelebilir
- 3.977 örnekten yaklaşık 5’inde görülmüştür
İşaretçi xref’in yakınında
- Çoğu zaman işaretçi tam doğru değildir; ancak xref’in hemen öncesi veya sonrasındaki boşluk ya da satır sonu karakteri farkı kadar kaymıştır
İşaretçi doğru ama xref ofseti yanlış
- xref tablosuna yazılmış ofsetlerin kendisi de hatalı olabilir
- Bazı nesneler doğruyken geri kalanlar ofset hatası içerebilir
İlk işaretçi normal ama önceki ofset (/Prev) sorunlu
- PDF düzenlenirken oluşan
/Previşaretçisinde hatalı değerlerin (ör.0) saklandığı çok sayıda örnek vardır
xref tablosu anormal biçimde
- Satır sonu olmadan
xrefile sayıların bitişmesi, bildirilen nesne sayısından fazla giriş bulunması veya tablonun ortasında çöp veri yer alması gibi farklı durumlar görülebilir - Bu tür örnekler PdfPig gibi projelerde issue olarak sıkça raporlanmıştır
Sonuç
- Spesifikasyona göre PDF ayrıştırma standart bir sırayla yapılmalıdır; ancak gerçek dosyaların çoğu böyle olmadığından ayrıştırma sırasında çeşitli sorunlar ortaya çıkar
- Gerçek kullanımda PDF görüntüleyicileri, standart dışı PDF desteğini genişleten özellikleri temel olarak içerir
- Bu özet, PDF spesifikasyonunun (toplam 1300 sayfanın 22 sayfasına karşılık gelen) yalnızca küçük bir ayrıştırma bölümünü ele aldı
Henüz yorum yok.