PDF-annotációkkal való munka

PDF-annotációkkal való munka

PDF-annotációk kezelése

PDF annotációk a Aspose.PDF FOSS C++-hoz a Annotation alaposztály és konkrét alosztályai (TextAnnotation, LinkAnnotation, HighlightAnnotation, FreeTextAnnotation, CircleAnnotation, WatermarkAnnotation, WidgetAnnotation, és egyebek) által vannak reprezentálva. Minden oldal a Page.Annotations() segítségével teszi elérhetővé az annotációkat, amely egy AnnotationCollection-t ad vissza. Ez az útmutató a következőket tárgyalja: annotációk hozzáadása egy oldalhoz, azok iterálása és eltávolítása, annotációk olvasása meglévő dokumentumból, linkműveletek csatolása, megjelenés testreszabása és az annotációk laposítása.


Annotációk hozzáadása egy oldalhoz

Konkrét annotációpéldányt hoz létre, Rectangle segítségével pozicionálja, és a AnnotationCollection.Add() használatával adja hozzá az oldal gyűjteményéhez. TextAnnotation egy ragasztójegy-stílusú megjegyzést jelöl, amely az oldal egy pontjához van rögzítve:

#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) lekérdezi és állítja be a megjegyzés szövegét, míg Annotation.Rect() / Rect(value) pozicionálja az annotációt az oldalon.


Annotációk iterálása és eltávolítása

AnnotationCollection támogatja a számlálást, indexelt hozzáférést, tagságvizsgálatot, valamint az eltávolítást érték vagy index alapján:

#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) és Remove(annotation) egy adott annotációs hivatkozáson működnek; Delete(index) pozíció alapján távolítja el, és Delete(annotation) egy konkrét annotációt távolít el anélkül, hogy szükség lenne az indexére. IsReadOnly() jelzi, hogy a gyűjtemény módosítható-e.


Annotációk olvasása meglévő dokumentumból

Amikor egy dokumentum betöltődik, az annotációi már fel vannak töltve, és bármit hozzáadni nélkül megvizsgálhatók. Annotation.AnnotationType() jelenti az altípust (AnnotationType::Text, AnnotationType::Highlight, AnnotationType::Link, AnnotationType::FreeText, AnnotationType::FileAttachment, AnnotationType::Watermark és mások):

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

Az annotációk sorrendje és altípusa megmarad egy mentés/újratöltés körúton, így a Annotations()-ba indexelő kód a dokumentum betöltése után ugyanazt a sorozatot látja, ami a fájl írásakor jelen volt.


Link annotációk és műveletek

LinkAnnotation egy kattintható területet csatol egy oldalhoz, és aktiváláskor egy PdfAction-t indít el. NamedAction egy előre definiált navigációs célpontra ugrik, JavascriptAction egy ECMAScript karakterláncot futtat, és SubmitFormAction űrlap adatokat küld el egy URL-re egy FileSpecification segítségével:

#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) bármely PdfAction altípust elfogadja, és belsőleg klónozza, így az annotáció saját másolatot tart a műveletről. LinkAnnotation.Destination() / Destination(value) egy explicit navigációs célpontot állít be a művelet helyett, és Highlighting() / Highlighting(value) szabályozzák a link kattintásakor megjelenő vizuális visszajelzést.


Annotáció megjelenése: keret, jelzők és szín

Minden Annotation egy Border-t, egy AnnotationFlags bitmezőt, valamint egy Color-t tesz közzé, amely a megjelenésének rendereléséhez használatos:

#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() elfogadja a(z) BorderStyle::Solid, Dashed, Beveled, Inset vagy Underline értékeket. Border.Effect() emellett támogat egy BorderEffect::Cloudy körvonalat, amelynek EffectIntensity() szabályozza, mennyire hangsúlyos. A AnnotationFlags egy bitmező – kombinálj olyan értékeket, mint a(z) Print, NoZoom, ReadOnly és LockedContents, hogy szabályozd, hogyan viselkedik a megjegyzés a megjelenítőben anélkül, hogy megváltoztatná a látható tartalmát.


Megjegyzések laposítása

Egyetlen megjegyzés laposítható — egyesíthető az oldal tartalmával és nem interaktívvá tehető — a Annotation.Flatten() közvetlen meghívásával:

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

