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 erPage.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 instancesInteraktive 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
AddLinkAnnotationmed enPdfActionfor 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.Fieldsi 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 | Årsak | Løsning |
|---|---|---|
| Annotering ikke synlig etter lagring | Rektangel har null areal eller er utenfor sidens grenser | Bekreft at koordinatene ligger innenfor siden MediaBox |
LinkAnnotation.Uri returnerer null | Lenken bruker en GoTo- eller JavaScript-handling, ikke en URI-handling | Løs opp handlingsordboken via PdfAction.Create og sjekk ActionType |
| Skjemafeltverdi er en tom streng | Feltet finnes, men har ingen /V-oppføring | Sjekk at field.Value ikke er null før behandling |
Flatten() kaster | Annotering har ingen /P (side)-referanse | Sø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 / Method | Description |
|---|---|
AnnotationCollection | Typet samling på hver Page; gir Add* hjelpere for alle annotasjonstyper |
AnnotationCollection.AddTextAnnotation | Legg til en klistrelapp-annotasjon |
AnnotationCollection.AddLinkAnnotation | Legg til en lenke med URI, sidemål eller egendefinert handling |
AnnotationCollection.AddHighlightAnnotation | Legg til en tekstmarkering-annotasjon |
AnnotationCollection.AddInkAnnotation | Legg til en frihåndstegnings-annotasjon |
AnnotationCollection.AddSquareAnnotation | Legg til en rektangelform-annotasjon |
AnnotationCollection.AddCircleAnnotation | Legg til en ellipseform-annotasjon |
AnnotationCollection.AddLineAnnotation | Legg til en linje-annotasjon |
Annotation.Flatten | Brenn annotasjonsutseende inn i sideinnholdet |
Annotation.Accept | Send til typet AnnotationSelector.Visit overbelastning |
AnnotationSelector | Besøker som samler annotasjoner etter type |
LinkAnnotation | Annotasjonsunderklasse som bærer en URI eller handling |
TextAnnotation | Klistrelapp-annotasjon |
InkAnnotation | Frihåndstegnings-annotasjon med strøkbaner |
StampAnnotation | Bilde- eller ikonoverlegg-annotasjon |
WidgetAnnotation.ExportToJson | Serialiser skjemafeltd data til JSON |
Form | AcroForm-fasade; lister opp og manipulerer felter |
Field | Basisklasse for skjemafelter (TextBoxField, CheckboxField, osv.) |
CheckboxField | Avmerkingsboks skjemafelt |
TextBoxField | Enkel-/flerelinjet tekstinntastingsfelt |
ComboBoxField | Nedtrekksvalg-felt |
RadioButtonField | Radioknapp-gruppefelt |
AnnotationType | Oppregning av annotasjonstyper |
PdfAction.CreateUri | Fabrikk for URI-lenkehandlinger |
PdfAction.CreateJavaScript | Fabrikk for JavaScript-handlinger |