Structure
Structure
Den här sidan täcker dokumentnavigering och logisk struktur: outlines (bokmärken), innehållsförteckningar, namngivna destinationer och det taggade strukturtträdet som används för tillgänglighet och reflow.
Outlines (bokmärken)
Document.GetOutlines() returnerar det aktuella outline-trädet som OutlineItem[] ([] när det inte finns någon /Outlines); Document.SetOutlines() ersätter det — att skicka [] tar bort outline helt. Varje OutlineItem har en Title, en Dest (ett sidnummer eller en namngiven destination), valfri Children för nästling, och stil (Color, Bold, Italic, Open).
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);Innehållsförteckning
Page.AddTOC() renderar en lista av TOCEntry objekt — var och en med en title och ett mål-page nummer — i en rektangel på en sida, med radbrutna titlar, punktledare och högerjusterade sidetiketter. Den returnerar en AddTOCResult som rapporterar hur många poster som ritades och, när rutan är för liten, de remainder som inte fick plats.
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 },
);Namngivna destinationer
Document.GetNamedDestinations() returnerar varje namngiven destination — genom att slå samman /Names /Dests namnträd och den äldre /Dests ordlistan — som { name, dest } par, där dest är en PageDest ({ page, view }). Detta är samma namngivna mål som en OutlineItem.Dest eller en länkanmärkning kan referera till med namn istället för ett explicit sidnummer.
const destNames = new Set(doc.GetNamedDestinations().map((d) => d.name));
for (const { name, dest } of doc.GetNamedDestinations()) {
console.log(name, '-> page', dest.page);
}Taggat strukturträd
Document.AutoTag() härleder och skapar en /StructTreeRoot från sidlayout — rubriker genom teckenstorleksklustring, stycken genom textblock, tabeller genom linjeringsgeometri, och per bild /Figure vs. /Artifact beslut — och returnerar en AutoTagReport med räknare för varje elementtyp. Document.GetStructTree() läser tillbaka den resulterande StructTreeRoot, eller null när dokumentet är otaggat.
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)');Innehåll som läggs till efter att AutoTag() redan har körts — en sida som fylls i i efterhand, till exempel — omfattas inte av det passet och kommer inte att dubbel-tagga. StructTreeRoot.Append() och StructElement.MarkContent() är den manuella författande API tillsammans med den heuristiska: Append() lägger till ett underordnat element av en given typ, och MarkContent() markerar ett sidområde som tillhör det elementet.
Tips och bästa praxis
- Kör
Document.AutoTag()en gång, efter att sidinnehållet är slutgiltigt — den taggar inte om innehåll som läggs till i efterhand, så manuellt tagga allt som läggs till senare medStructTreeRoot.Append()/StructElement.MarkContent(). - Skicka
opts.titletillAutoTag()— den sätter också/ViewerPreferences /DisplayDocTitle, vilket PDF/UA kräver tillsammans med en dokumenttitel. - En
OutlineItem.Destkan rikta sig mot antingen en explicit sida eller en namngiven destination ({ name: '...' }) — använd namngivna destinationer när målsidans nummer kan förändras när innehållet ändras. - Kontrollera
AddTOCResult.remaindernär automatisk paginering är avstängd — en innehållsförteckningsruta som är för liten för varje post slutar tyst att rita istället för att överskrida rutan.
Vanliga problem
| Problem | Orsak | Lösning |
|---|---|---|
Document.GetStructTree() returnerar null | Dokumentet har inte taggats | Anropa Document.AutoTag() eller Document.CreateStructTree() först |
| Länken för ett dispositionsobjekt kan inte lösas | Dess Dest anger en destination som inte finns i Document.GetNamedDestinations() | Bekräfta att den namngivna destinationen finns, eller använd en explicit sida Dest istället |
Page.AddTOC() stoppar innan den sista sektionen | Målet rect är för litet för varje post och autoPaginate är av | Förstora rect, passera autoPaginate: true, eller hantera AddTOCResult.remainder |
Innehåll som lagts till efter AutoTag() saknas i strukturträdet | AutoTag() taggar endast innehåll som fanns när den kördes | Tagga manuellt det senare innehållet med StructTreeRoot.Append() / StructElement.MarkContent() |
FAQ
Hur lägger jag till bokmärken i en PDF?
Bygg en array av OutlineItem-objekt (Title, Dest, valfri Children) och skicka den till Document.SetOutlines().
Kan en innehållsförteckning sträcka sig över flera sidor?
Ja — skicka autoPaginate: true i Page.AddTOC()s alternativ, eller kontrollera AddTOCResult.remainder och anropa AddTOC() igen på en ny sida för det som inte fick plats.
Hur gör jag en PDF tillgänglig (taggad)?
Anropa Document.AutoTag(), som härleder rubriker, stycken, tabeller och figurer från sidlayouten. För innehåll som läggs till i efterhand, eller där det heuristiska resultatet behöver korrigeras, använd StructTreeRoot.Append() och StructElement.MarkContent() direkt.
Vad är skillnaden mellan en sidnummerdestination och en namngiven destination?
En sidnummerdestination (PageDest) pekar på en explicit 1-baserad sida. En namngiven destination (NamedDest) pekar på ett namn som en läsare löser upp via dokumentets egna tabeller för namngivna destinationer — användbart när målsidan kan flyttas.
API Reference Sammanfattning
| Klass/Metod | Beskrivning |
|---|---|
Document.GetOutlines() / Document.SetOutlines() | Läs eller ersätt dokumentets innehållsförteckning (bokmärke) träd |
OutlineItem | En outline-nod: Title, Dest, valfri Children |
Page.AddTOC() | Rendera en innehållsförteckning i en sidrektangel |
TOCEntry / AddTOCResult | Data för en TOC-rad, och resultatet av att rita den |
Document.GetNamedDestinations() | Lista varje namngiven destination i dokumentet |
Document.AutoTag() | Härled och författ ett taggat strukturträd från sidlayouten |
Document.GetStructTree() / Document.CreateStructTree() | Läs eller skapa dokumentets StructTreeRoot |
StructTreeRoot.Append() / StructElement.Append() / StructElement.MarkContent() | Manuellt skapa eller utöka strukturträdet |