Úvod
PDF anotace pokrývají širokou škálu interaktivních a vizuálních prvků překrývajících obsah stránky: lepicí textové poznámky, hypertextové odkazy, zvýrazněný nebo přeškrtnutý text, geometrické tvary, tahy inkoustu, přílohy souborů a schvalovací razítka. Aspose.PDF FOSS pro C++ představuje každou z nich jako konkrétní podtřídu Annotation, takže kód, který prochází anotace stránky, může pracovat obecně s základní třídou a přitom dosáhnout na členy specifické pro podtyp— například Icon() u TextAnnotation nebo Action() u LinkAnnotation— podle potřeby.
Enum Annotations::AnnotationType v knihovně vyjmenovává podtypy, které rozpoznává: 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 a několik dalších. Každá hodnota mapuje na konkrétní třídu— CircleAnnotation, SquareAnnotation, PolygonAnnotation, PolylineAnnotation a LineAnnotation pro značky tvarů; FreeTextAnnotation a InkAnnotation pro volný text a kreslené tahy; FileAttachmentAnnotation, SoundAnnotation, MovieAnnotation, ScreenAnnotation a RichMediaAnnotation pro vložený obsah; a WidgetAnnotation pro vzhled polí AcroForm.
Tento příspěvek se zabývá základní API Annotation a AnnotationCollection, přidáváním textových poznámek a odkazů, detekcí typů anotací při načítání existujícího dokumentu a čtením nebo aktualizací metadat značek a razítek. Aspose.PDF FOSS pro C++ je knihovna C++20 bez runtime závislostí mimo standardní knihovnu; hlavičky jsou zahrnuty přímo ze složky aspose/pdf/annotations/ a knihovna se sestavuje jako CMake target.
Co je zahrnuto
Annotation a AnnotationCollection
Annotation je základní třída pro každý podtyp anotace. Poskytuje společné vlastnosti: Rect() / Rect(value) pro ohraničující obdélník anotace, Contents() pro související text, Name(), Color(), Flags() (bitová maska AnnotationFlags— Print, Hidden, Invisible, NoZoom, ReadOnly a další), Border(), Width() / Height(), AnnotationType() a PageIndex(). AnnotationCollection uchovává anotace na jediné stránce a je přístupná přes 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 také poskytuje Add(annotation), Add(annotation, considerRotation), Delete(index), Delete(annotation), Clear(), Remove(annotation), Contains(annotation) a IsReadOnly().
Textové poznámky s TextAnnotation
TextAnnotation představuje známý komentář ve formě lepicí poznámky. Kromě základních členů Annotation přidává Open() / Open(value) pro řízení, zda je poznámka zobrazena rozbalená, a Icon() / Icon(value) (hodnota TextIcon, např. Note, Comment, Key, Help nebo Check) pro výběr ikony.
#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");
Odkazy a akce s LinkAnnotation
LinkAnnotation připojuje klikací oblast k stránce. Je vytvořena z vlastnické Page a Rectangle, a její chování se nastavuje pomocí Action(value) — libovolná podtřída PdfAction, včetně NamedAction (předdefinovaná navigace jako PredefinedAction::LastPage), GoToAction, GoToURIAction nebo JavascriptAction. Destination() načítá cíl odkazu IAppointment, a Highlighting() / Highlighting(value) nastavuje HighlightingMode (None, Invert, Outline, Push, Toggle) aplikovanou při aktivaci odkazu.
#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);
Detekce typů anotací při načítání
Když je dokument otevřen, existující anotace jsou již naplněny v AnnotationCollection každé stránky a AnnotationType() identifikuje, který konkrétní podtyp každá položka představuje. To umožňuje volajícímu kódu rozvětvit se podle hodnoty výčtu, aniž by předem věděl, jaké typy anotací konkrétní PDF obsahuje.
#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;
}
}
Metadata značkovacích anotací
MarkupAnnotation je základ pro anotace, které nesou metadata recenzenta: Title() (autor), Subject(), RichText() pro formátovaný text komentáře a Opacity() pro míchání s obsahem stránky. InReplyTo() a Popup() spojují markup anotaci s vlákny komentářů, ke kterým patří, a ClearState() / SetReviewState(state, userName) spravují její stav recenze. HighlightAnnotation, UnderlineAnnotation, StrikeOutAnnotation a SquigglyAnnotation jsou podtypy markup umístěné nad textem; jejich společná základna TextMarkupAnnotation přidává QuadPoints() pro definování čtyřúhelníkových oblastí a GetMarkedText() pro načtení textu pod nimi.
#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);
}
}
Razítkové anotace pomocí StampAnnotation
StampAnnotation umisťuje předdefinovaný nebo vlastní razítko na stránku. Icon() / Icon(value) vybírá hodnotu StampIcon — Approved, Draft, Confidential, Final, Expired, NotApproved, ForComment, TopSecret a další — a Image() / Image(value) poskytuje surové bajty obrázku pro vlastní vzhled razítka místo vestavěné ikony.
#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);
}
}
Rychlý start
Přidejte knihovnu jako podadresář v CMake a propojte ji s cílem aspose_pdf_foss:
add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)
Otevřete dokument, přidejte textovou poznámku a načtěte zpět počet anotací:
#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";
}
Podporované formáty
| Formát | Rozšíření | Číst | Zapsat |
|---|---|---|---|
| BMP | .bmp | — | ✓ |
| JPEG | .jpg | — | ✓ |
| TIFF | .tiff | — | ✓ |
| Text | .txt | — | ✓ |
| SVG | .svg | ✓ | — |
Podpora formátů se vztahuje na vykreslování stránek a možnosti načítání na úrovni dokumentu; tyto položky odrážejí potvrzené cesty exportu (BmpDevice, JpegDevice, TiffDevice, TextDevice) a importu (SvgLoadOptions) spíše než serializaci specifickou pro anotace.
Open Source a licencování
Aspose.PDF FOSS pro C++ je vydán pod licencí MIT. Zdrojový kód je k dispozici na https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp a knihovna může být používána v komerčních i open-source projektech bez licenčních poplatků.