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 met StructTreeRoot.Append() / StructElement.MarkContent().
  • Geef opts.title door aan AutoTag() — het stelt ook /ViewerPreferences /DisplayDocTitle in, wat PDF/UA vereist naast een documenttitel.
  • Een OutlineItem.Dest kan 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.remainder wanneer 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

ProbleemOorzaakOplossing
Document.GetStructTree() geeft null terugHet document is niet getagdRoep eerst Document.AutoTag() of Document.CreateStructTree() aan
De link van een outline-item lost niet opZijn 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 sectieDoel rect is te klein voor elke invoer en autoPaginate staat uitVergroot de rect, geef autoPaginate: true door, of verwerk AddTOCResult.remainder
Inhoud die na AutoTag() is toegevoegd, ontbreekt in de structuurboomAutoTag() markeert alleen inhoud die aanwezig was toen het werd uitgevoerdHand-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/MethodeBeschrijving
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 / AddTOCResultGegevens 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

Zie ook

 Nederlands