Teknik Makale

PDF Dosya Yapısı: Format Gerçekte Nasıl Çalışır?

PDF, Word veya RTF'nin olduğu şekilde bir belge (document) formatı (format) değildir. Bu (Those) formatlar, bir oluşturucunun (renderer) görüntüleme (display) anında (moment) yorumladığı (interprets) bir içerik (content) dizisini saklar (store), bu nedenle (so) çıktı (output), hangi (whatever) yazı tiplerinin (fonts) ve (and) düzen (layout) motorunun (engine) tesadüfen mevcut (present) olduğuna bağlıdır (depends). PDF, bu (that) sürecin (process) sonucunu (result) saklar (stores): kesin (precise) oluşturma (rendering) talimatları (instructions), yazı tipi programları, sıkıştırılmış (compressed) görüntü (image) akışları (streams) ve (and) bunları (them) her bir sayfanın bağımsız (self-contained) bir (a) açıklamasına (description) birbirine bağlayan (ties) bir nesne (object) grafiği (graph). Dosya, uyumlu (conforming) herhangi bir (any) oluşturucuda (renderer) her bir (each) sayfayı (page) aynı (identically) şekilde yeniden üretmek (reproduce) için (to) yeterli (enough) bilgiyi (information) taşır (carries), bu (which) hem (both) ana tasarım (design) hedefidir (goal) hem de onu (one) programlı (programmatically) olarak (as) oluşturmaya (generate), ayrıştırmaya (parse) veya (or) değiştirmeye (modify) çalıştığınızda karşılaştığınız (encounter) karmaşıklığın (complexity) çoğunun (most) kaynağıdır (source)

Nesne modeli

Her (Every) PDF, numaralandırılmış nesneler (objects) koleksiyonudur (collection). Bir nesne (An object) boole (boolean), tamsayı (integer), gerçek (real) sayı (number), isim (name), dize (string), dizi (array), sözlük (dictionary), akış (stream) veya boş (null) olabilir (can be). İlginç (interesting) olan neredeyse (Almost) her şey, anahtarların isimler (names) olduğu (where) ve değerlerin (values) numara (number) ve (and) üretim (generation) sayısına (count) göre (by) diğer (other) nesnelere referanslar (references) dahil (including) olmak (being) üzere herhangi (any) diğer nesne türü (type) olduğu bir anahtar-değer (key-value) çiftleri (pairs) kümesi (set) olan bir sözlüktür (dictionary). Bir akış (A stream), tipik olarak (typically) sıkıştırılmış (compressed) bir (a) bayt (byte) dizisinin (sequence) izlediği (followed by) bir sözlüktür

Katalog (catalog) sözlüğü (dictionary) köktür (root). Sayfa (page) sözlüklerini düz (flat) bir (a) liste yerine dengeli (balanced) bir ağaç (tree) yapısında (structure) düzenleyen (organizes) sayfa ağacına (tree) işaret eder (points), bu nedenle 10.000 sayfalık bir belgenin (document) 5.000'inci sayfasına gezinmek (navigating), önceki (preceding) her sayfa tanımlayıcısını (descriptor) geçmeyi (traversing) gerektirmez (does not require). Her sayfa sözlüğü içerik (content) akışlarına (streams) (sayfa-açıklaması (page-description) operatörlerinin (operators) bir veya daha fazla dizisi (sequences)), kendi kaynak (resource) sözlüğüne (bu (which) da (in turn) yazı tipi tanımlayıcılarına (descriptors), renk uzaylarına (spaces) ve görüntü (image) XObjects'e referans verir (references)) ve medya (media) kutusuna (box) (sayfanın içinde yaşadığı koordinat (coordinate) uzayı (space)) referans verir. Koordinat orijini, inçin (inch) 1/72'si birimlerinde (units), pozitif Y yukarı doğru (upward) çalışarak (running), sol alt köşededir (bottom-left corner)

