परिचय

introductory post एनोटेशन्स को संक्षेप में कवर करता है: हाइलाइट्स, अंडरलाइन, स्टिकी नोट्स, और स्टैंप्स, जो Page.AddHighlight(), Page.AddUnderline() और समान तरीकों से जोड़े जाते हैं। यह Page द्वारा वास्तव में समर्थित चीज़ों का एक छोटा हिस्सा है — इस लाइब्रेरी में एनोटेशन गैलरी मार्कअप, फ्रीहैंड शेप्स, वास्तविक नेविगेशन और फ़ॉर्म-सबमिशन एक्शन्स वाले लिंक, तथा खोज को कवर करती है, जो सभी सीधे Page से पहुँच योग्य हैं।

यह पोस्ट उस सतह के बाकी हिस्सों को कवर करती है: आकार और फ्रीहैंड एनोटेशन विधियाँ, एक Link एनोटेशन की कार्रवाई वास्तव में क्या कर सकती है, और दो विभिन्न तरीके जिससे आप एनोटेशन सामग्री को खोज सकते हैं, यह इस बात पर निर्भर करता है कि आप जिस टेक्स्ट की खोज कर रहे हैं वह एनोटेशन की उपस्थिति में है या उसके /Contents टिप्पणी में।

हर एनोटेशन विधि एक टाइप्ड हैंडल लौटाती है जो अभी बनाए गए एनोटेशन तक सीमित होता है, और पेज पर हर एनोटेशन को बाद में page.Annotations के माध्यम से पढ़ा जा सकता है।


क्या शामिल है

मार्कअप एनोटेशन्स

Page.AddHighlight(), Page.AddUnderline(), Page.AddSquiggly(), और Page.AddStrikeOut() सभी समान विकल्प आकार लेते हैं — टेक्स्ट क्षेत्र को चिह्नित करने वाले क्वाड पॉइंट्स का सेट और एक वैकल्पिक रंग — और चारों ही एक MarkupAnnotation लौटाते हैं। क्वाड पॉइंट्स आमतौर पर टेक्स्ट खोज या ज्ञात टेक्स्ट आयत से प्राप्त होते हैं।

const markup = (body: [number, number, number, number], sample: string,
  add: (quads: number[]) => void): void => {
  const yMid = (body[1] + body[3]) / 2 - 6;
  const textRect: [number, number, number, number] = [body[0] + 4, yMid, body[2] - 4, yMid + 16];
  page.AddText(sample, textRect[0], textRect[1], { fontSize: 12 });
  add(rectToQuads(textRect));
};

markup(cardBody, 'Highlight this phrase', (quads) =>
  page.AddHighlight({ quads, color: [1, 1, 0], contents: 'Yellow highlight' }));
markup(cardBody, 'Underline this phrase', (quads) =>
  page.AddUnderline({ quads, color: [0, 0, 1] }));
markup(cardBody, 'Squiggle this phrase', (quads) =>
  page.AddSquiggly({ quads, color: [1, 0.5, 0] }));
markup(cardBody, 'Strike this phrase out', (quads) =>
  page.AddStrikeOut({ quads, color: [1, 0, 0] }));

नोट्स और स्वतंत्र-स्थायी पाठ

Page.AddTextNote() एक क्लासिक स्टिकी-नोट आइकन जोड़ता है जो क्लिक करने पर एक टिप्पणी पॉपअप खोलता है, और एक TextAnnotation लौटाता है। Page.AddFreeText() इसके बजाय अपना पाठ सीधे पृष्ठ पर एक सीमाबद्ध बॉक्स के अंदर खींचता है, अपनी स्वयं की फ़ॉन्ट आकार, संरेखण, और भराव रंग के साथ — ऐसे कॉलआउट्स के लिए उपयोगी जो कुछ भी खोलें बिना दिखने चाहिए।

page.AddTextNote({
  rect: [x, y, x + 20, y + 20], icon: 'Note', author: 'Reviewer',
  contents: 'This is a sticky-note annotation.',
});

page.AddFreeText({
  rect: [220, 60, 520, 96],
  contents: 'FreeText sample', fontSize: 10, align: 'center',
  fill: [1, 1, 0.8], width: 1,
});

आकृतियाँ और फ्रीहैंड इंक

Page.AddSquare() और Page.AddCircle() एक सीमाबद्ध आयत या अण्डाकार खींचते हैं, प्रत्येक में वैकल्पिक आंतरिक भराव हो सकता है। Page.AddLine() दो बिंदुओं के बीच सीधी रेखा खींचता है, प्रत्येक अंत पर स्वतंत्र रूप से चयन योग्य एरोहेड शैलियों (startEnding/endEnding, उदाहरण के लिए 'OpenArrow'/'ClosedArrow') के साथ। Page.AddPolygon() और Page.AddPolyline() समतल निर्देशांक सूची से बंद और खुली बहु-बिंदु आकृतियां खींचते हैं, और Page.AddInk() एक या अधिक फ्रीहैंड पेन स्ट्रोक को paths बिंदु सूचियों के रूप में रिकॉर्ड करता है।

