Structure
Structure
यह पृष्ठ दस्तावेज़ नेविगेशन और तार्किक संरचना को कवर करता है: रूपरेखाएँ (बुकमार्क), अनुक्रमणिकाएँ, नामित गंतव्य, और पहुंच और रीफ़्लो के लिए उपयोग किया गया टैग किया हुआ संरचना वृक्ष।
रूपरेखाएँ (बुकमार्क)
Document.GetOutlines() वर्तमान रूपरेखा वृक्ष को OutlineItem[] के रूप में लौटाता है ([] जब /Outlines नहीं होता); Document.SetOutlines() इसे बदलता है — [] पास करने से रूपरेखा पूरी तरह हट जाती है। प्रत्येक OutlineItem में एक Title, एक Dest (पृष्ठ संख्या या नामित गंतव्य), नेस्टिंग के लिए वैकल्पिक Children, और शैलीकरण (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);सामग्री तालिका
Page.AddTOC() TOCEntry वस्तुओं की एक सूची को — प्रत्येक में एक title और लक्ष्य page संख्या — पृष्ठ पर एक आयत में रेंडर करता है, जिसमें लिपटे शीर्षक, डॉट लीडर्स, और दाएँ संरेखित पृष्ठ लेबल होते हैं। यह एक AddTOCResult लौटाता है जो बताता है कि कितनी प्रविष्टियाँ खींची गईं और, जब बॉक्स बहुत छोटा हो, तो वह remainder जो फिट नहीं हुई।
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 },
);नामित गंतव्य
Document.GetNamedDestinations() हर नामित गंतव्य को लौटाता है — /Names /Dests नाम वृक्ष और पुराने /Dests शब्दकोश को मिलाकर — { name, dest } युग्मों के रूप में, जहाँ dest एक PageDest ({ page, view }) है। ये वही नामित लक्ष्य हैं जिन्हें एक OutlineItem.Dest या लिंक एनोटेशन नाम द्वारा संदर्भित कर सकता है, न कि स्पष्ट पृष्ठ संख्या से।
const destNames = new Set(doc.GetNamedDestinations().map((d) => d.name));
for (const { name, dest } of doc.GetNamedDestinations()) {
console.log(name, '-> page', dest.page);
}टैग्ड संरचना पेड़
Document.AutoTag() पृष्ठ लेआउट से एक /StructTreeRoot का अनुमान लगाता और बनाता है — फ़ॉन्ट-साइज़ क्लस्टरिंग से शीर्षक, टेक्स्ट ब्लॉक्स से पैराग्राफ, रूलिंग ज्योमेट्री से तालिकाएँ, और प्रति-इमेज /Figure बनाम /Artifact निर्णय — और प्रत्येक तत्व प्रकार की गिनती के साथ एक AutoTagReport लौटाता है। Document.GetStructTree() परिणामी StructTreeRoot को पढ़ता है, या जब दस्तावेज़ अनटैग्ड हो तो null।
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)');जब AutoTag() पहले ही चल चुका हो, उसके बाद जो सामग्री जोड़ी जाती है — उदाहरण के लिए बाद में भरा गया पृष्ठ — उस पास द्वारा कवर नहीं होती और दुगुनी टैग नहीं होगी। StructTreeRoot.Append() और StructElement.MarkContent() हीयुरिस्टिक वाले के साथ मैन्युअल लेखन API हैं: Append() दिए गए प्रकार के एक चाइल्ड एलिमेंट को जोड़ता है, और MarkContent() पृष्ठ के उस क्षेत्र को उस एलिमेंट से संबंधित के रूप में चिन्हित करता है।
टिप्स और सर्वोत्तम प्रथाएँ
Document.AutoTag()को एक बार चलाएँ, जब पृष्ठ सामग्री अंतिम हो — यह बाद में जोड़ी गई सामग्री को फिर से टैग नहीं करता, इसलिए बाद में जोड़ी गई किसी भी चीज़ कोStructTreeRoot.Append()/StructElement.MarkContent()से हाथ से टैग करें।opts.titleकोAutoTag()को पास करें — यह/ViewerPreferences /DisplayDocTitleभी सेट करता है, जिसकी PDF/UA को दस्तावेज़ शीर्षक के साथ आवश्यक है।- एक
OutlineItem.Destया तो स्पष्ट पृष्ठ या नामित गंतव्य ({ name: '...' }) को लक्ष्य बना सकता है — जब सामग्री बदलने पर लक्ष्य पृष्ठ संख्या बदल सकती है, तो नामित गंतव्य उपयोग करें। - जब ऑटो-पेजिनेशन बंद हो तो
AddTOCResult.remainderजाँचें — एक सामग्री तालिका बॉक्स जो प्रत्येक प्रविष्टि के लिए बहुत छोटा है, वह बॉक्स को ओवरफ़्लो करने के बजाय चुपचाप ड्रॉइंग बंद कर देता है।
सामान्य समस्याएँ
| समस्या | कारण | समाधान |
|---|---|---|
Document.GetStructTree() वापस देता है null | दस्तावेज़ को टैग नहीं किया गया है | पहले Document.AutoTag() या Document.CreateStructTree() को कॉल करें |
| एक रूपरेखा आइटम का लिंक हल नहीं होता है | उसका Dest एक ऐसा गंतव्य नामित करता है जो Document.GetNamedDestinations() में मौजूद नहीं है | पुष्टि करें कि निर्दिष्ट गंतव्य मौजूद है, या इसके बजाय एक स्पष्ट पृष्ठ Dest का उपयोग करें |
Page.AddTOC() अंतिम अनुभाग से पहले रुकता है | लक्ष्य rect हर प्रविष्टि के लिए बहुत छोटा है और autoPaginate बंद है | rect को बड़ा करें, autoPaginate: true को पास करें, या AddTOCResult.remainder को संभालें |
AutoTag() के बाद जो सामग्री जोड़ी गई है, वह संरचना ट्री में गायब है | AutoTag() केवल टैग करता है वह सामग्री जो यह चलने पर मौजूद थी | बाद की सामग्री को StructTreeRoot.Append() / StructElement.MarkContent() से हाथ से टैग करें |
FAQ
PDF में बुकमार्क कैसे जोड़ें?
एक OutlineItem वस्तुओं (Title, Dest, वैकल्पिक Children) की एरे बनाएं और इसे Document.SetOutlines() को पास करें।
क्या सामग्री तालिका कई पृष्ठों पर फैली हो सकती है?
हाँ — Page.AddTOC()’s विकल्पों में autoPaginate: true पास करें, या AddTOCResult.remainder जाँचें और जो फिट नहीं हुआ उसके लिए नई पृष्ठ पर AddTOC() को फिर से कॉल करें।
PDF को अभिगम्य (टैग्ड) कैसे बनाएं?
कॉल Document.AutoTag(), जो पेज लेआउट से शीर्षक, पैराग्राफ, तालिकाएँ और चित्रों का अनुमान लगाता है। बाद में जोड़ी गई सामग्री के लिए, या जहाँ हीयुरिस्टिक परिणाम में सुधार की आवश्यकता हो, सीधे StructTreeRoot.Append() और StructElement.MarkContent() का उपयोग करें।
पेज-नंबर डेस्टिनेशन और नेम्ड डेस्टिनेशन में क्या अंतर है?
एक पेज-नंबर डेस्टिनेशन (PageDest) स्पष्ट 1-आधारित पेज को लक्षित करता है। एक नेम्ड डेस्टिनेशन (NamedDest) ऐसा नाम लक्षित करता है जिसे व्यूअर दस्तावेज़ की अपनी नेम्ड-डेस्टिनेशन तालिकाओं के माध्यम से हल करता है — यह तब उपयोगी होता है जब लक्ष्य पेज स्थानांतरित हो सकता है।
API Reference सारांश
| Class/Method | विवरण |
|---|---|
Document.GetOutlines() / Document.SetOutlines() | दस्तावेज़ रूपरेखा (बुकमार्क) ट्री पढ़ें या बदलें |
OutlineItem | एक रूपरेखा नोड: Title, Dest, वैकल्पिक Children |
Page.AddTOC() | एक पृष्ठ आयत में सामग्री-सूची को रेंडर करें |
TOCEntry / AddTOCResult | एक TOC पंक्ति का डेटा, और इसे ड्रॉ करने का परिणाम |
Document.GetNamedDestinations() | दस्तावेज़ में प्रत्येक नामित गंतव्य की सूची बनाएं |
Document.AutoTag() | पृष्ठ लेआउट से टैग्ड संरचना ट्री का अनुमान लगाएँ और लिखें |
Document.GetStructTree() / Document.CreateStructTree() | दस्तावेज़ का StructTreeRoot पढ़ें या बनाएं |
StructTreeRoot.Append() / StructElement.Append() / StructElement.MarkContent() | हाथ से संरचना ट्री लिखें या विस्तारित करें |