TypeScript में PDF संरचना के साथ कैसे काम करें

TypeScript में PDF संरचना के साथ कैसे काम करें

यह गाइड दिखाता है कि Aspose.PDF FOSS for TypeScript के साथ PDF फ़ाइलों में दस्तावेज़ नेविगेशन और तार्किक संरचना कैसे बनायीँ: एक पृष्ठ पर क्लिक करने योग्य सामग्री तालिका, दस्तावेज़-स्तर बुकमार्क रूपरेखा, नामित गंतव्य, और पहुँच के लिए टैग्ड स्ट्रक्चर ट्री। इसके लिए Node.js 22 या उससे नया आवश्यक है।

चरण-दर-चरण गाइड

चरण 1: पैकेज स्थापित करें

git clone https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-TypeScript.git
cd Aspose.PDF-FOSS-for-TypeScript
npm install
npm run build

स्थापित होने की पुष्टि करें Document क्लास को नई TypeScript फ़ाइल में इम्पोर्ट करके — पैकेज स्थापित होने के बाद यह लाइन बिना त्रुटि के हल हो जानी चाहिए:

import { Document } from '@asposefoss/pdf';

चरण 2: आवश्यक क्लासेस इम्पोर्ट करें

फ़ाइल खोलने के लिए Document आयात करें और चरण4 में निर्मित बुकमार्क एंट्री के लिए OutlineItem करें:

import { Document, OutlineItem } from '@asposefoss/pdf';

चरण3: सामग्री-सूची जोड़ें

Page.AddTOC() { title, page } प्रविष्टियों की एक array लेता है, एक बाउंडिंग rect, और शैली विकल्प; यह डॉटेड लीडर और लक्ष्य पृष्ठों के लिए क्लिक करने योग्य लिंक बनाता है:

const page = doc.Pages[0];

page.AddTOC(
  [
    { title: '1.  Introduction', page: 2 },
    { title: '2.  Methodology', page: 5 },
    { title: '3.  Results', page: 9 },
  ],
  [72, 160, 400, 600],
  { font: 'Helvetica', fontSize: 13, color: [0.1, 0.1, 0.15], rowGap: 18 },
);

चरण4: बुकमार्क जोड़ें

Document.SetOutlines() दस्तावेज़ के बुकमार्क पैनल को OutlineItem ऑब्जेक्ट्स की एक array से बदल देता है। प्रत्येक आइटम में एक Dest (पृष्ठ गंतव्य), शैली (Color, Bold), और नेस्टेड Children हो सकता है जो एक कोलेप्सेबल ट्री बनाता है:

const items: OutlineItem[] = [
  { Title: 'Sales', Dest: { name: 'section.sales' }, Open: true, Color: [0.1, 0.4, 0.1] },
  { Title: 'Appendix', Dest: { name: 'section.appendix' } },
];

doc.SetOutlines(items);

चरण5: रूपरेखा और नामित गंतव्य पढ़ें

Document.GetOutlines() वर्तमान बुकमार्क ट्री लौटाता है। Document.GetNamedDestinations() दस्तावेज़ पर पंजीकृत प्रत्येक नामित गंतव्य लौटाता है — यह सत्यापित करने में उपयोगी है कि प्रत्येक रूपरेखा लक्ष्य और TOC लिंक वास्तव में वास्तविक पृष्ठ पर हल होते हैं:

const destNames = new Set(doc.GetNamedDestinations().map((d) => d.name));

const walk = (nodes: OutlineItem[]): void => {
  for (const item of nodes) {
    if (item.Dest && 'name' in item.Dest) {
      console.log(destNames.has(item.Dest.name), item.Title);
    }
    if (item.Children) walk(item.Children);
  }
};
walk(doc.GetOutlines());

चरण6: टैग्ड स्ट्रक्चर ट्री बनाएं

