Structure
Structure
Ez az oldal a dokumentumnavigációt és a logikai struktúrát tárgyalja: vázlatok (könyvjelzők), tartalomjegyzékek, elnevezett célpontok, valamint a hozzáférhetőséghez és az újraformázáshoz használt címkézett struktúrafát.
Vázlatok (Könyvjelzők)
Document.GetOutlines() visszaadja a jelenlegi vázlatfát mint OutlineItem[] ([], ha nincs /Outlines); Document.SetOutlines() felülírja – a [] átadása teljesen eltávolítja a vázlatot. Minden OutlineItem rendelkezik egy Title-val, egy Dest-val (oldalszám vagy elnevezett célpont), opcionális Children-val a beágyazáshoz, és stílussal (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);Tartalomjegyzék
Page.AddTOC() egy TOCEntry objektumok listáját rendereli – mindegyik egy title és egy cél page számmal – egy téglalapba az oldalon, sortöréssel a címekben, pontvezetőkkel és jobbra igazított oldalszámokkal. Egy AddTOCResult értéket ad vissza, amely jelzi, hány bejegyzés lett lerajzolva, és ha a keret túl kicsi, a nem elférő remainder értéket.
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 },
);Elnevezett Célpontok
Document.GetNamedDestinations() visszaad minden elnevezett célpontot — egyesítve a /Names /Dests névfát és a régi /Dests szótárat — { name, dest } párokként, ahol dest egy PageDest ({ page, view }). Ezek ugyanazok az elnevezett célpontok, amelyeket egy OutlineItem.Dest vagy egy link annotáció hivatkozhat név szerint egy explicite lapszám helyett.
const destNames = new Set(doc.GetNamedDestinations().map((d) => d.name));
for (const { name, dest } of doc.GetNamedDestinations()) {
console.log(name, '-> page', dest.page);
}Címkézett Szerkezeti Fa
Document.AutoTag() következtet és szerkeszt egy /StructTreeRoot-t az oldalelrendezésből — címsorok betűméret-csoportosítás alapján, bekezdések szövegdarabok szerint, táblázatok vonalzási geometria szerint, és képenkénti /Figure vs. /Artifact döntések — és visszaad egy AutoTagReport-t, amely minden elem típusra számol. Document.GetStructTree() visszaolvassa a kapott StructTreeRoot-t, vagy null-t, ha a dokumentum nincs címkézve.
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)');A AutoTag() futása után hozzáadott tartalom — például egy később kitöltött oldal — nem szerepel abban a lépésben, és nem lesz dupla címkézve. StructTreeRoot.Append() és StructElement.MarkContent() a manuális szerzői API a heurisztikus mellett: Append() egy adott típusú gyermekelemet ad hozzá, és MarkContent() egy oldalrégiót jelöl meg, amely az adott elemhez tartozik.
Tippek és legjobb gyakorlatok
- Futtassa a
Document.AutoTag()egyszer, miután az oldal tartalma végleges — nem címkézi újra a később hozzáadott tartalmat, ezért kézzel címkézze a később hozzáadottakat aStructTreeRoot.Append()/StructElement.MarkContent()segítségével. - Adja át a
opts.title-t aAutoTag()-nek — ez továbbá beállítja a/ViewerPreferences /DisplayDocTitle-t, amelyet a PDF/UA a dokumentum címmel együtt megkövetel. - Egy
OutlineItem.Destcélozhat akár egy explicite oldalt, akár egy elnevezett célpontot ({ name: '...' }) — használjon elnevezett célpontokat, ha a céloldal száma a tartalom változásával eltolódhat. - Ellenőrizze a(z)
AddTOCResult.remainderbeállítást, amikor az automatikus oldaltördelés ki van kapcsolva — egy túl kicsi tartalomjegyzék mező minden bejegyzésnél csendben leáll a rajzolást ahelyett, hogy túlcsordulna a mezőből.
Általános problémák
| Probléma | Ok | Javítás |
|---|---|---|
Document.GetStructTree() visszaad null | A dokumentum nincs címkézve | Először hívd meg Document.AutoTag() vagy Document.CreateStructTree() |
| Egy vázlat elem hivatkozása nem oldható fel | A(z) Dest egy olyan célpontra hivatkozik, amely nem létezik a(z) Document.GetNamedDestinations()-ban | Erősítse meg, hogy a megnevezett cél létezik, vagy használjon helyette egy explicit Dest oldalt |
Page.AddTOC() megáll az utolsó szakasz előtt | A cél rect túl kicsi minden bejegyzéshez, és a autoPaginate ki van kapcsolva | N |
A AutoTag() után hozzáadott tartalom hiányzik a struktúrafából | AutoTag() csak a futáskor jelen lévő tartalmat címkézi | Kézzel címkézze a későbbi tartalmat a StructTreeRoot.Append() / StructElement.MarkContent() segítségével |
FAQ
Hogyan adhatok könyvjelzőket egy PDF-hez?
Hozzon létre egy tömböt a(z) OutlineItem objektumokból (Title, Dest, opcionális Children), és adja át a(z) Document.SetOutlines() számára.
A tartalomjegyzék terjedhet több oldalra?
Igen — adja át a(z) autoPaginate: true értéket a(z) Page.AddTOC() beállításaiban, vagy ellenőrizze a(z) AddTOCResult.remainder értéket, és hívja újra a(z) AddTOC() függvényt egy új oldalon a nem elférő részekhez.
Hogyan tehetem a PDF-et hozzáférhetővé (címkézetté)?
Hívja meg a Document.AutoTag(), amely a lapelrendezés alapján következtet a címsorokra, bekezdésekre, táblázatokra és ábrákra. Utólag hozzáadott tartalomhoz, vagy ha a heurisztikus eredményt javítani kell, használja közvetlenül a StructTreeRoot.Append() és StructElement.MarkContent() elemeket.
Mi a különbség a page-number destination és a named destination között?
A page-number destination (PageDest) egy explicit 1-től számozott oldalt céloz meg. A named destination (NamedDest) egy nevet céloz meg, amelyet a megjelenítő a dokumentum saját named-destination táblái alapján old fel — hasznos, ha a célnak szánt oldal elmozdulhat.
API Reference összegzés
| Osztály/Módszer | Leírás |
|---|---|
Document.GetOutlines() / Document.SetOutlines() | Olvassa vagy cserélje le a dokumentum vázlat (könyvjelző) fát |
OutlineItem | Egy vázlatcsomópont: Title, Dest, opcionális Children |
Page.AddTOC() | Rendereld a tartalomjegyzéket egy oldal téglalapba |
TOCEntry / AddTOCResult | Egy TOC sor adatai, és a rajzolás eredménye |
Document.GetNamedDestinations() | Sorolja fel a dokumentumban szereplő összes elnevezett célpontot |
Document.AutoTag() | Következtessen és szerkesszen egy címkézett struktúrafát az oldalelrendezés alapján |
Document.GetStructTree() / Document.CreateStructTree() | Olvassa vagy hozza létre a dokumentum StructTreeRoot-ját |
StructTreeRoot.Append() / StructElement.Append() / StructElement.MarkContent() | Kézzel szerkessze vagy bővítse a struktúrafát |