page.AddSquare({ rect: [50, 400, 130, 435], color: [0.8, 0, 0], fill: [1, 1, 0.5], width: 2 });
page.AddCircle({ rect: [150, 400, 230, 435], color: [0, 0.5, 0], width: 2 });

page.AddLine({
  line: [260, 417, 420, 417],
  color: [0, 0, 0.7], width: 2,
  startEnding: 'OpenArrow', endEnding: 'ClosedArrow',
});

const stroke: number[] = [];
[-8, 6, -4, 10, -2, 8, -6].forEach((dy, i) => stroke.push(440 + i * 12, 417 + dy));
page.AddInk({ paths: [stroke], color: [0.6, 0, 0.6], width: 2 });

लिंक और उनकी क्रियाएँ

Page.AddLink() एक LinkAnnotation लौटाता है जिसका action तय करता है कि क्लिक पर क्या होता है: { type: 'uri', uri: '...' } एक बाहरी URL खोलता है, { type: 'goto', page: N } समान दस्तावेज़ में किसी पृष्ठ पर कूदता है, और { type: 'submit', url: '...', format: 'html' } वर्तमान फ़ॉर्म-फ़ील्ड मानों को एक एंडपॉइंट पर सबमिट करता है। एक सीमा से बाहर का goto पृष्ठ संख्या या एक विकृत क्रिया ऑब्जेक्ट निर्माण समय पर अस्वीकृत किया जाता है, न कि चुपचाप स्वीकार किया जाता है।

const uriLink = page.AddLink({
  rect: [10, 10, 100, 30], action: { type: 'uri', uri: 'https://example.com' },
});

const gotoLink = page.AddLink({
  rect: [10, 40, 100, 60], action: { type: 'goto', page: 2 },
});

const submitLink = page.AddLink({
  rect: [10, 70, 100, 90],
  action: { type: 'submit', url: 'https://example.com/post', format: 'html' },
});

// page.AddLink({ rect: [...], action: { type: 'goto', page: 99 } }) throws RangeError
// when 99 is out of range for the document.

एनोटेशन सामग्री की खोज

दो अलग-अलग विधियाँ एनोटेशन टेक्स्ट को खोजती हैं, और वे जानबूझकर अलग-अलग हैं: Page.SearchAnnotations() एनोटेशन की अपनी उपस्थिति के टेक्स्ट को खोजती है खींचती है — एक पर दिखाई देने वाला लेबल FreeText या स्टैम्प, उदाहरण के तौर पर — जबकि Page.SearchAnnotationText() एनोटेशन के अंदर ले जाया गया टेक्स्ट खोजती है /Contents एंट्री, जैसे कि एक स्टिकी नोट की टिप्पणी बॉडी। एक में मिलान होना दूसरे में मिलान होने का मतलब नहीं है।

page.SearchAnnotations('bravo');          // finds it if the annotation's drawn appearance contains it
page.SearchAnnotationText('bravo');       // finds it if the annotation's /Contents comment contains it

अब आवश्यकता नहीं वाली एनोटेशन को सीधे Page.RemoveAnnotation() के साथ हटाया जा सकता है, जिसमें एनोटेशन हैंडल या उसका अंतर्निहित शब्दकोश पास किया जाता है।


त्वरित प्रारम्भ

पैकेज स्थापित करें, फिर किसी मौजूदा पृष्ठ पर हाईलाइट, लिंक और स्टिकी नोट जोड़ें:

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
import { Document } from '@asposefoss/pdf';

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

page.AddHighlight({ quads: [72, 700, 300, 700, 72, 715, 300, 715], color: [1, 1, 0] });

page.AddLink({
  rect: [72, 670, 200, 690], action: { type: 'uri', uri: 'https://example.com' },
});

page.AddTextNote({
  rect: [320, 670, 340, 690], icon: 'Note', author: 'Reviewer',
  contents: 'Please double-check this figure.',
});

doc.WriteTo('annotated.pdf');

समर्थित स्वरूप

फ़ॉर्मेटविस्तारपढ़ेंलिखें
PDFpdf✓✓
Markdownmd✓✓
SVGsvg✓✓
TIFFtiff✓✓
DOCXdocx—✓
HTMLhtml—✓
PNGpng—✓
EPUBईपब—✓

ओपन सोर्स और लाइसेंसिंग

Aspose.PDF FOSS for TypeScript MIT लाइसेंस के तहत जारी किया गया है, स्रोत GitHub पर प्रकाशित है। कोई मूल्यांकन वॉटरमार्क, उपयोग सीमा, या अलग लाइसेंस फ़ाइल प्रबंधन की आवश्यकता नहीं है, और लाइब्रेरी को वाणिज्यिक उत्पादों में बिना रॉयल्टी के उपयोग किया जा सकता है।

पैकेज वर्तमान में संस्करण 0.1.0 पर है, जो सक्रिय प्रारम्भिक चरण विकास को दर्शाता है। Node.js (>=22) ही एकमात्र रनटाइम आवश्यकता है, और पैकेज की कोई अन्य थर्ड-पार्टी निर्भरताएँ नहीं हैं।


आरंभ

संबंधित संसाधन