Σχόλια και Φόρμες

Σχόλια και Φόρμες

Σχόλια και Φόρμες

Aspose.PDF FOSS για .NET σας παρέχει πλήρη πρόσβαση ανάγνωσης/εγγραφής σε σημειώσεις PDF
και διαδραστικά πεδία AcroForm. Το κύριο σημείο εισόδου για τις σημειώσεις είναι
Page.Annotations (ένα AnnotationCollection), ενώ τα πεδία φόρμας προσπελάζονται
μέσω Document.Form. Και τα δύο υποσυστήματα λειτουργούν εξ ολοκλήρου στη μνήμη και δεν απαιτούν
κλειδί άδειας.


Προσθήκη σχολίων

AnnotationCollection εκθέτει τυποποιημένες βοηθητικές μεθόδους για κάθε τυπικό
τύπο σημείωσης. Κάθε μέθοδος δέχεται ένα Rectangle που ορίζει τη θέση της σημείωσης
στην σελίδα μαζί με παραμέτρους ειδικές για τον τύπο.

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

Σχόλια συνδέσμων και ενέργειες

Οι σύνδεσμοι συνδυάζουν ένα ορθογώνιο που μπορεί να γίνει κλικ με ένα PdfAction. Η βιβλιοθήκη υποστηρίζει URI, GoTo, JavaScript, Named και Launch ενέργειες.

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

Για να διαβάσετε ξανά έναν σύνδεσμο μετά το άνοιγμα ενός αποθηκευμένου PDF, μετατρέψτε τη σημείωση σε LinkAnnotation και εξετάστε την ιδιότητα Uri ή επιλύστε το λεξικό δράσης μέσω PdfAction.Create.


Σήμανση και σχολιασμοί σχήματος

Οι σημειώσεις σήμανσης (επισήμανση, υπογράμμιση, διαγράμμιση) σημειώνουν υπάρχον κείμενο. Οι σημειώσεις σχήματος (τετράγωνο, κύκλος, γραμμή, μελάνι) σχεδιάζουν γεωμετρία στη σελίδα.

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

Σφραγίδες σχολίων

Οι σημειώσεις σφραγίδας επικάλυπουν μια εικόνα ή ένα προκαθορισμένο εικονίδιο σε μια σελίδα.

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

Ισοπεδίαση σχολίων

Καλέστε Flatten() σε οποιαδήποτε σημείωση για να ενσωματώσετε την οπτική της εμφάνιση στο ρεύμα περιεχομένου της σελίδας και να την αφαιρέσετε από τη λίστα διαδραστικών σημειώσεων.

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

Το πρότυπο επισκέπτη με AnnotationSelector

AnnotationSelector υλοποιεί το πρότυπο επισκέπτη ώστε να μπορείτε να φιλτράρετε τις σημειώσεις κατά τύπο χωρίς χειροκίνητη μετατροπή τύπων.

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
}

Περάστε ένα τυποποιημένο αντικείμενο σημείωσης στον κατασκευαστή για να φιλτράρετε μόνο για αυτόν τον τύπο:

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

Διαδραστικά πεδία φόρμας

Πρόσβαση στα πεδία AcroForm μέσω Document.Form. Η κλάση Form εκθέτει λειτουργίες ανάγνωσης/εγγραφής σε επίπεδο πεδίου και υποστηρίζει εξαγωγή JSON.

using var doc = Document.Open(pdfBytes);

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

Οι υποκατηγορίες του Field περιλαμβάνουν TextBoxField, CheckboxField, RadioButtonField, ComboBoxField, ListBoxField, ChoiceField και SignatureField.


Εξαγωγή δεδομένων φόρμας σε JSON

WidgetAnnotation παρέχει ExportToJson υπερφορτώσεις για τη σειριοποίηση δεδομένων πεδίου σε ροή ή διαδρομή αρχείου. Μια προαιρετική ExportFieldsToJsonOptions παράμετρος ελέγχει τη μορφοποίηση εξόδου.

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

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

Συμβουλές και βέλτιστες πρακτικές

  • Πάντα καθορίζετε ρητές συντεταγμένες Rectangle σε μονάδες χώρου χρήστη PDF (1/72 ίντσα).
  • Χρησιμοποιήστε AddLinkAnnotation με ένα PdfAction για μέγιστη ευελιξία — υποστηρίζονται όλες οι ενέργειες URI, GoTo, JavaScript και Named.
  • Καλέστε Flatten() πριν τη διανομή ενός PDF εάν θέλετε οι σημειώσεις να εμφανίζονται σε μη διαδραστικούς προβολείς.
  • Προσπελάστε τα πεδία φόρμας μέσω Document.Form.Fields αντί να επαναλαμβάνετε τις σημειώσεις σελίδας — η συλλογή φόρμας διαχειρίζεται την ομαδοποίηση πεδίων μεταξύ σελίδων.
  • Αποθηκεύστε και ανοίξτε ξανά το έγγραφο για να επαληθεύσετε την πιστότητα των σημειώσεων σε κυκλική διαδρομή, ειδικά για προσαρμοσμένες ενέργειες.

Κοινά προβλήματα