Dokumentum-szintű megjegyzés műveletekhez a PdfAnnotationEditor a API során használt közös Facade mintát követi: köss egy forrásdokumentumot a BindPdf() segítségével, alkalmazz egy vagy több megjegyzés műveletet, majd írd ki az eredményt a Save() segítségével:

#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() eltávolítja az összes megjegyzést a kötött dokumentumból; a DeleteAnnotations(annotType) a törlést egyetlen AnnotationType-ra korlátozza. A ImportAnnotationsFromXfdf(xfdfFile) és a ImportAnnotationsFromFdf(fdfFile) betöltik egy másik PDF-megjelenítőből exportált megjegyzésadatokat.


Tippek és bevált gyakorlatok

  • Mindig add hozzá az újonnan létrehozott megjegyzést a Page.Annotations()-hoz, mielőtt meghívnád a Document.Save()-t — egy megjegyzés, amelyet soha nem adnak hozzá egy gyűjteményhez, nem kerül kiírásra a kimeneti fájlba.
  • Használja a AnnotationCollection.Contains(annotation)-t, mielőtt meghívná a Remove()-et, ha nem biztos benne, hogy a megjegyzés még jelen van; a Remove() false-t ad vissza ahelyett, hogy kivételt dobna, ha a megjegyzés hiányzik.
  • Ellenőrizze a Annotation.AnnotationType()-t, mielőtt átkonvertálná vagy elágazna az al-típus viselkedésén, amikor egy megbízhatatlan vagy harmadik féltől származó PDF-fájlból betöltött megjegyzéseken iterál.
  • A megjegyzéseket laposítsa le a Annotation.Flatten() segítségével (vagy a PdfAnnotationEditor.FlatteningAnnotations() segítségével az egész dokumentumra) a dokumentum archiválása előtt, hogy a más eszközökön dolgozó ellenőrzők ugyanazt a megjelenést lássák, amit Ön szerkesztett.
  • A AnnotationFlags egy bitmező — kombinálja a jelzőket az enum alapul szolgáló egész értékeivel, ahelyett, hogy azt feltételezné, egyszerre csak egy jelző lehet aktív.

Gyakori problémák

ProblémaOkJavítás
A megjegyzés nem látható mentés utánA megjegyzés létre lett hozva, de soha nem lett hozzáadva a Page.Annotations()Hívja meg a page.Annotations().Add(annotation) a doc.Save() előtt
Remove() visszaadja falseA megadott megjegyzésreferencia nem egyezik a gyűjteményben jelenleg lévő bejegyzésselElőször használja a Contains() értéket, vagy távolítsa el az index alapján a Delete(index) segítségével
Hibás annotációtípus az újratöltés utánA kód feltételezett egy konkrét alosztályt anélkül, hogy ellenőrizte volna a AnnotationType() értéketÁgazás a Annotation.AnnotationType() alapján, mielőtt az objektumot konkrét alosztálynak tekintené
A link művelet úgy tűnik, hogy beállítatlan marad a hozzárendelés utánEgy helyi PdfAction kilépett a hatókörből; a LinkAnnotation.Action() a annotáció klónozott példányát adja vissza, nem az eredeti objektumotOlvassa vissza a műveletet a link.Action() segítségével, ahelyett, hogy az eredeti helyi változónál tartaná
A PdfAnnotationEditor műveletnek nincs hatásaBindPdf() nem lett meghívva, vagy egy nem létező útvonallal lett meghívvaEllenőrizze, hogy a BindPdf() sikeres, mielőtt meghívná a FlatteningAnnotations() vagy a DeleteAnnotations() parancsot

FAQ

Hogyan adhatok megjegyzés-szerű annotációt egy PDF-oldalhoz?

Hozzon létre egy TextAnnotation objektumot a cél Document segítségével, állítsa be a Rect() és a Contents() értékeket, majd mentés előtt adja hozzá a page.Annotations().

Hogyan tudom megtudni, hogy milyen típusú annotációról van szó?

Hívja meg a(z) Annotation.AnnotationType() függvényt, amely egy AnnotationType enum értéket ad vissza, például Text, Link, Highlight, FreeText, FileAttachment vagy Watermark.

Egy annotáció tartalmazhat több mint egy jelzőt?

Igen. A(z) AnnotationFlags egy bitmező (Default, Invisible, Hidden, Print, NoZoom, ReadOnly, LockedContents és egyebek), így több jelző kombinálható egyetlen annotáción.

