Structure
Structure
Deze pagina behandelt documentnavigatie en logische structuur: outlines (bladwijzers), inhoudsopgaven, benoemde bestemmingen en de getagde structuurboom die wordt gebruikt voor toegankelijkheid en reflow.
Outlines (Bladwijzers)
Document.GetOutlines() retourneert de huidige outline-boom als OutlineItem[] ([] wanneer er geen /Outlines is); Document.SetOutlines() vervangt deze — het doorgeven van [] verwijdert de outline volledig. Elke OutlineItem heeft een Title, een Dest (een paginanummer of een benoemde bestemming), een optionele Children voor nesting, en opmaak (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);Inhoudsopgave
Page.AddTOC() rendert een lijst van TOCEntry objecten — elk met een title en een doel-page nummer — in een rechthoek op een pagina, met afgebroken titels, stippenleiders en rechts uitgelijnde paginabelabels. Het retourneert een AddTOCResult die rapporteert hoeveel items getekend zijn en, wanneer de box te klein is, de remainder die niet past.
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 },
);Benoemde bestemmingen
Document.GetNamedDestinations() retourneert elke benoemde bestemming — door de /Names /Dests naamboom en het legacy /Dests woordenboek samen te voegen — als { name, dest } paren, waarbij dest een PageDest is ({ page, view }). Dit zijn dezelfde benoemde doelen die een OutlineItem.Dest of een linkannotatie kan refereren op naam in plaats van een expliciet paginanummer.
const destNames = new Set(doc.GetNamedDestinations().map((d) => d.name));
for (const { name, dest } of doc.GetNamedDestinations()) {
console.log(name, '-> page', dest.page);
}Getagde structuurboom
Document.AutoTag() inferreert en maakt een /StructTreeRoot op basis van paginalay-out — koppen door font-grootte clustering, alinea’s door tekstblokken, tabellen door linie-geometry, en per-afbeelding /Figure versus /Artifact beslissingen — en retourneert een AutoTagReport met tellingen voor elk type element. Document.GetStructTree() leest de resulterende StructTreeRoot terug, of null wanneer het document niet getagd is.
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)');Inhoud die wordt toegevoegd nadat AutoTag() al is uitgevoerd — bijvoorbeeld een pagina die later wordt ingevuld — valt niet onder die doorloop en wordt niet dubbel-getagd. StructTreeRoot.Append() en StructElement.MarkContent() zijn de handmatige auteur API naast de heuristische: Append() voegt een kind-element van een bepaald type toe, en MarkContent() markeert een paginaregio als behorend tot dat element.
Tips en best practices
- Voer
Document.AutoTag()één keer uit, nadat de paginainhoud definitief is — het retaggt geen later toegevoegde inhoud, dus tag handmatig alles dat later wordt toegevoegd metStructTreeRoot.Append()/StructElement.MarkContent(). - Geef
opts.titledoor aanAutoTag()— het stelt ook/ViewerPreferences /DisplayDocTitlein, wat PDF/UA vereist naast een documenttitel. - Een
OutlineItem.Destkan zich richten op een expliciete pagina of een benoemde bestemming ({ name: '...' }) — gebruik benoemde bestemmingen wanneer het paginanummer van het doel kan verschuiven naarmate de inhoud verandert. - Controleer
AddTOCResult.remainderwanneer automatische paginering is uitgeschakeld — een inhoudsopgavevak dat te klein is voor elke invoer stopt stilzwijgend met tekenen in plaats van het vak te overlopen.
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
Document.GetStructTree() geeft null terug | Het document is niet getagd | Roep eerst Document.AutoTag() of Document.CreateStructTree() aan |
| De link van een outline-item lost niet op | Zijn Dest benoemt een bestemming die niet bestaat in Document.GetNamedDestinations() | Bevestig dat de genoemde bestemming bestaat, of gebruik in plaats daarvan een expliciete pagina Dest |
Page.AddTOC() stopt vóór de laatste sectie | Doel rect is te klein voor elke invoer en autoPaginate staat uit | Vergroot de rect, geef autoPaginate: true door, of verwerk AddTOCResult.remainder |
Inhoud die na AutoTag() is toegevoegd, ontbreekt in de structuurboom | AutoTag() markeert alleen inhoud die aanwezig was toen het werd uitgevoerd | Hand-tag de latere inhoud met StructTreeRoot.Append() / StructElement.MarkContent() |
FAQ
Hoe voeg ik bladwijzers toe aan een PDF?
Bouw een array van OutlineItem-objecten (Title, Dest, optioneel Children) en geef deze door aan Document.SetOutlines().
Kan een inhoudsopgave zich over meerdere pagina’s uitstrekken?
Ja — geef autoPaginate: true door in de opties van Page.AddTOC(), of controleer AddTOCResult.remainder en roep AddTOC() opnieuw aan op een nieuwe pagina voor alles wat niet paste.
Hoe maak ik een PDF toegankelijk (gemarkeerd)?
Roep Document.AutoTag() aan, die koppen, alinea’s, tabellen en figuren afleidt van de paginalay-out. Voor later toegevoegde inhoud, of wanneer het heuristische resultaat moet worden gecorrigeerd, gebruik je StructTreeRoot.Append() en StructElement.MarkContent() rechtstreeks.
Wat is het verschil tussen een paginanummerbestemming en een benoemde bestemming?
Een paginanummerbestemming (PageDest) richt zich op een expliciete pagina met een 1-gebaseerde nummering. Een benoemde bestemming (NamedDest) richt zich op een naam die een viewer oplost via de eigen benoemde-bestemmings-tabellen van het document — handig wanneer de doelpagina kan verplaatsen.
API Reference Samenvatting
| Klasse/Methode | Beschrijving |
|---|---|
Document.GetOutlines() / Document.SetOutlines() | Lees of vervang de documentoutline (bladwijzer)boom |
OutlineItem | Één outline-knooppunt: Title, Dest, optioneel Children |
Page.AddTOC() | Render een inhoudsopgave in een paginarechthoek |
TOCEntry / AddTOCResult | Gegevens van een TOC-rij, en het resultaat van het tekenen ervan |
Document.GetNamedDestinations() | Lijst alle benoemde bestemmingen in het document |
Document.AutoTag() | Afleiden en opstellen van een getagde structuurboom op basis van de pagina-indeling |
Document.GetStructTree() / Document.CreateStructTree() | Lees of maak het StructTreeRoot van het document |
StructTreeRoot.Append() / StructElement.Append() / StructElement.MarkContent() | Handmatig opstellen of uitbreiden van de structuurboom |