Annotasjoner og skjemaer

Annotasjoner og skjemaer

Annotasjoner og skjemaer

Aspose.PDF FOSS for .NET gir deg full lese-/skriveadgang til PDF-annotasjoner
og interaktive AcroForm-felt. Hovedinngangspunktet for annotasjoner er
Page.Annotations (en AnnotationCollection), mens skjemafeltene nås
gjennom Document.Form. Begge delsystemene fungerer helt i minnet og krever ingen
lisensnøkkel.


Legge til annotasjoner

AnnotationCollection eksponerer typede hjelpe‑metoder for hver standard annotasjonstype. Hver metode godtar en Rectangle som definerer annotasjonsposisjonen på siden pluss type‑spesifikke parametere.

using var doc = Document.Open(pdfBytes);
var page = doc.Pages[1];

// Text (sticky-note) annotation
page.Annotations.AddTextAnnotation(
    new Rectangle(72, 720, 200, 740),
    contents: "Review this paragraph",
    title: "Editor",
    open: true);

// Highlight annotation
page.Annotations.AddHighlightAnnotation(
    new Rectangle(72, 680, 300, 700),
    quadPoints: null,
    color: new double[] { 1, 1, 0 });

// Free-text annotation (rendered directly on the page)
page.Annotations.AddFreeTextAnnotation(
    new Rectangle(72, 640, 350, 660),
    contents: "Inline note",
    fontName: "Helvetica",
    fontSize: 10,
    color: new double[] { 0, 0, 0 });

using var ms = new MemoryStream();
doc.Save(ms);

Lenkeannotasjoner og handlinger

Lenker kombinerer et klikkbart rektangel med en PdfAction. Biblioteket støtter
URI, GoTo, JavaScript, Named, og Launch‑handlinger.

using var doc = Document.Open(pdfBytes);
var page = doc.Pages[1];

// URI link
var uriAction = PdfAction.CreateUri("https://aspose.com");
page.Annotations.AddLinkAnnotation(
    new Rectangle(50, 700, 200, 720), uriAction);

// GoTo link (jump to page 3)
page.Annotations.AddLinkAnnotation(
    new Rectangle(50, 660, 200, 680),
    destinationPage: 3,
    destRect: new Rectangle(0, 0, 612, 792));

// JavaScript link
var jsAction = PdfAction.CreateJavaScript("app.alert('Hello');");
page.Annotations.AddLinkAnnotation(
    new Rectangle(50, 620, 200, 640), jsAction);

doc.Save("links.pdf");

For å lese en lenke tilbake etter å ha åpnet en lagret PDF, kast annotasjonen til LinkAnnotation og inspiser dens Uri‑egenskap eller løse opp handlingsordboken via PdfAction.Create.


Merking og form-annotasjoner

Markup-annotasjoner (utheving, understrekning, gjennomstreking) merker eksisterende tekst. Form-annotasjoner (firkant, sirkel, linje, blekk) tegner geometri på siden.

var page = doc.Pages[1];

// Underline
page.Annotations.AddUnderlineAnnotation(
    new Rectangle(72, 600, 300, 620),
    quadPoints: null,
    color: new double[] { 1, 0, 0 });

// Square
page.Annotations.AddSquareAnnotation(
    new Rectangle(72, 540, 200, 580),
    borderColor: new double[] { 0, 0, 1 },
    fillColor: null,
    lineWidth: 1.5);

// Line
page.Annotations.AddLineAnnotation(
    new Rectangle(72, 500, 300, 520),
    x1: 72, y1: 510, x2: 300, y2: 510,
    color: new double[] { 0, 0.5, 0 },
    lineWidth: 2);

// Ink (freehand)
page.Annotations.AddInkAnnotation(
    new Rectangle(72, 440, 200, 480),
    inkPaths: new[] { new double[] { 80, 450, 120, 470, 160, 450 } },
    color: new double[] { 0.5, 0, 0.5 },
    lineWidth: 1);

Stempel-annotasjoner

Stempel‑annotasjoner legger et bilde eller et forhåndsdefinert ikon over på en side.

var stamp = new StampAnnotation(doc);
// Configure stamp properties, then add to page
page.Annotations.Add(stamp);

Flating av annotasjoner

Kall Flatten() på en hvilken som helst annotasjon for å brenne dens visuelle utseende inn i sideinnholdstrømmen og fjerne den fra den interaktive annotasjonslisten.

foreach (var annot in doc.Pages[1].Annotations)
{
    annot.Flatten();
}

Visitor-mønsteret med AnnotationSelector

AnnotationSelector implementerer besøksmønsteret slik at du kan filtrere annotasjoner etter type uten manuell casting.

var selector = new AnnotationSelector();
doc.Pages[1].Accept(selector);

// selector.Selected now contains all annotations on page 1
foreach (var annot in selector.Selected)
{
    // Process each annotation by type
}

Send en typet annotasjonsinstans til konstruktøren for å filtrere kun for den typen:

var linkFilter = new AnnotationSelector(new LinkAnnotation(page, Rectangle.Empty));
page.Accept(linkFilter);
// linkFilter.Selected contains only LinkAnnotation instances

Interaktive skjemafelter

Få tilgang til AcroForm-felt gjennom Document.Form. Klassen Form eksponerer feltnivå les/skriv-operasjoner og støtter JSON-eksport.

using var doc = Document.Open(pdfBytes);

// Enumerate all fields
foreach (var field in doc.Form.Fields)
{
    Console.WriteLine($"{field.FullName}: {field.Value}");
}