Dosyanın (file) sonunda (end), her (each) nesne (object) numarasını (number) dosyadaki (file) bayt uzaklığıyla (offset) eşleyen (maps) çapraz (cross-reference) başvuru tablosu oturur. Rastgele (random) erişimi (access) mümkün kılan (enables) şey budur: bir görüntüleyici (viewer) önce çapraz başvuru tablosunu okur (reads), ardından doğrudan (directly) hangi (whichever) nesnelere (objects) ihtiyacı (needs) varsa (it) onları arar (seeks). PDF 1.5, tabloyu (table) bir (a) akış (stream) nesnesi (object) halinde (into) sıkıştıran (compress) ve ilgili nesneleri nesne (object) akışları (streams) halinde paketleyen (pack), birçok (many) küçük (small) nesne (objects) içeren (with) belgeler (documents) için (for) dosya boyutunu belirgin şekilde (noticeably) azaltan (reducing) çapraz başvuru akışlarını (streams) tanıttı (introduced)

İçerik akışları ve grafik modeli

Bir (A) sayfanın görsel içeriği bir (one) veya (or) daha (more) fazla içerik akışında yaşar (lives). Her (Each) akış, işlenenleri (operands) serpiştirilmiş (interspersed) PDF operatörleri dizisidir. Metin (text) operatörü BT bir metin nesnesini başlatır (begins), Tf kaynak sözlüğünden bir yazı tipi ve boyut seçer (selects), Td metin imlecini konumlandırır (positions), Tj veya TJ bir dizeyi (string) boyar (paints) ve ET metin nesnesini (object) kapatır (closes). Vektör (Vector) grafikleri (graphics) benzer (similar) bir (a) kalıbı izler (follow): m bir yol başlangıç (starting) noktası belirler (sets), l bir çizgi bölümü ekler (appends), c bir Bezier eğrisi ekler ve f veya S yolu doldurur (fills) veya çizer (strokes)

Grafik (graphics) durumu (state), operatörler arasında olan her şeyi yönetir (governs): mevcut (current) dönüşüm (transformation) matrisi (matrix), çizgi genişliği (width), renk uzayı (space), dolgu rengi, çizgi rengi ve kırpma (clipping) yolu (path). q ve Q gibi (like) operatörler, PDF'in (PDF) etrafındaki (around) bağlamı (context) etkilemeden (without affecting) yerel (local) koordinat dönüşümlerini (transformations) ve geçici (temporary) durum geçersiz kılmalarını (overrides) uygulama (implements) yöntemi (how) olan grafik (graphics) durumunu (state) bir yığına (stack) iter (push) ve çeker (pop). Form XObjects bunu (this) genelleştirir (generalize): isteğe bağlı (arbitrary) konumlarda (positions) bir (a) sayfaya boyanabilen (painted) ve (and) tek bir Do operatörüyle (operator) ölçeklendirilebilen (scales) kendi kaynak (resource) sözlüğüne (dictionary) sahip (with) bağımsız (self-contained) bir içerik (content) akışı

Yazı tipi gömme ve metin çıkarma

PDF, yazı tiplerine (fonts) isimle (by name) referans verebilir (reference) ve görüntüleyicinin (viewer) bir şeyi (something) değiştirmesine (substitute) güvenebilir (rely), ancak pratikte paylaşmayı (share) amaçladığınız (intend) herhangi bir belge (document) yazı tipi (font) verilerini (data) gömmek (embed) zorundadır. PDF'ye gömülü bir Type 1 veya TrueType/OpenType yazı tipi (font), bir yazı tipi dosyası akışına işaret (pointing) eden bir yazı tipi tanımlayıcı sözlüğü (dictionary) taşır (carries). TrueType yazı tipleri için o akış (stream) ikili (binary) yazı tipi programını (program) içerir (contains); Type 1 için bu PFB verisidir (data). Her (every) ciddi (serious) PDF oluşturucunun (generator) yaptığı (does) şey olan alt kümeye (Subsetting) ayırma, belge tarafından (by) referans verilmeyen (not referenced) glifleri çıkararak (strips out), büyük (large) Unicode yazı tipleri (fonts) için (for) bile (even) dosya boyutlarını yönetilebilir (manageable) tutar (keeping)

