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 şeyiStructTreeRoot.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
| Sorun | Neden | Düzeltme |
|---|---|---|
Document.GetStructTree() null döndürür | Belge etiketlenmemiştir | Önce Document.AutoTag() veya Document.CreateStructTree() çağırın |
| Bir anahat öğesinin bağlantısı çözülemiyor | Bu Dest, Document.GetNamedDestinations() içinde bulunmayan bir hedefi adlandırıyor | Adlandı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 durur | Hedef 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 eksik | AutoTag() yalnızca çalıştığı anda mevcut olan içeriği etiketler | Daha 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öntem | Açıklama |
|---|---|
Document.GetOutlines() / Document.SetOutlines() | Belge taslağını (yer imi) ağacını oku veya değiştir |
OutlineItem | Bir taslak düğümü: Title, Dest, isteğe bağlı Children |
Page.AddTOC() | İçindekiler tablosunu bir sayfa dikdörtgenine render et |
TOCEntry / AddTOCResult | Bir 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 |