Feltunderklasser inkluderer TextBoxField, CheckboxField, RadioButtonField, ComboBoxField, ListBoxField, ChoiceField og SignatureField.


Eksportering av skjemadata til JSON

WidgetAnnotation gir ExportToJson overbelastninger for serialisering av feltdata til en strøm eller filsti. En valgfri ExportFieldsToJsonOptions-parameter styrer formatering av utdata.

using var doc = Document.Open(pdfBytes);
var widget = (WidgetAnnotation)doc.Pages[1].Annotations[1];

using var jsonStream = new MemoryStream();
widget.ExportToJson(jsonStream);

Tips og beste praksis

  • Angi alltid eksplisitte Rectangle‑koordinater i PDF‑brukerromsenheter (1/72 tomme).
  • Bruk AddLinkAnnotation med en PdfAction for maksimal fleksibilitet — URI, GoTo, JavaScript og navngitte handlinger støttes alle.
  • Kall Flatten() før du distribuerer en PDF hvis du vil at merknader skal vises i ikke‑interaktive visere.
  • Få tilgang til skjemafelter via Document.Form.Fields i stedet for å iterere side‑merknader — skjemasamlingen håndterer gruppering av felter på tvers av sider.
  • Lagre og åpne dokumentet på nytt for å verifisere merknads‑rundtur‑nøyaktighet, spesielt for egendefinerte handlinger.

Vanlige problemer

ProblemÅrsakLøsning
Annotering ikke synlig etter lagringRektangel har null areal eller er utenfor sidens grenserBekreft at koordinatene ligger innenfor siden MediaBox
LinkAnnotation.Uri returnerer nullLenken bruker en GoTo- eller JavaScript-handling, ikke en URI-handlingLøs opp handlingsordboken via PdfAction.Create og sjekk ActionType
Skjemafeltverdi er en tom strengFeltet finnes, men har ingen /V-oppføringSjekk at field.Value ikke er null før behandling
Flatten() kasterAnnotering har ingen /P (side)-referanseSørg for at annoteringen ble lagt til via Page.Annotations

OSS

Hvordan legger jeg til en hyperkobling på en PDF-side?

Bruk page.Annotations.AddLinkAnnotation(rect, PdfAction.CreateUri(url)) til å opprette en klikkbar URI‑lenke i det angitte rektangelet.

Kan jeg lese verdier fra skjemafelter i en eksisterende PDF?

Ja. Åpne dokumentet med Document.Open, deretter iterer Document.Form.Fields og les Value‑egenskapen på hver Field.

Hvilke annotasjonstyper støtter biblioteket?

Biblioteket støtter tekst, fri‑tekst, lenke, utheving, understrekning, gjennomstreking, firkant, sirkel, linje, blekk, stempel, markør, filvedlegg, lyd, polygon, polylinje, widget, vannmerke og 3D‑annotasjoner. Alle typer er tilgjengelige via AnnotationCollection hjelpe‑metoder eller direkte konstruksjon.

Hvordan filtrerer jeg annotasjoner etter type?

Bruk AnnotationSelector med en typet malannotasjon. Kall page.Accept(selector) og inspiser selector.Selected for matchende annotasjoner.

Kan jeg flate ut kun spesifikke annotasjoner?

Ja. Kall Flatten() på individuelle Annotation‑instanser i stedet for å iterere gjennom hele samlingen.


API-referansesammendrag

Class / MethodDescription
AnnotationCollectionTypet samling på hver Page; gir Add* hjelpere for alle annotasjonstyper
AnnotationCollection.AddTextAnnotationLegg til en klistrelapp-annotasjon
AnnotationCollection.AddLinkAnnotationLegg til en lenke med URI, sidemål eller egendefinert handling
AnnotationCollection.AddHighlightAnnotationLegg til en tekstmarkering-annotasjon
AnnotationCollection.AddInkAnnotationLegg til en frihåndstegnings-annotasjon
AnnotationCollection.AddSquareAnnotationLegg til en rektangelform-annotasjon
AnnotationCollection.AddCircleAnnotationLegg til en ellipseform-annotasjon
AnnotationCollection.AddLineAnnotationLegg til en linje-annotasjon
Annotation.FlattenBrenn annotasjonsutseende inn i sideinnholdet
Annotation.AcceptSend til typet AnnotationSelector.Visit overbelastning
AnnotationSelectorBesøker som samler annotasjoner etter type
LinkAnnotationAnnotasjonsunderklasse som bærer en URI eller handling
TextAnnotationKlistrelapp-annotasjon
InkAnnotationFrihåndstegnings-annotasjon med strøkbaner
StampAnnotationBilde- eller ikonoverlegg-annotasjon
WidgetAnnotation.ExportToJsonSerialiser skjemafeltd data til JSON
FormAcroForm-fasade; lister opp og manipulerer felter
FieldBasisklasse for skjemafelter (TextBoxField, CheckboxField, osv.)
CheckboxFieldAvmerkingsboks skjemafelt
TextBoxFieldEnkel-/flerelinjet tekstinntastingsfelt
ComboBoxFieldNedtrekksvalg-felt
RadioButtonFieldRadioknapp-gruppefelt
AnnotationTypeOppregning av annotasjonstyper
PdfAction.CreateUriFabrikk for URI-lenkehandlinger
PdfAction.CreateJavaScriptFabrikk for JavaScript-handlinger

Se også

 Norsk