Metin (Text) çıkarma (extraction), yazı (font) tipi gömmenin (embedding) geri (back) ısırdığı (bites) yerdir (where). Bir karakterin (character) görsel (visual) temsili (representation), gömülü yazı tipi programındaki (program) bir glif (glyph) tarafından (by) belirlenir (determined). O (that) karakterin Unicode değeri (value), yazı tipi sözlüğüne eklenmiş (attached) bir ToUnicode CMap akışı (stream) tarafından belirlenir. ToUnicode CMap eksik (missing) veya yanlış (incorrect) olduğunda (When), bir PDF görüntüleyici metni okunaklı bir şekilde (legibly) oluşturabilir (render) ancak anlamlı (meaningful) Unicode olarak çıkaramaz (extract), ki bu (which is) bazı PDF'lerden (PDFs) kopyala-yapıştır yapıldığında çöp (garbage) üretmesinin (produces) nedenidir. Etiketli PDF (Tagged PDF) (ISO 32000 §14.8) ikinci (second) bir (a) katman (layer) ekler: sayfa içeriğini (content) paragraflar, başlıklar ve (and) tablo hücreleri (cells) gibi (like) belge-anlamsal (document-semantic) rollere eşleyen (maps) mantıksal (logical) bir yapı (structure) ağacı (tree). Ekran okuyucular ve yeniden akıtma (reflow) motorları (engines), ham (raw) içerik (content) akışı sırası (order) yerine yapı ağacını kullanır (use), ki bu (which) görsel olarak iyi düzenlenmiş (visually well-laid-out) bir PDF'in etiketleme (tagging) eksik veya yanlışsa neden hala erişilemez (inaccessible) olabileceğini açıklar (explains)

Artımlı güncellemeler ve dijital imzalar

Mevcut (existing) bir PDF'deki değişiklikleri (changes) sıfırdan (from scratch) yeniden yazmadan (rewriting) kaydettiğinizde (save), yeni nesneler (objects), yeni bir çapraz (cross-reference) başvuru bölümü (section) ve yeni bir fragman (trailer) sözlüğü (dictionary) ile (with) birlikte orijinal dosya gövdesinden (body) sonra eklenir (appended). Güncellenmiş (updated) fragman (trailer) yeni çapraz (cross-reference) başvuru (cross-reference) verilerine (data) işaret eder (points) ve (and) değiştirilen (superseded) nesneler (objects) dosyada (file) kalır (remain) ancak yeni çapraz başvuru zinciri (chain) tarafından (by) basitçe referans verilmez (not referenced). Bu (This), artımlı (incremental) güncellemedir (update) ve (and) iki (two) önemli (significant) sonucu (consequences) vardır (has)

Birincisi, dosya her (every) kaydetme döngüsü (cycle) ile büyür (grows). Defalarca (repeatedly) düzenlenen (edited) ve kaydedilen bir belge (A document), eski nesneler katmanları (layers) biriktirir (accumulates). QPDF gibi (like) araçlar, bu (that) alanı (space) geri kazanmak (reclaim) için (to) bir dosyayı (a file) doğrusallaştırabilir (linearize) veya (or) sıkıştırıp yeniden yazabilir (compress-and-rewrite), ancak (but) varsayılan (default) birikimdir (accumulation). İkincisi (Second), dijital (digital) imzalar bütünlük (integrity) modelleri (model) için artımlı güncellemelere (updates) bağlıdır (depend on). Bir ISO 32000 imzası, tipik olarak imza değerinin (value) kendisi için yer tutucu (placeholder) hariç (except) her şeyi olmak üzere (typically everything except), dosyanın bir (a) bayt aralığını kapsar (covers). Ek (additional) artımlı güncellemeler (incremental updates) olarak (as) görünen (appear) imzalama sonrası herhangi bir (Any) değişiklik (changes), imzaladıktan sonra (after signing) yapılan (made) değişiklikler (modifications) olarak (as) doğrulayan (validating) bir (a) okuyucuya (reader) görünür (visible), ki bu (which is) tam olarak (exactly) istediğiniz denetim (audit) izidir (trail). Ancak (However), bu aynı zamanda onay (approval) imzası ekleme (adding) veya (or) form (form) alanlarını doldurma (filling) gibi (such as) belirli (certain) değişikliklerin, belgenin izin ayarlarına (settings) (ISO 32000-2 §12.7.6) uyması (conform) koşuluyla (provided), standart (standard) tarafından orijinal (original) imzayı geçersiz (invalidating) kılmadan açıkça (explicitly) izin (permitted) verildiği anlamına (means) gelir (also). Bu izinlerin (permissions) dışına düşen bir değişiklik (A modification), yetkisiz (unauthorized) olarak (as) işaretlenir (flagged). Bu ayrımı doğru yapmak (Getting this distinction right), aşağı yönde (downstream) karşılıklı imzalanacak (countersigned) belgeler (documents) oluştururken (generating) önemlidir (matters)

