परिचय

PDF एनोटेशन पेज सामग्री के ऊपर परतबद्ध इंटरैक्टिव और विज़ुअल तत्वों की विस्तृत श्रृंखला को कवर करते हैं: स्टिकी टेक्स्ट नोट्स, हाइपरलिंक्स, हाइलाइटेड या स्ट्राइक-थ्रू टेक्स्ट, ज्यामितीय आकार, इंक स्ट्रोक्स, फ़ाइल अटैचमेंट्स, और अप्रूवल स्टैंप्स। Aspose.PDF FOSS for C++ इन सभी को Annotation की एक ठोस सबक्लास के रूप में दर्शाता है, इसलिए कोड जो पेज की एनोटेशन को पार करता है वह बेस क्लास के विरुद्ध सामान्य रूप से काम कर सकता है जबकि अभी भी सबटाइप-विशिष्ट सदस्यों तक पहुंच बना रहता है — जैसे Icon() TextAnnotation पर या Action() LinkAnnotation पर — जब आवश्यकता हो।

लाइब्रेरी का Annotations::AnnotationType एनीम उन उपप्रकारों को सूचीबद्ध करता है जिन्हें यह पहचानता है: Text, Link, FreeText, Line, Square, Circle, Polygon, PolyLine, Highlight, Underline, Squiggly, StrikeOut, Stamp, Caret, Ink, Popup, FileAttachment, Sound, Movie, Widget, Screen, PrinterMark, Watermark, Redaction, RichMedia, और कई अन्य। प्रत्येक मान एक ठोस क्लास से मैप होता है — आकार चिह्नन के लिए CircleAnnotation, SquareAnnotation, PolygonAnnotation, PolylineAnnotation, और LineAnnotation; मुक्त-रूप पाठ और खींची गई स्ट्रोक के लिए FreeTextAnnotation और InkAnnotation; एम्बेडेड सामग्री के लिए FileAttachmentAnnotation, SoundAnnotation, MovieAnnotation, ScreenAnnotation, और RichMediaAnnotation; और AcroForm फ़ील्ड उपस्थिति के लिए WidgetAnnotation

यह पोस्ट Annotation और AnnotationCollection बेस API को कवर करती है, टेक्स्ट नोट्स और लिंक जोड़ना, मौजूदा दस्तावेज़ लोड करते समय एनोटेशन प्रकारों का पता लगाना, और मार्कअप मेटाडेटा और स्टैम्प पढ़ना या अपडेट करना। Aspose.PDF FOSS for C++ एक C++20 लाइब्रेरी है जिसमें मानक लाइब्रेरी के अलावा कोई रनटाइम निर्भरताएँ नहीं हैं; हेडर सीधे aspose/pdf/annotations/ डायरेक्टरी से शामिल किए जाते हैं और लाइब्रेरी CMake टार्गेट के रूप में बनती है।


क्या शामिल है

Annotation और AnnotationCollection

Annotation हर एनोटेशन उपप्रकार की बेस क्लास है। यह साझा प्रॉपर्टीज़ को एक्सपोज़ करता है: Rect() / Rect(value) एनोटेशन के बाउंडिंग रेक्टैंगल के लिए, Contents() संबंधित टेक्स्ट के लिए, Name(), Color(), Flags() (एक AnnotationFlags बिटमास्क — Print, Hidden, Invisible, NoZoom, ReadOnly, और अन्य), Border(), Width() / Height(), AnnotationType(), और PageIndex()AnnotationCollection एक पेज पर एनोटेशन्स को रखता है और Page.Annotations() के माध्यम से पहुँचा जाता है।

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/annotations/annotation_collection.hpp>
#include <iostream>

using namespace Aspose::Pdf;
using namespace Aspose::Pdf::Annotations;

Document doc("reviewed.pdf");
AnnotationCollection& annots = doc.Pages()[1].Annotations();

std::cout << "Annotation count: " << annots.Count() << "\n";
for (int i = 0; i < annots.Count(); ++i) {
    Annotation& a = annots[i];
    std::cout << "  " << a.Name() << ": " << a.Contents() << "\n";
}