Document.GetStructTree() मौजूदा संरचना ट्री लौटाता है (या null यदि दस्तावेज़ को टैग नहीं किया गया है)। StructTreeRoot.Append(tag) 'H2' या 'P' जैसे चाइल्ड एलिमेंट को जोड़ता है और एक StructElement लौटाता है, और StructElement.MarkContent(page, quad) उस एलिमेंट को उस पेज कंटेंट से जोड़ता है जिसका वह वर्णन करता है:

function tagPage(doc: Document, page: Page, headingText: string): void {
  const root = doc.GetStructTree();
  if (!root) throw new Error('tagPage: the document is not tagged yet');

  for (const block of page.GetStructuredText()) {
    const text = block.text.trim();
    if (text.length === 0) continue;
    const el = root.Append(text.startsWith(headingText) ? 'H2' : 'P');
    el.MarkContent(page, block.quad);
  }
}

सामान्य समस्याएँ और समाधान

Document.GetStructTree() returns null. दस्तावेज़ अभी तक टैग नहीं किया गया है — कॉल Document.CreateStructTree() (या Document.AutoTag()) हाथ-लेखन तत्वों के साथ बनाने से पहले StructTreeRoot.Append() / StructElement.MarkContent().

एक रूपरेखा आइटम सही पृष्ठ पर नहीं जाता है। OutlineItem.Dest किसी ऐसा गंतव्य का नाम देना चाहिए जो वास्तव में मौजूद हो — क्रॉस-चैक करें item.Dest.name against Document.GetNamedDestinations() सहेजने से पहले, जैसा कि चरण5 में दिखाया गया है।

Page.AddTOC() एंट्रियाँ गलत पृष्ठ की ओर संकेत करती हैं। page प्रत्येक TOC एंट्री में लक्ष्य पृष्ठ का अपना पृष्ठ संख्या होती है — इसे … के विरुद्ध पुष्टि करें page.Number वास्तविक लक्ष्य पर Page, न कि अनुमानित एरे इंडेक्स।

बुकमार्क बाद में किसी बाद के बाद गायब हो जाते हैं Document.SetOutlines() कॉल। SetOutlines() पूरा बुकमार्क ट्री प्रतिस्थापित करता है — वर्तमान ट्री को पढ़ें Document.GetOutlines() पहले, एरे को संशोधित करें, फिर यदि बुकमार्क बदले नहीं जा रहे हैं बल्कि जोड़े जा रहे हैं तो पूरी एरे को वापस पास करें।

अक्सर पूछे जाने वाले प्रश्न

क्या बुकमार्क पहले से विस्तारित खोल सकता है?

हाँ — Open: true को OutlineItem पर सेट करें ताकि बुकमार्क पैनल में उस नोड के बच्चे डिफ़ॉल्ट रूप से दिखें।

बुकमार्क और नामित गंतव्य में क्या अंतर है?

एक बुकमार्क (OutlineItem) नेविगेशन पैनल में एक दृश्यमान प्रविष्टि है; एक नामित गंतव्य (Document.GetNamedDestinations() / SetNamedDestination()) एक आंतरिक, पुन: उपयोग योग्य पेज लक्ष्य है जिसे बुकमार्क, TOC प्रविष्टि, या लिंक एनोटेशन सभी नाम से इंगित कर सकते हैं।

क्या दस्तावेज़ को टैग करने से उसकी दिखावट पर असर पड़ता है?

नहीं — एक स्ट्रक्चर ट्री (StructTreeRoot, StructElement) पढ़ने के क्रम और अर्थ को वर्णित करने वाली समानांतर तर्कसंगत परत है; यह पृष्ठ की दृश्यमान सामग्री को नहीं बदलता।

क्या मैं बुकमार्क को नेस्ट कर सकता हूँ?

हाँ — Children को OutlineItem पर आगे के OutlineItem ऑब्जेक्ट्स की एक एरे सेट करें ताकि एक संकुचन योग्य, बहु-स्तरीय ट्री बनाया जा सके।

यह भी देखें

 हिन्दी