Uygunluk (Conformance) seviyeleri (levels) ve (and) ISO 32000 soyu (lineage)

PDF, 1993 yılında tescilli (proprietary) bir Adobe formatı (format) olarak (as) başladı, PostScript'in görüntüleme (imaging) modelini benimsedi (absorbed) ve on beş sürüm (versions) boyunca özellikleri biriktirdi (accumulated): 1.1'de şifreleme (encryption), 1.2'de etkileşimli (interactive) formlar (forms), 1.3'te dijital (digital) imzalar ve mantıksal (logical) yapı (structure), 1.4'te asetat (transparency), 1.5'te nesne akışları (object streams), 1.6'da AES şifreleme (encryption). Adobe, 2007'de (in) PDF 1.7'yi ISO'ya sundu (submitted) ve ISO 32000-1:2008 sonuçtu. ISO 32000-2:2020, yeterince belirtilmemiş (underspecified) birkaç alanı (areas) sıkılaştıran (tightened), AES-256 anahtar (key) türetmesini (derivation) (revizyon 5'in yerini alan revizyon 6) revize eden ve ilişkili (associated) dosyalar (files) ve (and) zengin (rich) medya (media) için açık (explicit) destek (support) ekleyen (added) PDF 2.0'ı kapsar (covers)

Alt standartlar (substandards) aynı tabandan (base) türetilir (derive). PDF/A (ISO 19005), arşiv (archival) kararlılığı (stability) için (for) özelliklerin ticaretini (trades) yapar (trades): şifreleme yok, harici (external) içerik (content) bağımlılıkları (dependencies) yok, tüm (all) yazı tipleri (fonts) gömülü (embedded), renk (color) uzayları cihazdan (device-independent) bağımsız, XMP meta (metadata) verileri gerekli. PDF/A-1 PDF 1.4'e, PDF/A-2 PDF 1.7'ye dayanmaktadır, PDF/A-3 herhangi bir (any) formatta gömülü dosyalara izin (allows) verir (allows). PDF/X (ISO 15930), baskı üretimi (production) alt kümesidir (subset): çıktı (output) amaçları (intents), taşma payı (bleed) ve (and) kesim (trim) kutuları, eski uygunluk (conformance) seviyelerinde (levels) saydamlık (transparency) yok (no). PDF/UA (ISO 14289), erişilebilirlik (accessibility) için etiketli (tagged) yapı (structure), Unicode eşlemeleri (mappings) ve (and) dil meta verilerini (metadata) zorunlu (mandates) kılar (mandates). Bunlar (These) rakip formatlar (formats) değildir; temel (core) PDF'in üzerinde (on top of) ek (additional) kısıtlamalar (constraints) kümeleridir ve tek bir dosya, kısıtlamaların çelişmemesi (do not conflict) koşuluyla (provided) eşzamanlı (simultaneously) olarak (as) birden fazlasına uyabilir (conform)

PDF oluşturan (generates) veya işleyen (processes) kod (code) yazan (writing) herkes (anyone) için (For), pratik temel, çapraz başvuru modelini (§7.5), grafik (graphics) durumunu (state) (§8.4), metin durumu (state) operatörlerini (§9.3), yazı tipi tanımlayıcılarını ve (and) ToUnicode'u (§9.6 ve §9.10), etkileşimli (interactive) formları (forms) (§12.7) ve (and) dijital (digital) imzaları (§12.8) kapsayan bölümlere dikkatli (careful) bir (a) dikkat (attention) ile ISO 32000-2'dir. Standart uzundur, ancak (but) çoğu programlı (programmatic) PDF çalışması dar bir dilimine defalarca dokunur (touches). Nesne modelini (model) ve çapraz başvuru (cross-reference) mekanizmasını anlamak (Understanding) giriş noktasıdır; diğer (else) her şey (everything) oradan (there) uzmanlaşmadır (specialization)