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 erPage.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 instancesInteraktive 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
Rectanglekoordinater i PDF‑brugerens rum‑enheder (1/72 tomme). - Brug
AddLinkAnnotationmed enPdfActionfor 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.Fieldsi 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 | Årsag | Løsning |
|---|---|---|
| Annotation er ikke synlig efter gemning | Rektangel har nul område eller er uden for sidens grænser | Bekræft at koordinaterne ligger inden for siden MediaBox |
LinkAnnotation.Uri returnerer null | Link bruger en GoTo- eller JavaScript-handling, ikke en URI-handling | Løs op handlingsordbogen via PdfAction.Create og tjek ActionType |
| Formularfeltværdi er en tom streng | Feltet findes, men har ingen /V-indgang | Kontroller at field.Value ikke er null før behandling |
Flatten() kaster | Annotation har ingen /P (side)-reference | Sø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 / Metode | Beskrivelse |
|---|---|
AnnotationCollection | Typet samling på hver Page; giver Add* hjælperedskaber til alle annoteringstyper |
AnnotationCollection.AddTextAnnotation | Tilføj en post-it-annotering |
AnnotationCollection.AddLinkAnnotation | Tilføj et link med URI, side-destination eller brugerdefineret handling |
AnnotationCollection.AddHighlightAnnotation | Tilføj en tekst‑markeringsannotering |
AnnotationCollection.AddInkAnnotation | Tilføj en frihåndstegningsannotering |
AnnotationCollection.AddSquareAnnotation | Tilføj en rektangel‑formannotering |
AnnotationCollection.AddCircleAnnotation | Tilføj en ellipse‑formannotering |
AnnotationCollection.AddLineAnnotation | Tilføj en linjeannotering |
Annotation.Flatten | Indbrænd annoteringens udseende i sideindholdet |
Annotation.Accept | Send til typet AnnotationSelector.Visit overbelastning |
AnnotationSelector | Besøger der indsamler annoteringer efter type |
LinkAnnotation | Annoteringsunderklasse der bærer en URI eller handling |
TextAnnotation | Post-it-annotering |
InkAnnotation | Frihåndstegningsannotering med strøgstier |
StampAnnotation | Billed‑ eller ikon‑overlægsannotering |
WidgetAnnotation.ExportToJson | Serialiser formularfeltdata til JSON |
Form | AcroForm-facade; enumererer og manipulerer felter |
Field | Basisklasse for formularfelter (TextBoxField, CheckboxField, osv.) |
CheckboxField | Afkrydsningsfelt i formular |
TextBoxField | Enkelt‑/flere‑linje tekstinputfelt |
ComboBoxField | Rulle‑ned valgfelt |
RadioButtonField | Radioknap‑gruppefelt |
AnnotationType | Enumeration af annoteringstyper |
PdfAction.CreateUri | Fabrik for URI‑link‑handlinger |
PdfAction.CreateJavaScript | Fabrik for JavaScript‑handlinger |