TypeScript में एनोटेशन के साथ कैसे काम करें

TypeScript में एनोटेशन के साथ कैसे काम करें

यह गाइड दिखाता है कि Aspose.PDF FOSS for TypeScript के साथ PDF एनोटेशन को कैसे जोड़ें, फ्लैटन करें और खोजें। Page क्लास प्रत्येक एनोटेशन उपप्रकार के लिए एक Add* मेथड प्रदान करती है — मार्कअप (हाइलाइट, अंडरलाइन, स्ट्राइकआउट, स्क्विगली), आकार (स्क्वायर, सर्कल, लाइन, पॉलीगॉन, इंक), टेक्स्ट (स्टिकी नोट, फ्री टेक्स्ट), और लिंक — प्रत्येक एक टाइप्ड Annotation हैंडल लौटाता है जिसे बाद में पुनः पढ़ा या फ्लैटन किया जा सकता है। इसे 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 आयात करें और नीचे दिए गए चरणों में उपयोग किए गए एनोटेशन प्रकार हस्ताक्षरों के लिए Page करें:

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

चरण 3: मार्कअप एनोटेशन जोड़ें

Page.AddHighlight(), Page.AddUnderline(), Page.AddSquiggly(), और Page.AddStrikeOut() सभी एक quads ऐरे लेते हैं — प्रत्येक हाइलाइट किए गए टेक्स्ट क्षेत्र के लिए एक 8-नंबर क्वाड (x1,y1,x2,y2,x3,y3,x4,y4) — साथ ही एक color और वैकल्पिक contents. लाइब्रेरी सभी चार उपप्रकारों के लिए स्वचालित रूप से अपीयरेंस स्ट्रीम (/AP) उत्पन्न करती है:

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

const doc = Document.OpenFile('input.pdf');
const page = doc.Pages[0];

page.AddHighlight({
  quads: [72, 700, 300, 700, 72, 685, 300, 685],
  color: [1, 1, 0],
  contents: 'Yellow highlight',
});
page.AddUnderline({
  quads: [72, 660, 300, 660, 72, 645, 300, 645],
  color: [0, 0, 1],
});
page.AddStrikeOut({
  quads: [72, 620, 300, 620, 72, 605, 300, 605],
  color: [1, 0, 0],
});

doc.WriteTo('annotated.pdf');

चरण 4: आकार और इंक एनोटेशन जोड़ें

Page.AddSquare() और Page.AddCircle() एक बाउंडिंग rect लेते हैं साथ में color (स्ट्रोक) और वैकल्पिक fill. Page.AddLine() एक 4-नंबर line (x1,y1,x2,y2) और वैकल्पिक तीर समाप्तियों को लेता है. Page.AddInk() paths लेता है — फ्लैट पॉइंट-पेयर ऐरे की एक ऐरे, प्रत्येक पेन स्ट्रोक के लिए एक:

page.AddSquare({ rect: [100, 500, 220, 560], color: [0.8, 0, 0], fill: [1, 1, 0.5], width: 2 });
page.AddCircle({ rect: [250, 500, 370, 560], color: [0, 0.5, 0], width: 2 });
page.AddLine({
  line: [100, 470, 370, 470],
  color: [0, 0, 0.7],
  width: 2,
  startEnding: 'OpenArrow',
  endEnding: 'ClosedArrow',
});
page.AddInk({
  paths: [[100, 400, 130, 430, 160, 390, 190, 420]],
  color: [0.6, 0, 0.6],
  width: 2,
});

चरण 5: एक स्टिकी नोट और फ्री टेक्स्ट जोड़ें

Page.AddTextNote() एक क्लिक करने योग्य आइकन रखता है जो एक टिप्पणी पॉपअप खोलता है। Page.AddFreeText() अपने rect के भीतर पृष्ठ पर सीधे टेक्स्ट ड्रॉ करता है:

page.AddTextNote({
  rect: [400, 700, 420, 720],
  icon: 'Note',
  author: 'Reviewer',
  contents: 'This is a sticky-note annotation.',
});

page.AddFreeText({
  rect: [400, 600, 550, 660],
  contents: 'FreeText sample',
  fontSize: 10,
  align: 'center',
  fill: [1, 1, 0.8],
  width: 1,
});

चरण 6: एक एनोटेशन को स्थैतिक सामग्री में फ्लैट करें

एक Add* कॉल द्वारा वापस किया गया प्रत्येक एनोटेशन हैंडल में एक Flatten() मेथड होता है जो एनोटेशन की उपस्थिति को पेज की कंटेंट स्ट्रीम में बेक कर देता है और इसे /Annots से हटा देता है। फ्लैटनिंग के बाद व्यूअर में क्लिक या एडिट करने के लिए कुछ भी नहीं बचता:

