Anmerkungen und Formulare

Anmerkungen und Formulare

Übersicht

Aspose.PDF FOSS für .NET bietet Ihnen vollen Lese-/Schreibzugriff auf PDF-Anmerkungen und interaktive AcroForm-Felder. Der primäre Einstiegspunkt für Anmerkungen ist Page.Annotations (ein AnnotationCollection), während Formularfelder über Document.Form zugegriffen werden. Beide Subsysteme arbeiten vollständig im Speicher und benötigen keinen Lizenzschlüssel.


Anmerkungen hinzufügen

AnnotationCollection stellt typisierte Hilfsmethoden für jede Standard-Anmerkungsart bereit. Jede Methode akzeptiert ein Rectangle, das die Position der Anmerkung auf der Seite definiert, sowie typenspezifische Parameter.

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-Anmerkungen und Aktionen

Links kombinieren ein anklickbares Rechteck mit einem PdfAction. Die Bibliothek unterstützt URI-, GoTo-, JavaScript-, Named- und Launch-Aktionen.

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

Um einen Link nach dem Öffnen einer gespeicherten PDF wieder auszulesen, casten Sie die Anmerkung zu LinkAnnotation und prüfen Sie deren Uri-Eigenschaft oder lösen Sie das Aktionsdictionary über PdfAction.Create auf.


Markup- und Formanmerkungen

Markup-Anmerkungen (Hervorhebung, Unterstreichung, Durchstreichung) markieren vorhandenen Text. Form-Anmerkungen (Quadrat, Kreis, Linie, Tinte) zeichnen Geometrie auf der Seite.

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-Anmerkungen

Stempel-Anmerkungen überlagern ein Bild oder ein vordefiniertes Symbol auf einer Seite.

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

Flachlegen von Anmerkungen

Rufen Sie Flatten() für jede Anmerkung auf, um ihr visuelles Erscheinungsbild in den Seiteninhaltsstrom einzubrennen und sie aus der interaktiven Anmerkungsliste zu entfernen.

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

Das Visitor-Muster mit AnnotationSelector

AnnotationSelector implementiert das Visitor-Muster, sodass Sie Anmerkungen nach Typ filtern können, ohne manuell zu casten.

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
}

Übergeben Sie eine typisierte Annotationsinstanz an den Konstruktor, um nur nach diesem Typ zu filtern:

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

Interaktive Formularfelder

Greifen Sie über Document.Form auf AcroForm-Felder zu. Die Klasse Form stellt feldbezogene Lese-/Schreiboperationen bereit und unterstützt den Export nach JSON.

using var doc = Document.Open(pdfBytes);

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

Feldunterklassen umfassen TextBoxField, CheckboxField, RadioButtonField, ComboBoxField, ListBoxField, ChoiceField und SignatureField.


Exportieren von Formulardaten nach JSON

WidgetAnnotation stellt ExportToJson-Überladungen zum Serialisieren von Felddaten in einen Stream oder Dateipfad bereit. Ein optionaler ExportFieldsToJsonOptions-Parameter steuert die Ausgabeformatierung.

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

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

Tipps und bewährte Vorgehensweisen

  • Geben Sie stets explizite Rectangle-Koordinaten in PDF-Benutzerbereichseinheiten (1/72 Zoll) an.
  • Verwenden Sie AddLinkAnnotation mit einem PdfAction für maximale Flexibilität — URI, GoTo, JavaScript und benannte Aktionen werden alle unterstützt.
  • Rufen Sie Flatten() auf, bevor Sie ein PDF verbreiten, wenn Sie möchten, dass Anmerkungen in nicht-interaktiven Betrachtern angezeigt werden.
  • Greifen Sie über Document.Form.Fields auf Formularfelder zu, anstatt Seitenanmerkungen zu iterieren — die Formularsammlung übernimmt die Gruppierung von Feldern über mehrere Seiten hinweg.
  • Speichern und öffnen Sie das Dokument erneut, um die Rundreise-Treue der Anmerkungen zu überprüfen, insbesondere bei benutzerdefinierten Aktionen.

Häufige Probleme

