Annotationer og formularer

Annotationer og formularer

Annotationer og formularer

Aspose.PDF FOSS for .NET giver dig fuld læse/skriv adgang til PDF-annotationer
og interaktive AcroForm-felter. Det primære indgangspunkt for annotationer er
Page.Annotations (en AnnotationCollection), mens formularfelter tilgås
gennem Document.Form. Begge undersystemer fungerer udelukkende i hukommelsen og kræver ingen
licensnøgle.


Tilføj annotationer

AnnotationCollection eksponerer typede hjælpemetoder for hver standard annoteringstype. Hver metode accepterer en Rectangle, der definerer annoteringens position på siden plus typespecifikke parametre.

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

Link-annotationer og handlinger

Links kombinerer en klikbar rektangel med en PdfAction. Biblioteket understø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 at læse et link tilbage efter at have åbnet en gemt PDF, kast annotationen til LinkAnnotation og inspicer dens Uri‑egenskab eller opløs handlingsordbogen via PdfAction.Create.


Markering og form-annoteringer

Markup‑annotationer (highlight, underline, strikeout) markerer eksisterende tekst. Shape‑annotationer (square, circle, line, ink) 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-annoteringer

Stempleannoteringer overlejrer et billede eller et foruddefineret ikon på en side.

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

Fladgøring af annotationer

Kald Flatten() på enhver annotation for at brænde dens visuelle udseende ind i sidens indholdsstrøm og fjerne den fra den interaktive annoteringsliste.

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

Visitor-mønsteret med AnnotationSelector

AnnotationSelector implementerer besøgsmønsteret, så du kan filtrere annotationer efter type uden manuel 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 annoteringsinstans til konstruktøren for kun at filtrere efter den type:

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

Interaktive formularfelter

Få adgang til AcroForm-felter gennem Document.Form. Klassen Form eksponerer felt‑niveau læse/skriv‑operationer og understø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}");
}

Field underklasser omfatter TextBoxField, CheckboxField, RadioButtonField, ComboBoxField, ListBoxField, ChoiceField og SignatureField.


Eksport af formulardata til JSON

WidgetAnnotation leverer ExportToJson overloads til at serialisere feltdata til en strøm eller filsti. En valgfri ExportFieldsToJsonOptions parameter styrer outputformatering.

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

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

Tips og bedste praksis

  • Angiv altid eksplicit Rectangle koordinater i PDF‑brugerens rum‑enheder (1/72 tomme).
  • Brug AddLinkAnnotation med en PdfAction for maksimal fleksibilitet — URI, GoTo, JavaScript og navngivne handlinger understøttes alle.
  • Kald Flatten() før du distribuerer en PDF, hvis du vil have annotationer til at vises i ikke‑interaktive visningsprogrammer.
  • Få adgang til formularfelter via Document.Form.Fields i stedet for at iterere sideannotationer — formularsamlingen håndterer gruppering af felter på tværs af sider.
  • Gem og genåbn dokumentet for at bekræfte annotationernes round‑trip‑nøjagtighed, især for brugerdefinerede handlinger.

Almindelige problemer

ProblemÅrsagLøsning
Annotation er ikke synlig efter gemningRektangel har nul område eller er uden for sidens grænserBekræft at koordinaterne ligger inden for siden MediaBox
LinkAnnotation.Uri returnerer nullLink bruger en GoTo- eller JavaScript-handling, ikke en URI-handlingLøs op handlingsordbogen via PdfAction.Create og tjek ActionType
Formularfeltværdi er en tom strengFeltet findes, men har ingen /V-indgangKontroller at field.Value ikke er null før behandling
Flatten() kasterAnnotation har ingen /P (side)-referenceSørg for at annotationen blev tilføjet via Page.Annotations

Ofte stillede spørgsmål

Hvordan tilføjer jeg et hyperlink til en PDF-side?

Brug page.Annotations.AddLinkAnnotation(rect, PdfAction.CreateUri(url)) til at oprette et klikbart URI-link i det angivne rektangel.

Kan jeg læse formularfelternes værdier fra en eksisterende PDF?

Ja. Åbn dokumentet med Document.Open, og iterer derefter Document.Form.Fields og læs Value‑egenskaben på hver Field.

Hvilke annoteringstyper understøtter biblioteket?

Biblioteket understøtter tekst, fri-tekst, link, fremhævning, understregning, gennemstregning, firkant, cirkel, linje, blæk, stempel, markør, filvedhæftning, lyd, polygon, polylinje, widget, vandmærke og 3D-annotationer. Alle typer er tilgængelige via AnnotationCollection hjælpefunktioner eller direkte konstruktion.

Hvordan filtrerer jeg annotationer efter type?

Brug AnnotationSelector med en typet skabelonannotation. Kald page.Accept(selector) og inspicer selector.Selected for matchende annotationer.

Kan jeg kun flade ud specifikke annotationer?

Ja. Kald Flatten() på individuelle Annotation‑instanser i stedet for at iterere gennem hele samlingen.


API Reference Oversigt

Klasse / MetodeBeskrivelse
AnnotationCollectionTypet samling på hver Page; giver Add* hjælperedskaber til alle annoteringstyper
AnnotationCollection.AddTextAnnotationTilføj en post-it-annotering
AnnotationCollection.AddLinkAnnotationTilføj et link med URI, side-destination eller brugerdefineret handling
AnnotationCollection.AddHighlightAnnotationTilføj en tekst‑markeringsannotering
AnnotationCollection.AddInkAnnotationTilføj en frihåndstegningsannotering
AnnotationCollection.AddSquareAnnotationTilføj en rektangel‑formannotering
AnnotationCollection.AddCircleAnnotationTilføj en ellipse‑formannotering
AnnotationCollection.AddLineAnnotationTilføj en linjeannotering
Annotation.FlattenIndbrænd annoteringens udseende i sideindholdet
Annotation.AcceptSend til typet AnnotationSelector.Visit overbelastning
AnnotationSelectorBesøger der indsamler annoteringer efter type
LinkAnnotationAnnoteringsunderklasse der bærer en URI eller handling
TextAnnotationPost-it-annotering
InkAnnotationFrihåndstegningsannotering med strøgstier
StampAnnotationBilled‑ eller ikon‑overlægsannotering
WidgetAnnotation.ExportToJsonSerialiser formularfeltdata til JSON
FormAcroForm-facade; enumererer og manipulerer felter
FieldBasisklasse for formularfelter (TextBoxField, CheckboxField, osv.)
CheckboxFieldAfkrydsningsfelt i formular
TextBoxFieldEnkelt‑/flere‑linje tekstinputfelt
ComboBoxFieldRulle‑ned valgfelt
RadioButtonFieldRadioknap‑gruppefelt
AnnotationTypeEnumeration af annoteringstyper
PdfAction.CreateUriFabrik for URI‑link‑handlinger
PdfAction.CreateJavaScriptFabrik for JavaScript‑handlinger

Se også

 Dansk