const note = page.AddFreeText({
  rect: [210, 535, 470, 590],
  contents: 'Sticky note — flattened into the page.',
  fontSize: 11,
  align: 'left',
});

note.Flatten(); // -> boolean; bakes the annotation, unwires itself from /Annots

चरण 7: एनोटेशन टेक्स्ट खोजें

Page.SearchAnnotationText() and Page.SearchAnnotations() दोनों दिशाओं में असंबद्ध हैं: SearchAnnotationText() शाब्दिक एनोटेशन मेटाडेटा से मेल खाता है (/Contents, /T, /Subj), जबकि SearchAnnotations() से मेल खाता है rendered मार्कअप एनोटेशन के पाठ जैसे FreeText:

const metadataHits = page.SearchAnnotationText('confidential');
for (const hit of metadataHits) {
  console.log(hit.key, hit.value); // e.g. 'Contents', 'confidential'
}

const renderedHits = page.SearchAnnotations('confidential');
console.log(renderedHits.length);

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

Page.AddHighlight() (या कोई अन्य मार्कअप विधि) गलत स्थान पर ड्रॉ करता है। quads एक 8-नंबर फ्लैट एरे है (x1,y1,x2,y2,x3,y3,x4,y4), लेकिन यह नहीं है rect — 4-अंकों वाला आयत पास करने पर एक विकृत या अनुपस्थित क्वाड बनता है। हाइलाइट किए गए टेक्स्ट की प्रत्येक पंक्ति के लिए एक क्वाड बनाएं।

फ़्लैटेन किया गया एनोटेशन अभी भी क्लिक करने योग्य है। Flatten() को ऑब्जेक्ट पर कॉल किया जाना चाहिए जो … द्वारा लौटाया गया है Add* कॉल, और दस्तावेज़ को सहेजा जाना चाहिए (doc.WriteTo() / doc.Save()) फ़्लैटेन करने के बाद — परिवर्तन केवल मेमोरी में मौजूद रहता है जब तक फ़ाइल को वापस नहीं लिखा जाता।

SearchAnnotationText() कोई हिट नहीं लौटाता भले ही टेक्स्ट पेज पर दिखाई दे रहा हो। यह केवल एनोटेशन मेटाडेटा फ़ील्ड्स को खोजता है (/Contents, /T, /Subj) — वह दृश्यमान मार्कअप टेक्स्ट जो एनोटेशन की अपनी उपस्थिति से रेंडर किया गया है (जैसे कि एक FreeText body) द्वारा पाया जाता है SearchAnnotations() इसके बजाय, और न ही सामान्य पृष्ठ सामग्री खोजता है (उपयोग Page.GetText() or Page.Search() इसके लिए).

रेडैक्शन मार्क्स एनोटेशन्स खोजते समय नहीं दिखते हैं। Page.AddRedact() एक बनाता है RedactAnnotation, यहाँ कवर किए गए मार्कअप/शेप/टेक्स्ट एनोटेशन्स से एक अलग उपप्रकार — देखें Redaction गाइड।

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

Page कितने एनोटेशन उपप्रकारों को समर्थन देता है?

यह लाइब्रेरी मार्कअप (highlight, underline, strikeout, squiggly), आकार (square, circle, line, polygon, ink), टेक्स्ट (sticky note, free text), लिंक और स्टैम्प के लिए अपीयरेंस बनाती है — साथ ही फ़ाइल अटैचमेंट और रेडैक्शन एनोटेशन, जो अपने-अपने हाउ-टू गाइड्स में कवर किए गए हैं।

क्या मैं किसी पेज पर पहले से मौजूद एनोटेशन पढ़ सकता हूँ?

हाँ — Page.Annotations मौजूदा एनोटेशन को टाइप्ड हैंडल्स की एरे के रूप में लौटाता है जिसे आप निरीक्षण, संपादित या flatten कर सकते हैं, और Page.RemoveAnnotation(a) एक को हटाता है।

एनोटेशन को flatten करने और रेडैक्शन लागू करने में क्या अंतर है?

Flatten() एक एनोटेशन का बेक करता है appearance पृष्ठ में प्रवेश करता है और annotation object को हटा देता है, लेकिन उसके नीचे का कोई भी टेक्स्ट या इमेज कंटेंट अछूता रहता है। ApplyRedactions() content stream को नष्टकारी रूप से पुनः लिखता है जिससे कवर की गई सामग्री स्वयं गायब हो जाती है — विवरण के लिए Redaction guide देखें।

क्या एनोटेशन सहेजने/खोलने के दौर में संरक्षित रहते हैं?

हाँ — doc.WriteTo() / doc.Save() से पहले जोड़े गए एनोटेशन PDF में लिखे जाते हैं और अगले Document.Open() / Document.OpenFile() पर सही तरीके से पढ़े जाते हैं।

यह भी देखें

 हिन्दी