Structure

Structure

Bu sayfa belge gezinmesi ve mantıksal yapıyı kapsar: anahatlar (yer imleri), içindekiler tabloları, adlandırılmış hedefler ve erişilebilirlik ve yeniden akış için kullanılan etiketlenmiş yapı ağacı.


Anahatlar (Yer İmleri)

Document.GetOutlines() mevcut anahat ağacını OutlineItem[] olarak döndürür ([] eğer /Outlines yoksa); Document.SetOutlines() onu değiştirir — [] geçmek anahatı tamamen kaldırır. Her OutlineItem bir Title, bir Dest (sayfa numarası ya da adlandırılmış hedef), isteğe bağlı Children iç içeleme için ve stil (Color, Bold, Italic, Open) içerir.

const items: OutlineItem[] = sections.map((s) => {
  const item: OutlineItem = { Title: s.title, Dest: { name: s.dest } };
  if (s.subtype === 'sales') {
    item.Open = true;
    item.Children = ['Pasta', 'Pizza', 'Antipasti']
      .map((cat) => ({ Title: cat, Dest: { name: s.dest } }));
  }
  return item;
});
doc.SetOutlines(items);

İçindekiler Tablosu

Page.AddTOC(), bir sayfada bir dikdörtgene, sarmalanmış başlıklar, nokta liderleri ve sağa hizalanmış sayfa etiketleriyle, TOCEntry nesnelerinden oluşan bir listeyi — her biri bir title ve hedef page numarası ile — oluşturur. Çizilen giriş sayısını bildiren bir AddTOCResult döndürür ve kutu çok küçük olduğunda, sığmayan remainder‘i raporlar.

page.AddTOC(
  sections.map((s, i) => ({ title: `${i + 1}. ${s.title}`, page: s.page.Number })),
  [72, 160, 400, 400],
  { font: 'Helvetica', fontSize: 13, rowGap: 18 },
);

Adlandırılmış Hedefler

Document.GetNamedDestinations() her adlandırılmış hedefi döndürür — /Names /Dests ad ağacını ve eski /Dests sözlüğünü birleştirerek — { name, dest } çiftleri olarak, burada dest bir PageDest ({ page, view })‘dır. Bunlar, bir OutlineItem.Dest veya bir link açıklamasının adla, açık bir sayfa numarası yerine başvurabileceği aynı adlandırılmış hedeflerdir.

const destNames = new Set(doc.GetNamedDestinations().map((d) => d.name));
for (const { name, dest } of doc.GetNamedDestinations()) {
  console.log(name, '-> page', dest.page);
}

Etiketli Yapı Ağacı

Document.AutoTag() sayfa düzeninden — yazı tipi boyutu kümelenmesine göre başlıklar, metin bloklarına göre paragraflar, çizgi geometrisine göre tablolar ve görüntü başına /Figure vs. /Artifact kararları — bir /StructTreeRoot tahmin eder ve yazar, ve her öğe türü için sayımlarla bir AutoTagReport döndürür. Document.GetStructTree(), ortaya çıkan StructTreeRoot‘ı okur, ya da belge etiketlenmemiş olduğunda null.

const report = doc.AutoTag({ lang: 'en-US', title: 'Quarterly Report', tables: true });
console.log(report.headings, report.paragraphs, report.tables, report.figures);

const tree = doc.GetStructTree();
console.log(tree ? tree.GetText() : '(no structure tree)');

AutoTag() zaten çalıştıktan sonra eklenen içerik — örneğin sonradan doldurulan bir sayfa — bu geçiş tarafından kapsanmaz ve çift etiketlenmez. StructTreeRoot.Append() ve StructElement.MarkContent(), sezgisel olanın yanında manuel yazar API ‘dır: Append(), verilen türde bir alt öğe ekler ve MarkContent(), bir sayfa bölgesini o öğeye ait olarak işaretler.


