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 istPage.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 instancesInteraktive 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
RectangleKoordinaten in PDF‑User‑Space‑Einheiten (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 verteilen, wenn Sie möchten, dass Anmerkungen in nicht‑interaktiven Betrachtern angezeigt werden. - Greifen Sie über
Document.Form.Fieldsauf 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
| Issue | Cause | Fix |
|---|---|---|
| Annotation nach dem Speichern nicht sichtbar | Rechteck hat null Fläche oder liegt außerhalb der Seitenränder | Stellen Sie sicher, dass die Koordinaten innerhalb der Seite liegen MediaBox |
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 auf und prüfen Sie ActionType |
| Formularfeldwert ist 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)-Verweis | 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 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 / Method | Description |
|---|---|
AnnotationCollection | Typisierte Sammlung für jedes Page; bietet Add* Hilfsfunktionen für alle Anmerkungsarten |
AnnotationCollection.AddTextAnnotation | Fügt eine Notizzettel-Anmerkung hinzu |
AnnotationCollection.AddLinkAnnotation | Fügt einen Link mit URI, Seitenziel oder benutzerdefinierter Aktion hinzu |
AnnotationCollection.AddHighlightAnnotation | Fügt eine Text‑Hervorhebungs‑Anmerkung hinzu |
AnnotationCollection.AddInkAnnotation | Fügt eine Freihandzeichnung‑Anmerkung hinzu |
AnnotationCollection.AddSquareAnnotation | Fügt eine Rechteckform‑Anmerkung hinzu |
AnnotationCollection.AddCircleAnnotation | Fügt eine Ellipsenform‑Anmerkung hinzu |
AnnotationCollection.AddLineAnnotation | Fügt eine Linien‑Anmerkung hinzu |
Annotation.Flatten | Brennt das Aussehen der Anmerkung in den Seiteninhalt ein |
Annotation.Accept | Leitet an die typisierte AnnotationSelector.Visit Überladung weiter |
AnnotationSelector | Besucher, der Anmerkungen nach Typ sammelt |
LinkAnnotation | Anmerkungsunterklasse, die einen URI oder eine Aktion trägt |
TextAnnotation | Notizzettel-Anmerkung |
InkAnnotation | Freihandzeichnung‑Anmerkung mit Strichpfaden |
StampAnnotation | Bild‑ oder Symbol‑Overlay‑Anmerkung |
WidgetAnnotation.ExportToJson | Serialisiert Formulardaten in JSON |
Form | AcroForm‑Fassade; enumeriert und manipuliert Felder |
Field | Basisklasse für Formularfelder (TextBoxField, CheckboxField, usw.) |
CheckboxField | Kontrollkästchen‑Formularfeld |
TextBoxField | Einzeiliges/mehrzeiliges Texteingabefeld |
ComboBoxField | Dropdown‑Auswahlfeld |
RadioButtonField | Radio‑Button‑Gruppenfeld |
AnnotationType | Aufzählung der Anmerkungsarten |
PdfAction.CreateUri | Factory für URI‑Link‑Aktionen |
PdfAction.CreateJavaScript | Factory für JavaScript‑Aktionen |