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 a StructTreeRoot.Append() / StructElement.MarkContent() segítségével.
  • Adja át a opts.title-t a AutoTag()-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.Dest cé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.remainder beá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émaOkJavítás
Document.GetStructTree() visszaad nullA dokumentum nincs címkézveElőször hívd meg Document.AutoTag() vagy Document.CreateStructTree()
Egy vázlat elem hivatkozása nem oldható felA(z) Dest egy olyan célpontra hivatkozik, amely nem létezik a(z) Document.GetNamedDestinations()-banErő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őttA cél rect túl kicsi minden bejegyzéshez, és a autoPaginate ki van kapcsolvaN
A AutoTag() után hozzáadott tartalom hiányzik a struktúrafábólAutoTag() csak a futáskor jelen lévő tartalmat címkéziKé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ódszerLeírás
Document.GetOutlines() / Document.SetOutlines()Olvassa vagy cserélje le a dokumentum vázlat (könyvjelző) fát
OutlineItemEgy vázlatcsomópont: Title, Dest, opcionális Children
Page.AddTOC()Rendereld a tartalomjegyzéket egy oldal téglalapba
TOCEntry / AddTOCResultEgy 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

Lásd még:

 Magyar