Σχόλια και Φόρμες
Σχόλια και Φόρμες
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αντί να επαναλαμβάνετε τις σημειώσεις σελίδας — η συλλογή φόρμας διαχειρίζεται την ομαδοποίηση πεδίων μεταξύ σελίδων. - Αποθηκεύστε και ανοίξτε ξανά το έγγραφο για να επαληθεύσετε την πιστότητα των σημειώσεων σε κυκλική διαδρομή, ειδικά για προσαρμοσμένες ενέργειες.
Κοινά προβλήματα
| Issue | Cause | Fix |
|---|---|---|
| Η σημείωση δεν είναι ορατή μετά την αποθήκευση | Το ορθογώνιο έχει μηδενική περιοχή ή βρίσκεται εκτός των ορίων της σελίδας | Επαληθεύστε ότι οι συντεταγμένες βρίσκονται εντός της σελίδας 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 / Method | Description |
|---|---|
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 |