PDF एनोटेशन के साथ काम करना
PDF एनोटेशनों के साथ काम करना
PDF एनोटेशन Aspose.PDF FOSS for C++ में Annotation बेस क्लास और उसकी ठोस उपप्रकारों (TextAnnotation, LinkAnnotation, HighlightAnnotation, FreeTextAnnotation, CircleAnnotation, WatermarkAnnotation, WidgetAnnotation, और अन्य) द्वारा प्रतिनिधित्व किए जाते हैं। प्रत्येक पृष्ठ अपने एनोटेशन को Page.Annotations() के माध्यम से उजागर करता है, जो एक AnnotationCollection लौटाता है। यह गाइड पृष्ठ में एनोटेशन जोड़ने, उन्हें इटरेट करने और हटाने, मौजूदा दस्तावेज़ से एनोटेशन पढ़ने, लिंक एक्शन संलग्न करने, रूपरेखा को अनुकूलित करने, और एनोटेशन को फ्लैट करने को कवर करता है।
पृष्ठ में एनोटेशन जोड़ना
एक ठोस एनोटेशन इंस्टेंस बनाएं, उसे Rectangle के साथ स्थित करें, और AnnotationCollection.Add() के साथ पृष्ठ के संग्रह में जोड़ें। TextAnnotation एक स्टिकी-नोट शैली की टिप्पणी को दर्शाता है जो पृष्ठ पर एक बिंदु पर एंकर किया गया है:
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/annotations/text_annotation.hpp>
#include <aspose/pdf/rectangle.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto& page = doc.Pages()[1];
Aspose::Pdf::Annotations::TextAnnotation note(doc);
note.Rect(Aspose::Pdf::Rectangle(100.0, 700.0, 200.0, 720.0, false));
note.Contents("Reviewed and approved");
page.Annotations().Add(note);
doc.Save("annotated.pdf");
}Annotation.Contents() / Contents(value) नोट टेक्स्ट को प्राप्त और सेट करते हैं, और Annotation.Rect() / Rect(value) पृष्ठ पर एनोटेशन को स्थित करते हैं।
एनोटेशन को इटरेट करना और हटाना
AnnotationCollection गिनती, अनुक्रमित पहुँच, सदस्यता जाँच, और मान या अनुक्रमणिका द्वारा हटाने का समर्थन करता है:
#include <aspose/pdf/document.hpp>
int main() {
Aspose::Pdf::Document doc("input.pdf");
auto& annotations = doc.Pages()[1].Annotations();
std::cout << "Annotation count: " << annotations.Count() << "\n";
for (int i = 0; i < annotations.Count(); ++i) {
std::cout << "Contents: " << annotations[i].Contents() << "\n";
}
if (annotations.Count() > 0) {
annotations.Delete(0); // remove by index
}
annotations.Clear(); // remove everything
}AnnotationCollection.Contains(annotation) और Remove(annotation) किसी विशिष्ट एनोटेशन रेफ़रेंस पर काम करते हैं; Delete(index) स्थिति द्वारा हटाता है, और Delete(annotation) बिना इंडेक्स की आवश्यकता के एक विशिष्ट एनोटेशन को हटाता है। IsReadOnly() रिपोर्ट करता है कि संग्रह को संशोधित किया जा सकता है या नहीं।
मौजूदा दस्तावेज़ से एनोटेशन पढ़ना
जब कोई दस्तावेज़ लोड किया जाता है, उसके एनोटेशन पहले से ही भर चुके होते हैं और बिना कुछ जोड़े निरीक्षण किए जा सकते हैं। Annotation.AnnotationType() उपप्रकार की रिपोर्ट करता है (AnnotationType::Text, AnnotationType::Highlight, AnnotationType::Link, AnnotationType::FreeText, AnnotationType::FileAttachment, AnnotationType::Watermark, और अन्य):
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/annotations/annotation_type.hpp>
int main() {
Aspose::Pdf::Document doc("annotated.pdf");
auto& annotations = doc.Pages()[1].Annotations();
for (int i = 0; i < annotations.Count(); ++i) {
auto& a = annotations[i];
if (a.AnnotationType() == Aspose::Pdf::Annotations::AnnotationType::Text) {
std::cout << "Note: " << a.Contents() << "\n";
}
}
}एनोटेशन क्रम और उपप्रकार को सहेजने/पुनः लोड करने के राउंड ट्रिप में संरक्षित रखा जाता है, इसलिए दस्तावेज़ लोड करने के बाद Annotations() में इंडेक्स करने वाला कोड वही क्रम देखता है जो फ़ाइल लिखते समय मौजूद था।
लिंक एनोटेशन और क्रियाएँ
LinkAnnotation पृष्ठ पर एक क्लिक करने योग्य क्षेत्र संलग्न करता है और सक्रिय होने पर एक PdfAction प्रेषित करता है। NamedAction पूर्वनिर्धारित नेविगेशन लक्ष्य पर कूदता है, JavascriptAction एक ECMAScript स्ट्रिंग चलाता है, और SubmitFormAction फ़ॉर्म डेटा को एक URL पर FileSpecification के माध्यम से पोस्ट करता है:
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/annotations/link_annotation.hpp>
#include <aspose/pdf/annotations/named_action.hpp>
#include <aspose/pdf/annotations/predefined_action.hpp>
#include <aspose/pdf/rectangle.hpp>
int main() {
Aspose::Pdf::Document doc;
auto page = doc.Pages().Add();
Aspose::Pdf::Annotations::LinkAnnotation link(
page, Aspose::Pdf::Rectangle(0.0, 0.0, 100.0, 20.0, false));
link.Action(Aspose::Pdf::Annotations::NamedAction(
Aspose::Pdf::Annotations::PredefinedAction::LastPage));
page.Annotations().Add(link);
doc.Save("linked.pdf");
}LinkAnnotation.Action(value) किसी भी PdfAction उपप्रकार को स्वीकार करता है और उसे आंतरिक रूप से क्लोन करता है, इसलिए एनोटेशन कार्रवाई की अपनी कॉपी रखता है। LinkAnnotation.Destination() / Destination(value) कार्रवाई के बजाय एक स्पष्ट नेविगेशन लक्ष्य सेट करते हैं, और Highlighting() / Highlighting(value) लिंक क्लिक होने पर दिखाए जाने वाले दृश्य प्रतिक्रिया को नियंत्रित करते हैं।
एनोटेशन रूप-रंग: बॉर्डर, फ़्लैग्स, और रंग
प्रत्येक Annotation एक Border, AnnotationFlags का बिटफ़ील्ड, और एक Color को उजागर करता है जो इसकी उपस्थिति को रेंडर करने के लिए उपयोग किया जाता है:
#include <aspose/pdf/annotations/border_style.hpp>
#include <aspose/pdf/annotations/annotation_flags.hpp>
#include <aspose/pdf/color.hpp>
// 'note' is an existing Annotation reference, e.g. from AnnotationCollection.
note.Border().Width(2);
note.Border().Style(Aspose::Pdf::Annotations::BorderStyle::Dashed);
note.Flags(Aspose::Pdf::Annotations::AnnotationFlags::Print);
note.Color(Aspose::Pdf::Color::Red());Border.Style() BorderStyle::Solid, Dashed, Beveled, Inset, या Underline को स्वीकार करता है। Border.Effect() अतिरिक्त रूप से एक BorderEffect::Cloudy रूपरेखा का समर्थन करता है जिसमें EffectIntensity() यह नियंत्रित करता है कि यह कितना स्पष्ट है। AnnotationFlags एक बिटफ़ील्ड है — Print, NoZoom, ReadOnly, और LockedContents जैसे मानों को मिलाकर यह नियंत्रित करें कि एक एनोटेशन व्यूअर में कैसे व्यवहार करता है बिना उसकी दिखाई देने वाली सामग्री बदले।
एनोटेशन को फ़्लैट करना
एकल एनोटेशन को फ़्लैट किया जा सकता है — पृष्ठ सामग्री में मिलाकर और उसे गैर-इंटरैक्टिव बनाकर — सीधे Annotation.Flatten() को कॉल करके:
#include <aspose/pdf/document.hpp>
int main() {
Aspose::Pdf::Document doc("annotated.pdf");
auto& annotations = doc.Pages()[1].Annotations();
for (int i = 0; i < annotations.Count(); ++i) {
annotations[i].Flatten();
}
doc.Save("flattened.pdf");
}दस्तावेज़-व्यापी एनोटेशन संचालन के लिए, PdfAnnotationEditor API में उपयोग किए जाने वाले साझा Facade पैटर्न का अनुसरण करता है: BindPdf() के साथ स्रोत दस्तावेज़ को बाइंड करें, एक या अधिक एनोटेशन संचालन लागू करें, फिर परिणाम को Save() के साथ लिखें:
#include <aspose/pdf/facades/pdf_annotation_editor.hpp>
int main() {
Aspose::Pdf::Facades::PdfAnnotationEditor editor;
editor.BindPdf("annotated.pdf");
editor.FlatteningAnnotations();
editor.Save("flattened.pdf");
}PdfAnnotationEditor.DeleteAnnotations() बंधित दस्तावेज़ से सभी एनोटेशन हटाता है; DeleteAnnotations(annotType) हटाने को एकल AnnotationType तक सीमित करता है। ImportAnnotationsFromXfdf(xfdfFile) और ImportAnnotationsFromFdf(fdfFile) किसी अन्य PDF व्यूअर से निर्यात किए गए एनोटेशन डेटा को लोड करते हैं।
सलाह और सर्वोत्तम प्रथाएँ
- हमेशा
Document.Save()को कॉल करने से पहले नए निर्मित एनोटेशन कोPage.Annotations()में जोड़ें — एक एनोटेशन जो कभी संग्रह में नहीं जोड़ा जाता, आउटपुट फ़ाइल में लिखा नहीं जाता। - यदि आप निश्चित नहीं हैं कि एनोटेशन अभी भी मौजूद है, तो
Remove()को कॉल करने से पहलेAnnotationCollection.Contains(annotation)का उपयोग करें; जब एनोटेशन अनुपस्थित हो तोRemove()falseलौटाता है न कि त्रुटि फेंकता है। - अस्वस्थ या तृतीय-पक्ष PDF फ़ाइल से लोड किए गए एनोटेशन पर इटरेट करते समय उप-प्रकार व्यवहार पर कास्टिंग या ब्रांचिंग करने से पहले
Annotation.AnnotationType()जांचें। - दस्तावेज़ को आर्काइव करने से पहले
Annotation.Flatten()के साथ एनोटेशन को फ्लैटन करें (या पूरे दस्तावेज़ के लिएPdfAnnotationEditor.FlatteningAnnotations()) ताकि अन्य टूल्स के रिव्यूअर वही रूप देख सकें जो आपने बनाया है। AnnotationFlagsएक बिटफ़ील्ड है — केवल एक फ़्लैग सक्रिय हो, यह मानने के बजाय फ़्लैग्स को एनीम के अंतर्निहित पूर्णांक मानों के साथ मिलाएँ।
सामान्य समस्याएँ
| समस्या | कारण | समाधान |
|---|---|---|
| सहेजने के बाद annotation दिखाई नहीं दे रहा है | annotation बनाया गया था लेकिन कभी भी Page.Annotations() में जोड़ा नहीं गया | page.Annotations().Add(annotation) को doc.Save() से पहले कॉल करें |
Remove() false लौटाता है | प्रदान किया गया annotation रेफ़रेंस संग्रह में वर्तमान में मौजूद किसी प्रविष्टि से मेल नहीं खाता | पहले Contains() का उपयोग करें, या Delete(index) के साथ इंडेक्स से हटाएँ |
| रीलोड के बाद गलत एनोटेशन प्रकार | कोड ने AnnotationType() की जाँच किए बिना एक विशिष्ट उपप्रकार मान लिया | Annotation.AnnotationType() पर शाखा बनाएं, इससे पहले कि ऑब्जेक्ट को विशिष्ट उपप्रकार के रूप में मानें |
| असाइनमेंट के बाद लिंक कार्रवाई अनसेट दिखती है | एक स्थानीय PdfAction स्कोप से बाहर हो गया; LinkAnnotation.Action() एनोटेशन की क्लोन की गई प्रति लौटाता है, मूल ऑब्जेक्ट नहीं | मौलिक स्थानीय चर को रखे रखने के बजाय कार्रवाई को link.Action() के माध्यम से वापस पढ़ें |
PdfAnnotationEditor ऑपरेशन का कोई प्रभाव नहीं है | BindPdf() को नहीं बुलाया गया, या इसे ऐसे पथ के साथ बुलाया गया जो मौजूद नहीं है | कॉल करने से पहले पुष्टि करें कि BindPdf() सफल हो, फिर FlatteningAnnotations() या DeleteAnnotations() को कॉल करें |
FAQ
मैं PDF पृष्ठ में टिप्पणी-शैली का एनोटेशन कैसे जोड़ूँ?
लक्ष्य Document के साथ एक TextAnnotation बनाएं, उसके Rect() और Contents() सेट करें, फिर सहेजने से पहले इसे page.Annotations() में जोड़ें।
मैं यह कैसे पता करूँ कि मैं किस प्रकार की एनोटेशन देख रहा हूँ?
कॉल Annotation.AnnotationType(), जो एक AnnotationType enum मान लौटाता है जैसे Text, Link, Highlight, FreeText, FileAttachment, या Watermark।
क्या एक एनोटेशन एक से अधिक फ़्लैग रख सकता है?
हाँ। AnnotationFlags एक बिटफ़ील्ड है (Default, Invisible, Hidden, Print, NoZoom, ReadOnly, LockedContents, और अन्य), इसलिए कई फ़्लैग एक ही एनोटेशन पर संयोजित किए जा सकते हैं।
एक एनोटेशन को फ्लैटन करने और एक दस्तावेज़ को फ्लैटन करने में क्या अंतर है?
Annotation.Flatten() एकल एनोटेशन को उसके पृष्ठ की सामग्री में मिलाता है। PdfAnnotationEditor.FlatteningAnnotations() (वैकल्पिक रूप से पृष्ठ रेंज द्वारा सीमित और AnnotationType के माध्यम से ओवरलोड का उपयोग करके जो start, end, और annotType स्वीकार करता है) एक ही कॉल में पूरे बाउंड दस्तावेज़ को फ्लैटन करता है।
मैं दस्तावेज़ से एक प्रकार की सभी एनोटेशन कैसे हटाऊँ?
दस्तावेज़ को PdfAnnotationEditor.BindPdf() के साथ बाइंड करें, लक्ष्य AnnotationType के साथ DeleteAnnotations(annotType) को कॉल करें, फिर परिणाम को Save() करें।
API Reference सारांश
| क्लास/मेथड | विवरण |
|---|---|
Annotation | सभी PDF एनोटेशन उपप्रकारों के लिए अमूर्त बेस क्लास |
Annotation.Rect() / Rect(value) | एनोटेशन का बाउंडिंग आयत प्राप्त करें या सेट करें |
Annotation.Contents() / Contents(value) | एनोटेशन के टेक्स्ट कंटेंट को प्राप्त करें या सेट करें |
Annotation.AnnotationType() | इस एनोटेशन के लिए AnnotationType enum मान लौटाता है |
Annotation.Flags() / Flags(value) | प्राप्त करें या सेट करें AnnotationFlags बिटफ़ील्ड |
Annotation.Border() / Border(value) | एनोटेशन का Border प्राप्त करें या सेट करें |
Annotation.Color() / Color(value) | एनोटेशन के डिस्प्ले Color को प्राप्त करें या सेट करें |
Annotation.Flatten() | इस एनोटेशन को पेज सामग्री में मिलाता है, जिससे यह गैर-इंटरैक्टिव हो जाता है |
AnnotationCollection | पेज पर एनोटेशनों का क्रमबद्ध संग्रह, जिसे Page.Annotations() द्वारा लौटाया जाता है |
AnnotationCollection.Add(annotation) / Add(annotation, considerRotation) | संग्रह में एक टिप्पणी जोड़ता है |
AnnotationCollection.Count() | संग्रह में टिप्पणी की संख्या लौटाता है |
AnnotationCollection.Contains(annotation) | रिपोर्ट करता है कि क्या संग्रह में दिया गया टिप्पणी मौजूद है |
AnnotationCollection.Remove(annotation) | एक विशिष्ट टिप्पणी को हटाता है; यदि न मिले तो false लौटाता है |
AnnotationCollection.Delete(index) / Delete(annotation) | एक अनुक्रमणिका या संदर्भ द्वारा एनोटेशन हटाता है |
AnnotationCollection.Clear() | संग्रह से सभी एनोटेशन हटाता है |
TextAnnotation | स्टिकी-नोट शैली का एनोटेशन जिसमें Open() और Icon() (TextIcon) हैं |
LinkAnnotation | क्लिक करने योग्य क्षेत्र जो PdfAction को Action() / Action(value) के माध्यम से भेजता है |
LinkAnnotation.Destination() / Destination(value) | एक स्पष्ट नेविगेशन लक्ष्य प्राप्त करें या सेट करें |
HighlightAnnotation | टेक्स्ट के एक हिस्से को हाइलाइट रंग से चिह्नित करता है |
FreeTextAnnotation | टेक्स्ट कॉलआउट दिखाता है; Justification(), DefaultAppearanceObject(), Callout() द्वारा कॉन्फ़िगर किया गया |
CircleAnnotation | एनोटेशन के आयत में एक अंडाकार बनाता है |
WatermarkAnnotation | एक Opacity() / Opacity(value) एक्सेसर के साथ ओवरले एनोटेशन |
WidgetAnnotation | फ़ॉर्म-फ़ील्ड दिखावट एनोटेशन ReadOnly(), Required(), Exportable(), DefaultAppearance() के साथ |
NamedAction | पूर्वनिर्धारित नेविगेशन क्रिया (PredefinedAction enum) को LinkAnnotation में संलग्न किया जा सकता है |
JavascriptAction | ECMAScript स्ट्रिंग को Script() / GetECMAScriptString() के द्वारा चलाता है |
SubmitFormAction | फ़ॉर्म डेटा को FileSpecification URL पर Url() / Url(value) के माध्यम से पोस्ट करता है |
Border | एनोटेशन बॉर्डर Width(), Style() (BorderStyle), Effect() (BorderEffect) के साथ |
PdfAnnotationEditor | दस्तावेज़-व्यापी एनोटेशन आयात, संशोधन, फ्लैटनिंग, और विलोपन के लिए फ़ेसाड |
PdfAnnotationEditor.FlatteningAnnotations() | बाउंड दस्तावेज़ में एनोटेशनों को फ्लैटन करता है |
PdfAnnotationEditor.DeleteAnnotations(annotType) | दिए गए AnnotationType की सभी एनोटेशनों को हटाता है |
PdfAnnotationEditor.ImportAnnotationsFromXfdf(xfdfFile) | XFDF फ़ाइल से एनोटेशन आयात करता है |