Giriş

PDF ek açıklamaları, sayfa içeriğinin üzerinde katmanlanan geniş bir etkileşimli ve görsel öğe yelpazesini kapsar: yapışkan metin notları, köprüler, vurgulanmış veya üstü çizili metin, geometrik şekiller, mürekkep darbeleri, dosya ekleri ve onay damgaları. Aspose.PDF FOSS for C++ bu öğelerin her birini Annotation sınıfının somut bir alt sınıfı olarak temsil eder, böylece bir sayfanın ek açıklamalarını dolaşan kod, temel sınıfa karşı genel olarak çalışabilir ve gerektiğinde alt-tür özgü üyelerine—örneğin bir TextAnnotation üzerindeki Icon() ya da bir LinkAnnotation üzerindeki Action()—ulaşabilir.

Kütüphanenin Annotations::AnnotationType enum’u tanıdığı alt türleri listeler: 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 ve birkaç diğeri. Her değer, şekil işaretlemesi için CircleAnnotation, SquareAnnotation, PolygonAnnotation, PolylineAnnotation ve LineAnnotation; serbest metin ve çizilmiş darbeler için FreeTextAnnotation ve InkAnnotation; gömülü içerik için FileAttachmentAnnotation, SoundAnnotation, MovieAnnotation, ScreenAnnotation ve RichMediaAnnotation; ve AcroForm alan görünümleri için WidgetAnnotation gibi somut bir sınıfa eşlenir.

Bu gönderi Annotation ve AnnotationCollection temel API öğelerini kapsar, metin notları ve bağlantılar ekler, mevcut bir belge yüklenirken ek açıklama türlerini algılar ve işaretleme meta verilerini ve damgaları okur veya günceller. Aspose.PDF FOSS for C++ bir C++20 kütüphanesidir ve standart kütüphanenin ötesinde çalışma zamanı bağımlılığı yoktur; başlık dosyaları doğrudan aspose/pdf/annotations/ dizininden eklenir ve kütüphane bir CMake hedefi olarak derlenir.


Neler Dahil

Annotation ve AnnotationCollection

Annotation, her ek açıklama alt türü için temel sınıftır. Şu ortak özellikleri sunar: Rect() / Rect(value) ek açıklamanın sınırlayıcı dikdörtgeni için, Contents() ilişkili metin için, Name(), Color(), Flags() (bir AnnotationFlags bit maskesi — Print, Hidden, Invisible, NoZoom, ReadOnly ve diğerleri), Border(), Width() / Height(), AnnotationType() ve PageIndex(). AnnotationCollection tek bir sayfadaki ek açıklamaları tutar ve Page.Annotations() aracılığıyla erişilir.

#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 ayrıca Add(annotation), Add(annotation, considerRotation), Delete(index), Delete(annotation), Clear(), Remove(annotation), Contains(annotation) ve IsReadOnly() yöntemlerini sunar.

TextAnnotation ile Metin Notları

TextAnnotation, tanıdık yapışkan not yorumunu temsil eder. Temel Annotation üyelerinin ötesinde, notun genişletilmiş olarak görünmesini kontrol etmek için Open() / Open(value) ve simge glifini seçmek için Icon() / Icon(value) (örneğin Note, Comment, Key, Help veya Check gibi bir TextIcon değeri) ekler.

#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 ile Bağlantılar ve Eylemler

LinkAnnotation bir sayfaya tıklanabilir bir bölge ekler. Sahibi Page ve bir Rectangle üzerinden oluşturulur ve davranışı Action(value) ile ayarlanır — herhangi bir PdfAction alt sınıfı, NamedAction (örneğin PredefinedAction::LastPage gibi önceden tanımlı gezinme), GoToAction, GoToURIAction veya JavascriptAction dahil. Destination() bağlantının IAppointment hedefini okur ve Highlighting() / Highlighting(value) bağlantı etkinleştirildiğinde uygulanan HighlightingMode (None, Invert, Outline, Push, Toggle) ayarlar.

#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);

Yükleme Sırasında Anotasyon Türlerini Algılama

Bir belge açıldığında, mevcut ek açıklamalar her sayfanın AnnotationCollection içinde zaten doldurulmuş olur ve AnnotationType() her girişin temsil ettiği somut alt türü belirler. Bu, çağıran kodun enum değerine göre dallanmasını sağlar; böylece önceden bir PDF’in hangi ek açıklama türlerini içerdiğini bilmeye gerek kalmaz.

#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;
    }
}

İşaretleme Anotasyonu Üst Verileri

MarkupAnnotation inceleyen meta verilerini taşıyan ek açıklamaların temel sınıfıdır: Title() (yazar), Subject(), biçimlendirilmiş yorum metni için RichText() ve sayfa içeriğiyle karışım için Opacity(). InReplyTo() ve Popup() bir markup ek açıklamasını ait olduğu yorum dizisine bağlar ve ClearState() / SetReviewState(state, userName) inceleme durumunu yönetir. HighlightAnnotation, UnderlineAnnotation, StrikeOutAnnotation ve SquigglyAnnotation metin üzerinde konumlandırılan markup alt türleridir; ortak TextMarkupAnnotation temeli, kapsadığı dörtgen bölgeleri tanımlamak için QuadPoints() ve altındaki metni geri okumak için GetMarkedText() ekler.

#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);
    }
}

Damga Açıklamaları StampAnnotation ile

StampAnnotation bir sayfaya önceden tanımlı ya da özel bir damga yerleştirir. Icon() / Icon(value) bir StampIcon değerini seçer — Approved, Draft, Confidential, Final, Expired, NotApproved, ForComment, TopSecret ve diğerleri — ve Image() / Image(value) yerleşik bir simge yerine özel damga görünümü için ham görüntü baytları sağlar.

#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);
    }
}

Hızlı Başlangıç

Kütüphaneyi bir CMake alt dizini olarak ekleyin ve aspose_pdf_foss hedefine bağlayın:

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

Bir belge açın, bir metin notu ekleyin ve ek açıklama sayısını geri okuyun:

#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";
}

Desteklenen Formatlar

BiçimUzantıOkuYaz
BMP.bmp
JPEG.jpg
TIFF.tiff
Text.txt
SVG.svg

Biçim desteği, belge seviyesindeki sayfa render’ı ve yükleme seçeneklerine uygulanır; bu girişler, açıklama-özel serileştirmeden ziyade doğrulanmış dışa aktarım (BmpDevice, JpegDevice, TiffDevice, TextDevice) ve içe aktarım (SvgLoadOptions) yollarını yansıtır.


Açık Kaynak & Lisanslama

Aspose.PDF FOSS for C++ MIT lisansı altında yayınlanmıştır. Kaynak kodu https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp adresinde mevcuttur ve kütüphane, lisans ücreti almadan ticari ve açık kaynak projelerinde kullanılabilir.


Başlarken

İlgili Kaynaklar