Bevezetés
A PDF-annotációk széles körű interaktív és vizuális elemeket fednek le, amelyek az oldal tartalma fölött helyezkednek el: ragadós szövegjegyzetek, hiperhivatkozások, kiemelt vagy áthúzott szöveg, geometriai alakzatok, tinta vonalak, fájlcsatolások és jóváhagyási pecsétek. Aspose.PDF FOSS C++-hoz minden egyes elemet konkrét alosztályként ábrázol a Annotation alapján, így egy oldal annotációit bejáró kód általánosan a bázisosztályon dolgozhat, miközben a szubtípus-specifikus tagokhoz is hozzáférhet – például Icon() egy TextAnnotation-n vagy Action() egy LinkAnnotation-n – ha szükséges.
A könyvtár Annotations::AnnotationType enumja felsorolja az általa felismert altípusokat: 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, és több más. Minden érték konkrét osztályra mutat — CircleAnnotation, SquareAnnotation, PolygonAnnotation, PolylineAnnotation és LineAnnotation alakzat-jelöléshez; FreeTextAnnotation és InkAnnotation szabad szöveghez és rajzolt vonalakhoz; FileAttachmentAnnotation, SoundAnnotation, MovieAnnotation, ScreenAnnotation és RichMediaAnnotation beágyazott tartalomhoz; valamint WidgetAnnotation a AcroForm mezőmegjelenítésekhez.
Ez a bejegyzés lefedi a Annotation és AnnotationCollection alap API-t, szöveges jegyzetek és hivatkozások hozzáadását, az annotációtípusok felismerését meglévő dokumentum betöltésekor, valamint a jelölés metaadatainak és pecséteknek a olvasását vagy frissítését. Aspose.PDF FOSS C++-hoz egy C++20 könyvtár, amelynek nincs futási időbeli függősége a szabványos könyvtáron kívül; a fejlécek közvetlenül a aspose/pdf/annotations/ könyvtárból kerülnek beillesztésre, és a könyvtár CMake célként épül.
Mi van benne
Annotáció és AnnotationCollection
Annotation minden annotáció altípus alaposztálya. Közös tulajdonságokat tesz elérhetővé: Rect() / Rect(value) az annotáció határoló téglalapjához, Contents() a kapcsolódó szöveghez, Name(), Color(), Flags() (egy AnnotationFlags bitmaszk – Print, Hidden, Invisible, NoZoom, ReadOnly és egyebek), Border(), Width() / Height(), AnnotationType(), és PageIndex(). AnnotationCollection egyetlen oldal annotációit tárolja, és a Page.Annotations() útján érhető el.
#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 továbbá elérhetővé teszi a(z) Add(annotation), Add(annotation, considerRotation), Delete(index), Delete(annotation), Clear(), Remove(annotation), Contains(annotation) és IsReadOnly() elemeket.
Szöveges jegyzetek TextAnnotation segítségével
TextAnnotation a jól ismert ragasztójegyzet kommentet jelenti. Az alap Annotation tagokon túl hozzáadja a Open() / Open(value) lehetőséget, hogy szabályozza, a jegyzet kibontva jelenik-e meg, valamint a Icon() / Icon(value) (egy TextIcon érték, például Note, Comment, Key, Help vagy Check) az ikon jelölő kiválasztásához.
#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");
Hivatkozások és műveletek LinkAnnotation segítségével
LinkAnnotation kattintható területet csatol egy oldalhoz. A tulajdonos Page és egy Rectangle alapján épül fel, és viselkedését a Action(value) határozza meg — bármely PdfAction alosztály, beleértve a NamedAction (előre definiált navigáció, például PredefinedAction::LastPage), GoToAction, GoToURIAction vagy JavascriptAction. A Destination() beolvassa a hivatkozás IAppointment célját, és a Highlighting() / Highlighting(value) beállítja a HighlightingMode (None, Invert, Outline, Push, Toggle) alkalmazását, amikor a hivatkozás aktiválódik.
#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);
Annotációtípusok felismerése betöltéskor
Amikor egy dokumentumot megnyitnak, a meglévő annotációk már fel vannak töltve minden oldal AnnotationCollection részébe, és a AnnotationType() azonosítja, hogy az egyes bejegyzések milyen konkrét al típust képviselnek. Ez lehetővé teszi a hívó kód számára, hogy az enum érték alapján ágaztasson, anélkül, hogy előre tudná, milyen annotációtípusok szerepelnek az adott PDF-ben.
#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;
}
}
Jelölő annotáció metaadatai
MarkupAnnotation az az alapja az olyan annotációknak, amelyek felülvizsgáló metaadatokat tartalmaznak: Title() (a szerző), Subject(), RichText() a formázott megjegyzés szövegéhez, és Opacity() az oldal tartalmával való keveréshez. InReplyTo() és Popup() egy jelölő annotációt kapcsolnak a hozzátartozó megjegyzés szálhoz, és ClearState() / SetReviewState(state, userName) kezelik a felülvizsgálati állapotát. HighlightAnnotation, UnderlineAnnotation, StrikeOutAnnotation és SquigglyAnnotation jelölő altípusok, amelyek szöveg felett helyezkednek el; közös TextMarkupAnnotation alapjuk QuadPoints()-t ad hozzá a lefedett négyszögletes területek meghatározásához, és GetMarkedText()-t a szöveg visszaolvasásához.
#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);
}
}
Pecsét annotációk StampAnnotation segítségével
StampAnnotation egy előre definiált vagy egyedi pecsétet helyez el egy oldalon. Icon() / Icon(value) egy StampIcon értéket választ — Approved, Draft, Confidential, Final, Expired, NotApproved, ForComment, TopSecret, és egyebek — és Image() / Image(value) nyers képadatokat biztosít egy egyedi pecsét megjelenéséhez a beépített ikon helyett.
#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);
}
}
Gyors indítás
Adja hozzá a könyvtárat CMake alkönyvtárként, és kapcsolja a aspose_pdf_foss célhoz:
add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)
Nyisson meg egy dokumentumot, adjon hozzá egy szöveges megjegyzést, és olvassa vissza az annotációk számát:
#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";
}
Támogatott formátumok
| Formátum | Kiterjesztés | Olvasás | Írás |
|---|---|---|---|
| BMP | .bmp | — | ✓ |
| JPEG | .jpg | — | ✓ |
| TIFF | .tiff | — | ✓ |
| Text | .txt | — | ✓ |
| SVG | .svg | ✓ | — |
A formátumtámogatás az oldal renderelésére és a dokumentumszintű betöltési beállításokra vonatkozik; ezek a bejegyzések a megerősített export (BmpDevice, JpegDevice, TiffDevice, TextDevice) és import (SvgLoadOptions) útvonalakat tükrözik, nem pedig az annotáció-specifikus sorosítást.
Nyílt forráskód és licencelés
Aspose.PDF FOSS for C++ a MIT licenc alatt kerül kiadásra. A forráskód elérhető itt: https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp, és a könyvtár kereskedelmi és nyílt forráskódú projektekben is használható licencdíjak nélkül.