Structure

Structure

Halaman ini mencakup navigasi dokumen dan struktur logis: outline (bookmark), daftar isi, named destinations, dan pohon struktur ber-tag yang digunakan untuk aksesibilitas dan reflow.


Outline (Bookmarks)

Document.GetOutlines() mengembalikan pohon outline saat ini sebagai OutlineItem[] ([] ketika tidak ada /Outlines); Document.SetOutlines() menggantikannya — mengirimkan [] menghapus outline sepenuhnya. Setiap OutlineItem memiliki Title, Dest (nomor halaman atau named destination), Children opsional untuk nesting, dan styling (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);

Daftar Isi

Page.AddTOC() merender daftar objek TOCEntry — masing-masing dengan title dan nomor page target — ke dalam sebuah persegi panjang pada halaman, dengan judul yang dibungkus, pemimpin titik, dan label halaman rata kanan. Ia mengembalikan AddTOCResult yang melaporkan berapa banyak entri yang digambar dan, ketika kotak terlalu kecil, remainder yang tidak muat.

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

Destinasi Bernama

Document.GetNamedDestinations() mengembalikan setiap destinasi bernama — menggabungkan pohon nama /Names /Dests dan kamus /Dests warisan — sebagai pasangan { name, dest }, di mana dest adalah PageDest ({ page, view }). Ini adalah target bernama yang sama yang dapat dirujuk oleh OutlineItem.Dest atau anotasi tautan dengan nama alih-alih nomor halaman eksplisit.

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

Pohon Struktur Bertag

Document.AutoTag() menyimpulkan dan menulis sebuah /StructTreeRoot dari tata letak halaman — judul berdasarkan pengelompokan ukuran font, paragraf berdasarkan blok teks, tabel berdasarkan geometri garis, dan keputusan /Figure vs. /Artifact per gambar — dan mengembalikan sebuah AutoTagReport dengan hitungan untuk setiap jenis elemen. Document.GetStructTree() membaca kembali StructTreeRoot yang dihasilkan, atau null ketika dokumen tidak bertag.

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

Konten yang ditambahkan setelah AutoTag() sudah dijalankan — misalnya sebuah halaman yang diisi kemudian — tidak tercakup oleh proses itu dan tidak akan ditandai ganda. StructTreeRoot.Append() dan StructElement.MarkContent() adalah API penulisan manual bersamaan dengan yang heuristik: Append() menambahkan elemen anak dengan tipe tertentu, dan MarkContent() menandai wilayah halaman sebagai bagian dari elemen tersebut.


Tips dan Praktik Terbaik

  • Jalankan Document.AutoTag() sekali, setelah konten halaman final — ia tidak menandai ulang konten yang ditambahkan kemudian, jadi beri tag manual apa pun yang ditambahkan nanti dengan StructTreeRoot.Append() / StructElement.MarkContent().
  • Berikan opts.title ke AutoTag() — itu juga mengatur /ViewerPreferences /DisplayDocTitle, yang PDF/UA butuhkan bersama judul dokumen.
  • OutlineItem.Dest dapat menargetkan baik halaman eksplisit atau destinasi bernama ({ name: '...' }) — gunakan destinasi bernama ketika nomor halaman target dapat berubah seiring perubahan konten.
  • Periksa AddTOCResult.remainder ketika auto-pagination dimatikan — kotak daftar isi yang terlalu kecil untuk setiap entri berhenti menggambar secara diam-diam alih-alih meluap ke kotak.

Masalah Umum

MasalahPenyebabPerbaikan
Document.GetStructTree() mengembalikan nullDokumen belum ditandaiPanggil Document.AutoTag() atau Document.CreateStructTree() terlebih dahulu
Tautan item outline tidak dapat diselesaikanDest miliknya menamai tujuan yang tidak ada di Document.GetNamedDestinations()Pastikan tujuan yang dinamai ada, atau gunakan halaman Dest secara eksplisit sebagai gantinya
Page.AddTOC() berhenti sebelum bagian terakhirTarget rect terlalu kecil untuk setiap entri dan autoPaginate tidak aktifPerbesar rect, lewati autoPaginate: true, atau tangani AddTOCResult.remainder
Konten yang ditambahkan setelah AutoTag() tidak ada dalam pohon strukturAutoTag() hanya menandai konten yang ada saat dijalankanTandai secara manual konten berikutnya dengan StructTreeRoot.Append() / StructElement.MarkContent()

FAQ

Bagaimana cara menambahkan bookmark ke PDF?

Bangun sebuah array dari objek OutlineItem (Title, Dest, Children opsional) dan berikan ke Document.SetOutlines().

Apakah daftar isi dapat meluas ke beberapa halaman?

Ya — berikan autoPaginate: true dalam opsi Page.AddTOC(), atau periksa AddTOCResult.remainder dan panggil AddTOC() lagi pada halaman baru untuk apa pun yang tidak muat.

Bagaimana cara membuat PDF yang dapat diakses (ditandai)?

Panggil Document.AutoTag(), yang menafsirkan heading, paragraf, tabel, dan gambar dari tata letak halaman. Untuk konten yang ditambahkan kemudian, atau bila hasil heuristik perlu diperbaiki, gunakan StructTreeRoot.Append() dan StructElement.MarkContent() secara langsung.

Apa perbedaan antara tujuan nomor halaman dan tujuan bernama?

Tujuan nomor halaman (PageDest) menargetkan halaman eksplisit dengan penomoran mulai dari 1. Tujuan bernama (NamedDest) menargetkan sebuah nama yang dipecahkan oleh penampil melalui tabel tujuan-bernama dokumen sendiri — berguna ketika halaman target dapat berpindah.


API Reference Ringkasan

Kelas/MetodeDeskripsi
Document.GetOutlines() / Document.SetOutlines()Baca atau ganti pohon outline (bookmark) dokumen
OutlineItemSatu node outline: Title, Dest, opsional Children
Page.AddTOC()Render daftar isi ke dalam persegi halaman
TOCEntry / AddTOCResultData baris TOC, dan hasil menggambarnya
Document.GetNamedDestinations()Daftar semua tujuan bernama dalam dokumen
Document.AutoTag()Menyimpulkan dan menulis pohon struktur ber-tag dari tata letak halaman
Document.GetStructTree() / Document.CreateStructTree()Baca atau buat StructTreeRoot dokumen
StructTreeRoot.Append() / StructElement.Append() / StructElement.MarkContent()Menulis secara manual atau memperluas pohon struktur

Lihat Juga

 Bahasa Indonesia