Mi a különbség egy annotáció laposítása és egy dokumentum laposítása között?

Annotation.Flatten() egyetlen annotációt egyesíti az adott oldal tartalmával. PdfAnnotationEditor.FlatteningAnnotations() (opcionálisan az oldaltartomány és AnnotationType szerint, a start, end és annotType elfogadására képes túlterhelésen keresztül) egyetlen hívással laposítja az egész kötött dokumentumot.

Hogyan távolíthatok el egy adott típusú összes annotációt egy dokumentumból?

Kösse össze a dokumentumot a(z) PdfAnnotationEditor.BindPdf() segítségével, hívja meg a(z) DeleteAnnotations(annotType) függvényt a cél AnnotationType paraméterrel, majd Save() az eredményt.


API Reference összefoglaló

Osztály/MódszerLeírás
AnnotationAbsztrakt alaposztály minden PDF-annotáció alttípushoz
Annotation.Rect() / Rect(value)Az annotáció határoló téglalapjának lekérdezése vagy beállítása
Annotation.Contents() / Contents(value)A megjegyzés szövegtartalmát adja vissza vagy állítja be.
Annotation.AnnotationType()Visszaadja a AnnotationType enum értékét ehhez a megjegyzéshez
Annotation.Flags() / Flags(value)A AnnotationFlags bitmező lekérése vagy beállítása
Annotation.Border() / Border(value)Az annotáció Border lekérése vagy beállítása
Annotation.Color() / Color(value)A jelölés megjelenítésének lekérése vagy beállítása Color
Annotation.Flatten()Egyesíti ezt a megjegyzést az oldal tartalmába, így nem interaktív
AnnotationCollectionRendezett gyűjtemény a lapon lévő megjegyzésekről, amelyet a Page.Annotations() ad vissza
AnnotationCollection.Add(annotation) / Add(annotation, considerRotation)Hozzáad egy annotációt a gyűjteményhez
AnnotationCollection.Count()Visszaadja a gyűjteményben lévő annotációk számát
AnnotationCollection.Contains(annotation)Jelzi, hogy a gyűjtemény tartalmazza-e a megadott annotációt
AnnotationCollection.Remove(annotation)Eltávolít egy konkrét annotációt; visszaadja false ha nem találja
AnnotationCollection.Delete(index) / Delete(annotation)Eltávolít egy annotációt index vagy hivatkozás alapján
AnnotationCollection.Clear()Eltávolítja az összes annotációt a gyűjteményből
TextAnnotationRagadós cetli stílusú annotáció Open() és Icon() (TextIcon)
LinkAnnotationKattintható terület, amely PdfAction-t küld Action() / Action(value) segítségével
LinkAnnotation.Destination() / Destination(value)A kifejezett navigációs cél lekérése vagy beállítása
HighlightAnnotationMegjelöli a szövegszakaszt egy kiemelő színnel
FreeTextAnnotationMegjelenít egy szöveges feliratot; a Justification(), DefaultAppearanceObject(), Callout() segítségével konfigurálható
CircleAnnotationEllipszist rajzol a megjegyzés téglalapján belül
WatermarkAnnotationÁtfedés annotáció egy Opacity() / Opacity(value) accessorral
WidgetAnnotationŰrlapmező megjelenés annotáció ReadOnly(), Required(), Exportable(), DefaultAppearance() használatával
NamedActionElőre meghatározott navigációs művelet (PredefinedAction enum) csatolható egy LinkAnnotation
JavascriptActionECMAScript karakterláncot futtat a Script() / GetECMAScriptString() segítségével
SubmitFormActionŰrlapadatokat küld egy FileSpecification URL-re a Url() / Url(value) segítségével
BorderAnnotáció keret Width(), Style() (BorderStyle), Effect() (BorderEffect)
PdfAnnotationEditorFelület a dokumentum-szintű annotáció importálásához, módosításhoz, laposításhoz és törléshez
PdfAnnotationEditor.FlatteningAnnotations()Laposítja az annotációkat a kötött dokumentumban
PdfAnnotationEditor.DeleteAnnotations(annotType)Törli az adott AnnotationType összes annotációját
PdfAnnotationEditor.ImportAnnotationsFromXfdf(xfdfFile)Annotációkat importál egy XFDF fájlból

Lásd még:

 Magyar