Structure

Structure

Tato stránka pokrývá navigaci v dokumentu a logickou strukturu: osnovy (záložky), obsah, pojmenované cíle a označený strom struktury používaný pro přístupnost a přizpůsobení textu.


Osnovy (záložky)

Document.GetOutlines() vrací aktuální strom osnov jako OutlineItem[] ([], pokud neexistuje /Outlines); Document.SetOutlines() jej nahrazuje — předání [] odstraní osnovu úplně. Každý OutlineItem má Title, Dest (číslo stránky nebo pojmenovaný cíl), volitelný Children pro vnoření a stylování (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);

Obsah

Page.AddTOC() vykreslí seznam objektů TOCEntry — každý s title a cílovým číslem page — do obdélníku na stránce, s zalomenými nadpisy, tečkovanými vodítky a pravě zarovnanými číslami stránek. Vrací AddTOCResult, který uvádí, kolik položek bylo vykresleno, a pokud je rámeček příliš malý, remainder, které se nevešly.

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 },
);

Pojmenované cíle

Document.GetNamedDestinations() vrací všechny pojmenované destinace — sloučením stromu názvů /Names /Dests a staršího slovníku /Dests — jako páry { name, dest }, kde dest je PageDest ({ page, view }). Jedná se o stejné pojmenované cíle, na které může odkazovat OutlineItem.Dest nebo anotace odkazu podle jména místo explicitního čísla stránky.

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

Strom struktury s tagy

Document.AutoTag() odvozuje a vytváří /StructTreeRoot z rozvržení stránky — nadpisy podle shlukování velikosti písma, odstavce podle textových bloků, tabulky podle geometrie pravítek a rozhodnutí /Figure vs. /Artifact pro každý obrázek — a vrací AutoTagReport s počty pro každý typ prvku. Document.GetStructTree() načítá vzniklý StructTreeRoot, nebo null, když je dokument neoznačený.

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)');

Obsah přidaný po tom, co AutoTag() již proběhl — například stránka doplněná později — není tím průchodem pokryt a nebude dvojitě označen. StructTreeRoot.Append() a StructElement.MarkContent() jsou ruční autorování API vedle heuristického: Append() přidá podřízený prvek daného typu a MarkContent() označí oblast stránky jako patřící k tomu prvku.


Tipy a osvědčené postupy

  • Spusťte Document.AutoTag() jednou, po tom, co je obsah stránky finální — neoznačuje znovu obsah přidaný později, takže ručně označte vše, co bylo přidáno později, pomocí StructTreeRoot.Append() / StructElement.MarkContent().
  • Předejte opts.title do AutoTag() — také nastaví /ViewerPreferences /DisplayDocTitle, což PDF/UA vyžaduje spolu s názvem dokumentu.
  • Objekt OutlineItem.Dest může cílit buď na konkrétní stránku, nebo na pojmenovaný cíl ({ name: '...' }) — používejte pojmenované cíle, když se číslo cílové stránky může při změně obsahu posunout.
  • Zkontrolujte AddTOCResult.remainder, když je automatické stránkování vypnuto — pole obsahu, které je příliš malé pro každou položku, tiše přestane kreslit místo aby přesahovalo pole.

Běžné problémy

ProblémPříčinaOprava
Document.GetStructTree() vrací nullDokument nebyl označenNejprve zavolejte Document.AutoTag() nebo Document.CreateStructTree()
Odkaz položky osnovy se nevyřešíJeho Dest pojmenovává cíl, který v Document.GetNamedDestinations() neexistujePotvrďte, že pojmenovaný cíl existuje, nebo místo toho použijte explicitní stránku Dest
Page.AddTOC() končí před poslední sekcíCíl rect je pro každý záznam příliš malý a autoPaginate je mimoZvětšete rect, projděte autoPaginate: true nebo zpracujte AddTOCResult.remainder
Obsah přidaný po AutoTag() chybí ve stromu strukturyAutoTag() označuje pouze obsah, který byl přítomen, když běželRučně označte pozdější obsah pomocí StructTreeRoot.Append() / StructElement.MarkContent()

FAQ

Jak přidám záložky do PDF?

Vytvořte pole objektů OutlineItem (Title, Dest, volitelně Children) a předávejte jej do Document.SetOutlines().

Může obsah zasahovat do více stránek?

Ano — předávejte autoPaginate: true v možnostech Page.AddTOC(), nebo zkontrolujte AddTOCResult.remainder a znovu zavolejte AddTOC() na nové stránce pro to, co se nevešlo.

Jak udělat PDF přístupné (označené)?

Zavolejte Document.AutoTag(), který odvozuje nadpisy, odstavce, tabulky a obrázky z rozvržení stránky. Pro obsah přidaný později nebo tam, kde je třeba opravit výsledek heuristiky, použijte StructTreeRoot.Append() a StructElement.MarkContent() přímo.

Jaký je rozdíl mezi cílem s číslem stránky a pojmenovaným cílem?

Cíl s číslem stránky (PageDest) odkazuje na konkrétní stránku číslovanou od 1. Pojmenovaný cíl (NamedDest) odkazuje na název, který prohlížeč rozřeší pomocí vlastních tabulek pojmenovaných cílů v dokumentu—užitečné, když se cílová stránka může přesunout.


API Reference Shrnutí

Třída/MetodaPopis:
Document.GetOutlines() / Document.SetOutlines()Přečíst nebo nahradit strom osnovy dokumentu (záložky)
OutlineItemJeden uzel osnovy: Title, Dest, volitelný Children
Page.AddTOC()Vykreslete obsah do obdélníku stránky
TOCEntry / AddTOCResultData řádku TOC a výsledek jeho vykreslení
Document.GetNamedDestinations()Vylistujte všechny pojmenované cíle v dokumentu
Document.AutoTag()Odvoďte a vytvořte značkovaný strom struktury z rozvržení stránky
Document.GetStructTree() / Document.CreateStructTree()Přečtěte nebo vytvořte StructTreeRoot dokumentu
StructTreeRoot.Append() / StructElement.Append() / StructElement.MarkContent()Ručně vytvořte nebo rozšiřte strom struktury

Viz také:

 Čeština