İpuçları ve En İyi Uygulamalar

  • Document.AutoTag()‘ı bir kez çalıştırın, sayfa içeriği son haline geldikten sonra — sonradan eklenen içeriği yeniden etiketlemez, bu yüzden daha sonra eklenen her şeyi StructTreeRoot.Append() / StructElement.MarkContent() ile elle etiketleyin.
  • opts.title‘ı AutoTag()‘e geçirin — ayrıca /ViewerPreferences /DisplayDocTitle‘yi ayarlar, ki bu PDF/UA bir belge başlığıyla birlikte gerektirir.
  • Bir OutlineItem.Dest, açık bir sayfayı ya da adlandırılmış bir hedefi ({ name: '...' }) hedef alabilir — içerik değiştikçe hedef sayfa numarası kayabilir, bu yüzden adlandırılmış hedefleri kullanın.
  • Otomatik sayfalama kapalıyken AddTOCResult.remainder‘ı kontrol edin — her giriş için çok küçük bir içindekiler tablosu kutusu, kutuyu taşımak yerine sessizce çizmeyi durdurur.

Yaygın Sorunlar

SorunNedenDüzeltme
Document.GetStructTree() null döndürürBelge etiketlenmemiştirÖnce Document.AutoTag() veya Document.CreateStructTree() çağırın
Bir anahat öğesinin bağlantısı çözülemiyorBu Dest, Document.GetNamedDestinations() içinde bulunmayan bir hedefi adlandırıyorAdlandırılmış hedefin var olduğunu doğrulayın, ya da bunun yerine açık bir sayfa Dest kullanın
Page.AddTOC() son bölümden önce dururHedef rect her giriş için çok küçük ve autoPaginate kapalırect öğesini büyütün, autoPaginate: true geçin, ya da AddTOCResult.remainder işleyin
AutoTag() sonrasında eklenen içerik yapı ağacında eksikAutoTag() yalnızca çalıştığı anda mevcut olan içeriği etiketlerDaha sonraki içeriği StructTreeRoot.Append() / StructElement.MarkContent() ile elle etiketleyin

FAQ

Bir PDF’ye yer işaretleri nasıl eklerim?

OutlineItem nesnelerinden (Title, Dest, isteğe bağlı Children) oluşan bir dizi oluşturun ve bunu Document.SetOutlines()‘e gönderin.

İçindekiler tablosu birden fazla sayfaya yayılabilir mi?

Evet — Page.AddTOC()‘in seçeneklerine autoPaginate: true‘ı geçirin veya AddTOCResult.remainder‘yi kontrol edin ve sığmayan şeyler için yeni bir sayfada AddTOC()‘ü tekrar çağırın.

Bir PDF’yi erişilebilir (etiketlenmiş) nasıl yaparım?

Çağır Document.AutoTag(), sayfa düzeninden başlıkları, paragrafları, tabloları ve şekilleri çıkarır. Sonradan eklenen içerik için veya sezgisel sonucun düzeltilmesi gerektiğinde, StructTreeRoot.Append() ve StructElement.MarkContent() doğrudan kullanın.

Sayfa numarası hedefi ile adlandırılmış hedef arasındaki fark nedir?

Sayfa-numarası hedefi (PageDest) açık bir 1 tabanlı sayfayı hedef alır. Adlandırılmış hedef (NamedDest) ise bir adı hedef alır; bu ad, görüntüleyici tarafından belgenin kendi adlandırılmış hedef tabloları aracılığıyla çözülür — hedef sayfa hareket edebileceğinde faydalıdır.


API Reference Özeti

Sınıf/YöntemAçıklama
Document.GetOutlines() / Document.SetOutlines()Belge taslağını (yer imi) ağacını oku veya değiştir
OutlineItemBir taslak düğümü: Title, Dest, isteğe bağlı Children
Page.AddTOC()İçindekiler tablosunu bir sayfa dikdörtgenine render et
TOCEntry / AddTOCResultBir TOC satırının verileri ve çizimin sonucu
Document.GetNamedDestinations()Belgedeki her adlandırılmış hedefi listele
Document.AutoTag()Sayfa düzeninden işaretli bir yapı ağacını çıkar ve oluştur
Document.GetStructTree() / Document.CreateStructTree()Belgenin StructTreeRoot öğesini oku veya oluştur
StructTreeRoot.Append() / StructElement.Append() / StructElement.MarkContent()Yapı ağacını manuel olarak oluştur veya genişlet

Ayrıca Bakınız

 Türkçe