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 instancesInteraktive 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
AddLinkAnnotationmit einemPdfActionfü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.Fieldsauf 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
| Problem | Ursache | Lösung |
|---|---|---|
| Annotation nach dem Speichern nicht sichtbar | Rechteck hat keine Fläche oder liegt außerhalb der Seitenränder | Stellen Sie sicher, dass die Koordinaten innerhalb der Seite MediaBox liegen |
LinkAnnotation.Uri gibt null zurück | Link verwendet eine GoTo- oder JavaScript-Aktion, nicht eine URI-Aktion | Lösen Sie das Aktionswörterbuch über PdfAction.Create und prüfen Sie ActionType |
| Formularfeldwert ist eine leere Zeichenkette | Feld existiert, hat aber keinen /V-Eintrag | Überprüfen Sie, dass field.Value nicht null ist, bevor Sie verarbeiten |
Flatten() wirft | Annotation hat keinen /P (Seite)-Referenz | Stellen 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 / Methode | Beschreibung |
|---|---|
AnnotationCollection | Typisierte Sammlung für jedes Page; bietet Add* Hilfsfunktionen für alle Annotationsarten |
AnnotationCollection.AddTextAnnotation | Füge eine Haftnotiz-Annotation hinzu |
AnnotationCollection.AddLinkAnnotation | Fügen Sie einen Link mit URI, Seitenziel oder benutzerdefinierter Aktion hinzu |
AnnotationCollection.AddHighlightAnnotation | Fügen Sie eine Text-Hervorhebungsannotation hinzu |
AnnotationCollection.AddInkAnnotation | Fügen Sie eine Freihandzeichnung-Annotation hinzu |
AnnotationCollection.AddSquareAnnotation | Fügen Sie eine Rechteck-Form-Annotation hinzu |
AnnotationCollection.AddCircleAnnotation | Eine Ellipse-Form-Anmerkung hinzufügen |
AnnotationCollection.AddLineAnnotation | Eine Linien-Anmerkung hinzufügen |
Annotation.Flatten | Anmerkungsdarstellung in den Seiteninhalt einbrennen |
Annotation.Accept | An die typisierte AnnotationSelector.Visit-Überladung weiterleiten |
AnnotationSelector | Visitor, der Annotationen nach Typ sammelt |
LinkAnnotation | Annotation-Unterklasse, die eine URI oder Aktion trägt |
TextAnnotation | Klebezettel-Anmerkung |
InkAnnotation | Freihandzeichnung-Anmerkung mit Strichpfaden |
StampAnnotation | Bild- oder Symbol-Overlay-Anmerkung |
WidgetAnnotation.ExportToJson | Formularfeld-Daten nach JSON serialisieren |
Form | AcroForm Fassade; enumeriert und manipuliert Felder |
Field | Basisklasse für Formularfelder (TextBoxField, CheckboxField, usw.) |
CheckboxField | Checkbox-Formularfeld |
TextBoxField | Einzeiliges/mehrzeiliges Texteingabefeld |
ComboBoxField | Dropdown-Auswahlfeld |
RadioButtonField | Radio-Button-Gruppenfeld |
AnnotationType | Aufzählung von Annotationsarten |
PdfAction.CreateUri | Factory für URI-Link-Aktionen |
PdfAction.CreateJavaScript | Factory für JavaScript-Aktionen |