ProblemUrsacheLösung
Annotation nach dem Speichern nicht sichtbarRechteck hat keine Fläche oder liegt außerhalb der SeitenränderStellen Sie sicher, dass die Koordinaten innerhalb der Seite MediaBox liegen
LinkAnnotation.Uri gibt null zurückLink verwendet eine GoTo- oder JavaScript-Aktion, nicht eine URI-AktionLösen Sie das Aktionswörterbuch über PdfAction.Create und prüfen Sie ActionType
Formularfeldwert ist eine leere ZeichenketteFeld existiert, hat aber keinen /V-EintragÜberprüfen Sie, dass field.Value nicht null ist, bevor Sie verarbeiten
Flatten() wirftAnnotation hat keinen /P (Seite)-ReferenzStellen Sie sicher, dass die Annotation über Page.Annotations hinzugefügt wurde

FAQ

Wie füge ich einer PDF-Seite einen Hyperlink hinzu?

Verwenden Sie page.Annotations.AddLinkAnnotation(rect, PdfAction.CreateUri(url)), um an dem angegebenen Rechteck einen anklickbaren URI-Link zu erstellen.

Kann ich Formularfeldwerte aus einem bestehenden PDF auslesen?

Ja. Öffnen Sie das Dokument mit Document.Open, iterieren Sie dann Document.Form.Fields und lesen Sie die Value-Eigenschaft jedes Field.

Welche Annotationstypen unterstützt die Bibliothek?

Die Bibliothek unterstützt text, free-text, link, highlight, underline, strikeout, square, circle, line, ink, stamp, caret, file-attachment, sound, polygon, polyline, widget, watermark und 3D annotations. Alle Typen sind über AnnotationCollection Hilfsmethoden oder direkte Konstruktion verfügbar.

Wie filtere ich Annotationen nach Typ?

Verwenden Sie AnnotationSelector mit einer typisierten Vorlagenannotation. Rufen Sie page.Accept(selector) auf und prüfen Sie selector.Selected auf passende Annotationen.

Kann ich nur bestimmte Annotationen flachlegen?

Ja. Rufen Sie Flatten() für einzelne Annotation-Instanzen auf, anstatt die gesamte Sammlung zu iterieren.


API Reference Zusammenfassung

Klasse / MethodeBeschreibung
AnnotationCollectionTypisierte Sammlung für jedes Page; bietet Add* Hilfsfunktionen für alle Annotationsarten
AnnotationCollection.AddTextAnnotationFüge eine Haftnotiz-Annotation hinzu
AnnotationCollection.AddLinkAnnotationFügen Sie einen Link mit URI, Seitenziel oder benutzerdefinierter Aktion hinzu
AnnotationCollection.AddHighlightAnnotationFügen Sie eine Text-Hervorhebungsannotation hinzu
AnnotationCollection.AddInkAnnotationFügen Sie eine Freihandzeichnung-Annotation hinzu
AnnotationCollection.AddSquareAnnotationFügen Sie eine Rechteck-Form-Annotation hinzu
AnnotationCollection.AddCircleAnnotationEine Ellipse-Form-Anmerkung hinzufügen
AnnotationCollection.AddLineAnnotationEine Linien-Anmerkung hinzufügen
Annotation.FlattenAnmerkungsdarstellung in den Seiteninhalt einbrennen
Annotation.AcceptAn die typisierte AnnotationSelector.Visit-Überladung weiterleiten
AnnotationSelectorVisitor, der Annotationen nach Typ sammelt
LinkAnnotationAnnotation-Unterklasse, die eine URI oder Aktion trägt
TextAnnotationKlebezettel-Anmerkung
InkAnnotationFreihandzeichnung-Anmerkung mit Strichpfaden
StampAnnotationBild- oder Symbol-Overlay-Anmerkung
WidgetAnnotation.ExportToJsonFormularfeld-Daten nach JSON serialisieren
FormAcroForm Fassade; enumeriert und manipuliert Felder
FieldBasisklasse für Formularfelder (TextBoxField, CheckboxField, usw.)
CheckboxFieldCheckbox-Formularfeld
TextBoxFieldEinzeiliges/mehrzeiliges Texteingabefeld
ComboBoxFieldDropdown-Auswahlfeld
RadioButtonFieldRadio-Button-Gruppenfeld
AnnotationTypeAufzählung von Annotationsarten
PdfAction.CreateUriFactory für URI-Link-Aktionen
PdfAction.CreateJavaScriptFactory für JavaScript-Aktionen

Siehe auch

 Deutsch