एनोटेशन और फ़ॉर्म
एनोटेशन और फ़ॉर्म
Aspose.PDF FOSS for .NET आपको PDF एनोटेशन और इंटरैक्टिव AcroForm फ़ील्ड्स तक पूर्ण पढ़ने/लिखने की पहुंच देता है। एनोटेशन के लिए मुख्य प्रवेश बिंदु Page.Annotations (एक AnnotationCollection) है, जबकि फ़ॉर्म फ़ील्ड्स को Document.Form के माध्यम से एक्सेस किया जाता है। दोनों सबसिस्टम पूरी तरह से मेमोरी में काम करते हैं और किसी लाइसेंस कुंजी की आवश्यकता नहीं होती।
एनोटेशन जोड़ना
AnnotationCollection प्रत्येक मानक एनोटेशन प्रकार के लिए टाइप्ड हेल्पर मेथड्स प्रदान करता है। प्रत्येक मेथड एक Rectangle स्वीकार करता है जो पृष्ठ पर एनोटेशन की स्थिति को परिभाषित करता है, साथ ही प्रकार‑विशिष्ट पैरामीटर।
using var doc = Document.Open(pdfBytes);
var page = doc.Pages[1];
// Text (sticky-note) annotation
page.Annotations.AddTextAnnotation(
new Rectangle(72, 720, 200, 740),
contents: "Review this paragraph",
title: "Editor",
open: true);
// Highlight annotation
page.Annotations.AddHighlightAnnotation(
new Rectangle(72, 680, 300, 700),
quadPoints: null,
color: new double[] { 1, 1, 0 });
// Free-text annotation (rendered directly on the page)
page.Annotations.AddFreeTextAnnotation(
new Rectangle(72, 640, 350, 660),
contents: "Inline note",
fontName: "Helvetica",
fontSize: 10,
color: new double[] { 0, 0, 0 });
using var ms = new MemoryStream();
doc.Save(ms);लिंक एनोटेशन और क्रियाएँ
लिंक्स एक क्लिक करने योग्य आयत के साथ PdfAction को मिलाते हैं। लाइब्रेरी URI, GoTo, JavaScript, Named, और Launch एक्शन्स को सपोर्ट करती है।
using var doc = Document.Open(pdfBytes);
var page = doc.Pages[1];
// URI link
var uriAction = PdfAction.CreateUri("https://aspose.com");
page.Annotations.AddLinkAnnotation(
new Rectangle(50, 700, 200, 720), uriAction);
// GoTo link (jump to page 3)
page.Annotations.AddLinkAnnotation(
new Rectangle(50, 660, 200, 680),
destinationPage: 3,
destRect: new Rectangle(0, 0, 612, 792));
// JavaScript link
var jsAction = PdfAction.CreateJavaScript("app.alert('Hello');");
page.Annotations.AddLinkAnnotation(
new Rectangle(50, 620, 200, 640), jsAction);
doc.Save("links.pdf");सहेजे गए PDF को खोलने के बाद लिंक को फिर से पढ़ने के लिए, एनोटेशन को LinkAnnotation में कास्ट करें और उसकी Uri प्रॉपर्टी की जांच करें या PdfAction.Create के माध्यम से एक्शन डिक्शनरी को हल करें।
मार्कअप और आकार एनोटेशन
मार्कअप एनोटेशन (हाइलाइट, अंडरलाइन, स्ट्राइकआउट) मौजूदा टेक्स्ट को चिह्नित करते हैं। शेप एनोटेशन (स्क्वायर, सर्कल, लाइन, इंक) पेज पर ज्योमेट्री बनाते हैं।
var page = doc.Pages[1];
// Underline
page.Annotations.AddUnderlineAnnotation(
new Rectangle(72, 600, 300, 620),
quadPoints: null,
color: new double[] { 1, 0, 0 });
// Square
page.Annotations.AddSquareAnnotation(
new Rectangle(72, 540, 200, 580),
borderColor: new double[] { 0, 0, 1 },
fillColor: null,
lineWidth: 1.5);
// Line
page.Annotations.AddLineAnnotation(
new Rectangle(72, 500, 300, 520),
x1: 72, y1: 510, x2: 300, y2: 510,
color: new double[] { 0, 0.5, 0 },
lineWidth: 2);
// Ink (freehand)
page.Annotations.AddInkAnnotation(
new Rectangle(72, 440, 200, 480),
inkPaths: new[] { new double[] { 80, 450, 120, 470, 160, 450 } },
color: new double[] { 0.5, 0, 0.5 },
lineWidth: 1);स्टैम्प एनोटेशन
स्टैम्प एनोटेशन पृष्ठ पर एक छवि या पूर्वनिर्धारित आइकन को ओवरले करते हैं।
var stamp = new StampAnnotation(doc);
// Configure stamp properties, then add to page
page.Annotations.Add(stamp);एनोटेशन को फ्लैटन करना
किसी भी एनोटेशन पर Flatten() को कॉल करें ताकि उसकी दृश्य उपस्थिति को पृष्ठ सामग्री स्ट्रीम में बर्न किया जा सके और इसे इंटरैक्टिव एनोटेशन सूची से हटा दिया जाए।
foreach (var annot in doc.Pages[1].Annotations)
{
annot.Flatten();
}AnnotationSelector के साथ विज़िटर पैटर्न
AnnotationSelector विज़िटर पैटर्न को लागू करता है ताकि आप प्रकार के अनुसार एनोटेशन को मैन्युअल कास्टिंग के बिना फ़िल्टर कर सकें।
var selector = new AnnotationSelector();
doc.Pages[1].Accept(selector);
// selector.Selected now contains all annotations on page 1
foreach (var annot in selector.Selected)
{
// Process each annotation by type
}कंस्ट्रक्टर को एक टाइप्ड एनोटेशन इंस्टेंस पास करें ताकि केवल उस प्रकार को फ़िल्टर किया जा सके:
var linkFilter = new AnnotationSelector(new LinkAnnotation(page, Rectangle.Empty));
page.Accept(linkFilter);
// linkFilter.Selected contains only LinkAnnotation instancesइंटरैक्टिव फ़ॉर्म फ़ील्ड्स
Document.Form के माध्यम से AcroForm फ़ील्ड तक पहुँचें। Form क्लास फ़ील्ड‑स्तर के पढ़ने/लिखने के संचालन को उजागर करती है और JSON निर्यात का समर्थन करती है।
using var doc = Document.Open(pdfBytes);
// Enumerate all fields
foreach (var field in doc.Form.Fields)
{
Console.WriteLine($"{field.FullName}: {field.Value}");
}फ़ील्ड उपवर्ग में शामिल हैं TextBoxField, CheckboxField, RadioButtonField,
ComboBoxField, ListBoxField, ChoiceField, और SignatureField.
फ़ॉर्म डेटा को JSON में निर्यात करना
WidgetAnnotation ExportToJson ओवरलोड्स प्रदान करता है जो फ़ील्ड डेटा को स्ट्रीम या फ़ाइल पथ में सीरियलाइज़ करते हैं। एक वैकल्पिक ExportFieldsToJsonOptions पैरामीटर आउटपुट फ़ॉर्मेटिंग को नियंत्रित करता है।
using var doc = Document.Open(pdfBytes);
var widget = (WidgetAnnotation)doc.Pages[1].Annotations[1];
using var jsonStream = new MemoryStream();
widget.ExportToJson(jsonStream);टिप्स और सर्वोत्तम प्रथाएँ
- हमेशा स्पष्ट
Rectangleनिर्देशांक PDF उपयोगकर्ता-स्थान इकाइयों (1/72 इंच) में निर्दिष्ट करें। - अधिकतम लचीलापन के लिए
AddLinkAnnotationको एकPdfActionके साथ उपयोग करें — URI, GoTo, JavaScript, और Named actions सभी समर्थित हैं। - यदि आप चाहते हैं कि एनोटेशन गैर-इंटरैक्टिव व्यूअर्स में दिखाई दें, तो PDF वितरित करने से पहले
Flatten()को कॉल करें। - पृष्ठ एनोटेशन को इटररेट करने के बजाय
Document.Form.Fieldsके माध्यम से फ़ॉर्म फ़ील्ड तक पहुँचें — फ़ॉर्म कलेक्शन क्रॉस-पेज फ़ील्ड ग्रुपिंग को संभालता है। - एनोटेशन राउंड-ट्रिप फ़िडेलिटी को सत्यापित करने के लिए दस्तावेज़ को सहेजें और पुनः खोलें, विशेष रूप से कस्टम एक्शन के लिए।
सामान्य समस्याएँ
| Issue | Cause | Fix |
|---|---|---|
| सेव करने के बाद Annotation दिखाई नहीं देता | Rectangle का क्षेत्र शून्य है या पृष्ठ की सीमाओं के बाहर है | सुनिश्चित करें कि निर्देशांक पृष्ठ के भीतर हैं MediaBox |
LinkAnnotation.Uri returns null | लिंक GoTo या JavaScript एक्शन का उपयोग करता है, URI एक्शन नहीं | PdfAction.Create के माध्यम से एक्शन डिक्शनरी को हल करें और ActionType जांचें |
| Form field value is empty string | फ़ील्ड मौजूद है लेकिन इसमें /V प्रविष्टि नहीं है | प्रोसेसिंग से पहले जांचें कि field.Value null नहीं है |
Flatten() throws | Annotation में /P (पेज) संदर्भ नहीं है | सुनिश्चित करें कि Annotation Page.Annotations के माध्यम से जोड़ा गया था |
अक्सर पूछे जाने वाले प्रश्न
PDF पृष्ठ में हाइपरलिंक कैसे जोड़ें?
page.Annotations.AddLinkAnnotation(rect, PdfAction.CreateUri(url)) का उपयोग करके निर्दिष्ट आयत में एक क्लिक करने योग्य URI लिंक बनाएं।
क्या मैं मौजूदा PDF से फ़ॉर्म फ़ील्ड मान पढ़ सकता हूँ?
हाँ। Document.Open के साथ दस्तावेज़ खोलें, फिर Document.Form.Fields को दोहराएँ और प्रत्येक Field पर Value प्रॉपर्टी पढ़ें।
लाइब्रेरी कौन से एनोटेशन प्रकारों का समर्थन करती है?
लाइब्रेरी टेक्स्ट, फ्री-टेक्स्ट, लिंक, हाइलाइट, अंडरलाइन, स्ट्राइकआउट,
स्क्वायर, सर्कल, लाइन, इंक, स्टैम्प, कैरेट, फ़ाइल-अटैचमेंट, साउंड, पॉलीगॉन,
पॉलीलाइन, विजेट, वॉटरमार्क, और 3D एनोटेशन। सभी प्रकार उपलब्ध हैं
AnnotationCollection हेल्पर मेथड्स या सीधे निर्माण के माध्यम से।
मैं एनोटेशन को प्रकार द्वारा कैसे फ़िल्टर करूँ?
AnnotationSelector का उपयोग टाइप्ड टेम्प्लेट एनोटेशन के साथ करें। page.Accept(selector) को कॉल करें
और selector.Selected को मिलते‑जुलते एनोटेशन के लिए जांचें।
क्या मैं केवल विशिष्ट एनोटेशन को फ्लैटन कर सकता हूँ?
हाँ। व्यक्तिगत Annotation इंस्टेंस पर Flatten() को कॉल करें, पूरे संग्रह को इटररेट करने के बजाय।
API रेफ़रेंस सारांश
| Class / Method | Description |
|---|---|
AnnotationCollection | प्रत्येक Page पर टाइप्ड कलेक्शन; सभी एनोटेशन प्रकारों के लिए Add* हेल्पर्स प्रदान करता है |
AnnotationCollection.AddTextAnnotation | एक स्टिकी-नोट एनोटेशन जोड़ें |
AnnotationCollection.AddLinkAnnotation | URI, पेज डेस्टिनेशन या कस्टम एक्शन के साथ लिंक जोड़ें |
AnnotationCollection.AddHighlightAnnotation | टेक्स्ट-हाइलाइट एनोटेशन जोड़ें |
AnnotationCollection.AddInkAnnotation | फ़्रीहैंड-ड्राइंग एनोटेशन जोड़ें |
AnnotationCollection.AddSquareAnnotation | एक आयताकार आकार एनोटेशन जोड़ें |
AnnotationCollection.AddCircleAnnotation | एक दीर्घवृत्त आकार एनोटेशन जोड़ें |
AnnotationCollection.AddLineAnnotation | एक लाइन एनोटेशन जोड़ें |
Annotation.Flatten | एनोटेशन की उपस्थिति को पेज कंटेंट में बर्न करें |
Annotation.Accept | टाइप्ड AnnotationSelector.Visit ओवरलोड को डिस्पैच करें |
AnnotationSelector | टाइप के अनुसार एनोटेशन एकत्र करने वाला विज़िटर |
LinkAnnotation | एक URI या एक्शन ले जाने वाला एनोटेशन सबक्लास |
TextAnnotation | स्टिकी-नोट एनोटेशन |
InkAnnotation | स्ट्रोक पाथ्स के साथ फ़्रीहैंड-ड्राइंग एनोटेशन |
StampAnnotation | इमेज या आइकन ओवरले एनोटेशन |
WidgetAnnotation.ExportToJson | फ़ॉर्म-फ़ील्ड डेटा को JSON में सीरियलाइज़ करें |
Form | AcroForm फ़ेसाड; फ़ील्ड्स को एनेमरेट और मैनीपुलेट करता है |
Field | फ़ॉर्म फ़ील्ड्स के लिए बेस क्लास (TextBoxField, CheckboxField, आदि) |
CheckboxField | चेक-बॉक्स फ़ॉर्म फ़ील्ड |
TextBoxField | सिंगल/मल्टी-लाइन टेक्स्ट इनपुट फ़ील्ड |
ComboBoxField | ड्रॉप-डाउन चॉइस फ़ील्ड |
RadioButtonField | रेडियो-बटन ग्रुप फ़ील्ड |
AnnotationType | एनोटेशन प्रकारों का एनेमरेशन |
PdfAction.CreateUri | URI लिंक एक्शन्स के लिए फ़ैक्टरी |
PdfAction.CreateJavaScript | JavaScript एक्शन्स के लिए फ़ैक्टरी |