AnnotationCollection भी Add(annotation), Add(annotation, considerRotation), Delete(index), Delete(annotation), Clear(), Remove(annotation), Contains(annotation), और IsReadOnly() को उपलब्ध कराता है।

TextAnnotation के साथ टेक्स्ट नोट्स

TextAnnotation परिचित स्टिकी-नोट टिप्पणी को दर्शाता है। बेस Annotation सदस्यों के अलावा, यह Open() / Open(value) जोड़ता है जो नियंत्रित करता है कि नोट विस्तारित दिखे या नहीं, और Icon() / Icon(value) (एक TextIcon मान जैसे Note, Comment, Key, Help, या Check) आइकन ग्लिफ़ चुनने के लिए।

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/annotations/text_annotation.hpp>

using namespace Aspose::Pdf;
using namespace Aspose::Pdf::Annotations;

Document doc("input.pdf");

TextAnnotation note{doc};
note.Rect(Rectangle{100.0, 700.0, 200.0, 720.0, false});
note.Contents("Reviewed by QA");
note.Icon(TextIcon::Comment);
note.Open(true);

doc.Pages()[1].Annotations().Add(note);
doc.Save("annotated.pdf");

LinkAnnotation के साथ लिंक और क्रियाएँ

LinkAnnotation एक क्लिक करने योग्य क्षेत्र को पृष्ठ से जोड़ता है। यह स्वामित्व वाले Page और एक Rectangle से निर्मित होता है, और इसका व्यवहार Action(value) द्वारा निर्धारित किया जाता है — कोई भी PdfAction उपवर्ग, जिसमें NamedAction (जैसे PredefinedAction::LastPage जैसी पूर्वनिर्धारित नेविगेशन), GoToAction, GoToURIAction, या JavascriptAction शामिल हैं। Destination() लिंक के IAppointment लक्ष्य को पढ़ता है, और Highlighting() / Highlighting(value) HighlightingMode (None, Invert, Outline, Push, Toggle) को सेट करता है जो लिंक सक्रिय होने पर लागू होता है।

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/annotations/link_annotation.hpp>
#include <aspose/pdf/annotations/named_action.hpp>

using namespace Aspose::Pdf;
using namespace Aspose::Pdf::Annotations;

Document doc;
Page page = doc.Pages().Add();

LinkAnnotation link{page, Rectangle{0.0, 0.0, 100.0, 20.0, false}};
link.Action(NamedAction{PredefinedAction::LastPage});
link.Highlighting(HighlightingMode::Push);

page.Annotations().Add(link);

लोड पर एनोटेशन प्रकारों का पता लगाना

जब कोई दस्तावेज़ खोला जाता है, तो मौजूदा एनोटेशन प्रत्येक पृष्ठ की AnnotationCollection में पहले से ही भर दिए जाते हैं, और AnnotationType() यह पहचानता है कि प्रत्येक प्रविष्टि कौन सा विशिष्ट उपप्रकार दर्शाती है। यह कॉलिंग कोड को एन्यूम मान पर शाखा बनाने की अनुमति देता है बिना यह जाने कि किसी दिए गए PDF में कौन से एनोटेशन प्रकार शामिल हैं।

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/annotations/annotation_type.hpp>
#include <iostream>

using namespace Aspose::Pdf;
using namespace Aspose::Pdf::Annotations;

Document doc("mixed-annotations.pdf");
auto& annots = doc.Pages()[1].Annotations();

for (int i = 0; i < annots.Count(); ++i) {
    switch (annots[i].AnnotationType()) {
        case AnnotationType::Text:      std::cout << "Text note\n"; break;
        case AnnotationType::Link:      std::cout << "Link\n"; break;
        case AnnotationType::Circle:    std::cout << "Circle shape\n"; break;
        case AnnotationType::Square:    std::cout << "Square shape\n"; break;
        case AnnotationType::Highlight: std::cout << "Highlight\n"; break;
        case AnnotationType::Stamp:     std::cout << "Stamp\n"; break;
        default: break;
    }
}

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

