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.titledoAutoTag()— také nastaví/ViewerPreferences /DisplayDocTitle, což PDF/UA vyžaduje spolu s názvem dokumentu. - Objekt
OutlineItem.Destmůž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ém | Příčina | Oprava |
|---|---|---|
Document.GetStructTree() vrací null | Dokument nebyl označen | Nejprve zavolejte Document.AutoTag() nebo Document.CreateStructTree() |
| Odkaz položky osnovy se nevyřeší | Jeho Dest pojmenovává cíl, který v Document.GetNamedDestinations() neexistuje | Potvrď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 mimo | Zvětšete rect, projděte autoPaginate: true nebo zpracujte AddTOCResult.remainder |
Obsah přidaný po AutoTag() chybí ve stromu struktury | AutoTag() označuje pouze obsah, který byl přítomen, když běžel | Ruč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/Metoda | Popis: |
|---|---|
Document.GetOutlines() / Document.SetOutlines() | Přečíst nebo nahradit strom osnovy dokumentu (záložky) |
OutlineItem | Jeden uzel osnovy: Title, Dest, volitelný Children |
Page.AddTOC() | Vykreslete obsah do obdélníku stránky |
TOCEntry / AddTOCResult | Data řá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 |