IssueCauseFix
Η σημείωση δεν είναι ορατή μετά την αποθήκευσηΤο ορθογώνιο έχει μηδενική περιοχή ή βρίσκεται εκτός των ορίων της σελίδαςΕπαληθεύστε ότι οι συντεταγμένες βρίσκονται εντός της σελίδας MediaBox
LinkAnnotation.Uri επιστρέφει nullΟ σύνδεσμος χρησιμοποιεί ενέργεια GoTo ή JavaScript, όχι ενέργεια URIΕπιλύστε το λεξικό ενέργειας μέσω PdfAction.Create και ελέγξτε ActionType
Η τιμή του πεδίου φόρμας είναι κενή συμβολοσειράΤο πεδίο υπάρχει αλλά δεν έχει καταχώρηση /VΕλέγξτε ότι το field.Value δεν είναι null πριν την επεξεργασία
Flatten() προκαλεί εξαίρεσηΗ σημείωση δεν έχει αναφορά /P (σελίδα)Βεβαιωθείτε ότι η σημείωση προστέθηκε μέσω Page.Annotations

Συχνές ερωτήσεις

Πώς μπορώ να προσθέσω έναν υπερσύνδεσμο σε μια σελίδα PDF;

Χρησιμοποιήστε page.Annotations.AddLinkAnnotation(rect, PdfAction.CreateUri(url)) για να δημιουργήσετε έναν κλικ‑δυνατό σύνδεσμο URI στο καθορισμένο ορθογώνιο.

Μπορώ να διαβάσω τις τιμές των πεδίων φόρμας από ένα υπάρχον PDF;

Ναι. Ανοίξτε το έγγραφο με Document.Open, στη συνέχεια επαναλάβετε Document.Form.Fields και διαβάστε την ιδιότητα Value σε κάθε Field.

Τι τύποι σχολιασμού υποστηρίζει η βιβλιοθήκη;

Η βιβλιοθήκη υποστηρίζει κείμενο, ελεύθερο κείμενο, σύνδεσμο, επισήμανση, υπογράμμιση, διαγράμμιση, τετράγωνο, κύκλο, γραμμή, μελάνι, σφραγίδα, δείκτη, συνημμένο αρχείο, ήχο, πολύγωνο, πολυγραμμή, συστατικό, υδατογράφημα και σχόλια 3D. Όλοι οι τύποι είναι διαθέσιμοι μέσω AnnotationCollection βοηθητικών μεθόδων ή άμεσης δημιουργίας.

Πώς φιλτράρω τις σημειώσεις ανά τύπο;

Χρησιμοποιήστε AnnotationSelector με μια σημείωση προτύπου με τύπο. Καλέστε page.Accept(selector) και ελέγξτε selector.Selected για ταιριαστές σημειώσεις.

Μπορώ να εξομαλύνω μόνο συγκεκριμένες σημειώσεις;

Ναι. Καλείτε Flatten() σε μεμονωμένα Annotation αντικείμενα αντί να επαναλαμβάνετε ολόκληρη τη συλλογή.


Περίληψη Αναφοράς API

Class / MethodDescription
AnnotationCollectionΤυποποιημένη συλλογή σε κάθε Page· παρέχει βοηθητικά προγράμματα Add* για όλους τους τύπους σημειώσεων
AnnotationCollection.AddTextAnnotationΠροσθήκη σημείωσης τύπου sticky-note
AnnotationCollection.AddLinkAnnotationΠροσθήκη συνδέσμου με URI, προορισμό σελίδας ή προσαρμοσμένη ενέργεια
AnnotationCollection.AddHighlightAnnotationΠροσθήκη σημείωσης επισήμανσης κειμένου
AnnotationCollection.AddInkAnnotationΠροσθήκη σημείωσης ελεύθερης σχεδίασης
AnnotationCollection.AddSquareAnnotationΠροσθήκη σημείωσης σχήματος ορθογωνίου
AnnotationCollection.AddCircleAnnotationΠροσθήκη σημείωσης σχήματος έλλειψης
AnnotationCollection.AddLineAnnotationΠροσθήκη σημείωσης γραμμής
Annotation.FlattenΚαταγραφή της εμφάνισης της σημείωσης στο περιεχόμενο της σελίδας
Annotation.AcceptΑποστολή σε τυποποιημένη υπερφόρτωση AnnotationSelector.Visit
AnnotationSelectorΕπισκέπτης που συλλέγει σημειώσεις ανά τύπο
LinkAnnotationΥποκατηγορία σημείωσης που μεταφέρει URI ή ενέργεια
TextAnnotationΣημείωση τύπου sticky-note
InkAnnotationΣημείωση ελεύθερης σχεδίασης με διαδρομές γραμμής
StampAnnotationΣημείωση επικάλυψης εικόνας ή εικονιδίου
WidgetAnnotation.ExportToJsonΣειριοποίηση δεδομένων πεδίου φόρμας σε JSON
FormΠρόσοψη AcroForm· απαριθμεί και διαχειρίζεται πεδία
FieldΒασική κλάση για πεδία φόρμας (TextBoxField, CheckboxField, κ.λπ.)
CheckboxFieldΠεδίο φόρμας τύπου checkbox
TextBoxFieldΠεδίο εισαγωγής κειμένου μίας ή πολλαπλών γραμμών
ComboBoxFieldΠεδίο επιλογής τύπου drop-down
RadioButtonFieldΠεδίο ομάδας radio-button
AnnotationTypeΑπαρίθμηση των τύπων σημειώσεων
PdfAction.CreateUriΕργοστάσιο για ενέργειες συνδέσμου URI
PdfAction.CreateJavaScriptΕργοστάσιο για ενέργειες JavaScript

Δείτε επίσης

 Ελληνικά