Anmerkungen und Formulare

Anmerkungen und Formulare

Anmerkungen und Formulare

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 zugegriffen werden
über Document.Form. Beide Subsysteme arbeiten vollständig im Speicher und benötigen keinen
Lizenzschlüssel.


Hinzufügen von Anmerkungen

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 Annotation zu LinkAnnotation und prüfen Sie deren Uri‑Eigenschaft oder lösen Sie das Aktions‑Dictionary über PdfAction.Create auf.


Markup und Formannotationen

Markup-Anmerkungen (Hervorhebung, Unterstreichung, Durchstreichung) markieren vorhandenen Text. Shape-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-Annotationen ü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);

Anmerkungen flachlegen

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 manuelles 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
}

Übergeben Sie eine typisierte Anmerkungsinstanz 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 Form‑Klasse stellt feldbezogene Lese‑/Schreib‑Operationen bereit und unterstützt den JSON‑Export.

using var doc = Document.Open(pdfBytes);

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

Zu den Unterklassen von Field gehören TextBoxField, CheckboxField, RadioButtonField, ComboBoxField, ListBoxField, ChoiceField und SignatureField.


Exportieren von Formulardaten nach JSON

WidgetAnnotation bietet ExportToJson Überladungen zum Serialisieren von Felddaten in einen Stream oder Dateipfad. 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 Verfahren

  • Geben Sie immer explizite Rectangle Koordinaten in PDF‑User‑Space‑Einheiten (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 verteilen, wenn Sie möchten, dass Anmerkungen in nicht‑interaktiven Betrachtern angezeigt werden.
  • Greifen Sie über Document.Form.Fields auf Formularfelder zu, anstatt Seiten‑Anmerkungen zu iterieren — die Formularsammlung verwaltet die gruppenübergreifende Feldzuordnung.
  • Speichern und öffnen Sie das Dokument erneut, um die Round‑Trip‑Genauigkeit von Anmerkungen zu überprüfen, insbesondere bei benutzerdefinierten Aktionen.

Häufige Probleme

IssueCauseFix
Annotation nach dem Speichern nicht sichtbarRechteck hat null Fläche oder liegt außerhalb der SeitenränderStellen Sie sicher, dass die Koordinaten innerhalb der Seite liegen MediaBox
LinkAnnotation.Uri gibt null zurückLink verwendet eine GoTo- oder JavaScript-Aktion, nicht eine URI-AktionLösen Sie das Aktionswörterbuch über PdfAction.Create auf und prüfen Sie ActionType
Formularfeldwert ist 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)-VerweisStellen 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 lesen?

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

Welche Annotationstypen unterstützt die Bibliothek?

Die Bibliothek unterstützt Text, Freitext, Link, Hervorhebung, Unterstreichung, Durchstreichung, Quadrat, Kreis, Linie, Tinte, Stempel, Einfügemarke, Dateianhang, Ton, Polygon, Polylinie, Widget, Wasserzeichen und 3D-Anmerkungen. Alle Typen sind über AnnotationCollection Hilfsmethoden oder direkte Konstruktion verfügbar.

Wie filtere ich Anmerkungen nach Typ?

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

Kann ich nur bestimmte Anmerkungen flachlegen?

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


API-Referenzübersicht

Class / MethodDescription
AnnotationCollectionTypisierte Sammlung für jedes Page; bietet Add* Hilfsfunktionen für alle Anmerkungsarten
AnnotationCollection.AddTextAnnotationFügt eine Notizzettel-Anmerkung hinzu
AnnotationCollection.AddLinkAnnotationFügt einen Link mit URI, Seitenziel oder benutzerdefinierter Aktion hinzu
AnnotationCollection.AddHighlightAnnotationFügt eine Text‑Hervorhebungs‑Anmerkung hinzu
AnnotationCollection.AddInkAnnotationFügt eine Freihandzeichnung‑Anmerkung hinzu
AnnotationCollection.AddSquareAnnotationFügt eine Rechteckform‑Anmerkung hinzu
AnnotationCollection.AddCircleAnnotationFügt eine Ellipsenform‑Anmerkung hinzu
AnnotationCollection.AddLineAnnotationFügt eine Linien‑Anmerkung hinzu
Annotation.FlattenBrennt das Aussehen der Anmerkung in den Seiteninhalt ein
Annotation.AcceptLeitet an die typisierte AnnotationSelector.Visit Überladung weiter
AnnotationSelectorBesucher, der Anmerkungen nach Typ sammelt
LinkAnnotationAnmerkungsunterklasse, die einen URI oder eine Aktion trägt
TextAnnotationNotizzettel-Anmerkung
InkAnnotationFreihandzeichnung‑Anmerkung mit Strichpfaden
StampAnnotationBild‑ oder Symbol‑Overlay‑Anmerkung
WidgetAnnotation.ExportToJsonSerialisiert Formulardaten in JSON
FormAcroForm‑Fassade; enumeriert und manipuliert Felder
FieldBasisklasse für Formularfelder (TextBoxField, CheckboxField, usw.)
CheckboxFieldKontrollkästchen‑Formularfeld
TextBoxFieldEinzeiliges/mehrzeiliges Texteingabefeld
ComboBoxFieldDropdown‑Auswahlfeld
RadioButtonFieldRadio‑Button‑Gruppenfeld
AnnotationTypeAufzählung der Anmerkungsarten
PdfAction.CreateUriFactory für URI‑Link‑Aktionen
PdfAction.CreateJavaScriptFactory für JavaScript‑Aktionen

Siehe auch

 Deutsch