MarkupAnnotation उन एनोटेशन का बेस है जो समीक्षक मेटाडेटा ले जाते हैं: Title() (लेखक), Subject(), फ़ॉर्मेटेड टिप्पणी पाठ के लिए RichText(), और पृष्ठ सामग्री के साथ मिश्रण के लिए Opacity()InReplyTo() और Popup() एक मार्कअप एनोटेशन को उस टिप्पणी धागे से जोड़ते हैं जिससे यह संबंधित है, और ClearState() / SetReviewState(state, userName) इसकी समीक्षा स्थिति को प्रबंधित करते हैं। HighlightAnnotation, UnderlineAnnotation, StrikeOutAnnotation, और SquigglyAnnotation टेक्स्ट के ऊपर स्थित मार्कअप उपप्रकार हैं; उनका साझा TextMarkupAnnotation बेस QuadPoints() जोड़ता है जिससे कवर किए गए चारकोणीय क्षेत्रों को परिभाषित किया जाता है और GetMarkedText() नीचे के टेक्स्ट को पढ़ता है।

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/annotations/markup_annotation.hpp>

using namespace Aspose::Pdf::Annotations;

for (int i = 0; i < annots.Count(); ++i) {
    if (auto* markup = dynamic_cast<MarkupAnnotation*>(&annots[i])) {
        markup->Title("QA Reviewer");
        markup->Subject("Layout issue");
        markup->Opacity(0.6);
    }
}

StampAnnotation के साथ स्टैम्प एनोटेशन

StampAnnotation पृष्ठ पर एक पूर्वनिर्धारित या कस्टम स्टैम्प रखता है। Icon() / Icon(value) एक StampIcon मान चुनता है — Approved, Draft, Confidential, Final, Expired, NotApproved, ForComment, TopSecret, आदि — और Image() / Image(value) बिल्ट-इन आइकन के बजाय कस्टम स्टैम्प रूप के लिए कच्चे इमेज बाइट्स प्रदान करता है।

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/annotations/stamp_annotation.hpp>

using namespace Aspose::Pdf::Annotations;

for (int i = 0; i < annots.Count(); ++i) {
    if (auto* stamp = dynamic_cast<StampAnnotation*>(&annots[i])) {
        stamp->Icon(StampIcon::Approved);
    }
}

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

लाइब्रेरी को CMake सबडायरेक्टरी के रूप में जोड़ें और aspose_pdf_foss टारगेट के विरुद्ध लिंक करें:

add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)

एक दस्तावेज़ खोलें, एक टेक्स्ट नोट जोड़ें, और एनोटेशन गिनती को पुनः पढ़ें:

#include <aspose/pdf/document.hpp>
#include <aspose/pdf/annotations/text_annotation.hpp>
#include <iostream>

using namespace Aspose::Pdf;
using namespace Aspose::Pdf::Annotations;

int main() {
    Document doc("input.pdf");

    TextAnnotation note{doc};
    note.Rect(Rectangle{100.0, 700.0, 200.0, 720.0, false});
    note.Contents("Reviewed by QA");
    note.Icon(TextIcon::Comment);

    doc.Pages()[1].Annotations().Add(note);
    doc.Save("annotated.pdf");

    std::cout << "Annotations on page 1: "
              << doc.Pages()[1].Annotations().Count() << "\n";
}

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

फ़ॉर्मेटएक्सटेंशनपढ़ेंलिखें
BMP.bmp
JPEG.jpg
TIFF.tiff
Text.txt
SVG.svg

फ़ॉर्मेट समर्थन दस्तावेज़ स्तर पर पृष्ठ रेंडरिंग और लोड विकल्पों पर लागू होता है; ये प्रविष्टियाँ पुष्टि किए गए निर्यात (BmpDevice, JpegDevice, TiffDevice, TextDevice) और आयात (SvgLoadOptions) पथों को दर्शाती हैं, न कि एनोटेशन-विशिष्ट सीरियलाइज़ेशन को।


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

Aspose.PDF FOSS for C++ MIT लाइसेंस के तहत जारी किया गया है। स्रोत कोड https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp पर उपलब्ध है, और लाइब्रेरी को वाणिज्यिक और ओपन-सोर्स परियोजनाओं में बिना लाइसेंस शुल्क के उपयोग किया जा सकता है।


शुरूआत

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