Πώς να εργαστείτε με Σημειώσεις σε TypeScript
Αυτός ο οδηγός δείχνει πώς να προσθέτετε, να επίπεδοποιείτε και να αναζητάτε σημειώσεις PDF με το Aspose.PDF FOSS για TypeScript. Η κλάση Page εκθέτει μία μέθοδο Add* ανά υποτύπο σημειώσεων — σήμανση (highlight, underline, strikeout, squiggly), σχήματα (square, circle, line, polygon, ink), κείμενο (sticky note, free text) και συνδέσμους — η καθεμία επιστρέφει έναν τυποποιημένο χειριστή Annotation που μπορεί να ανακτηθεί ή να επίπεδοποιηθεί αργότερα. Απαιτεί Node.js 22 ή νεότερο.
Οδηγός βήμα-βήμα
Βήμα 1: Εγκατάσταση του πακέτου
git clone https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-TypeScript.git
cd Aspose.PDF-FOSS-for-TypeScript
npm install
npm run buildΕπιβεβαιώστε την εγκατάσταση εισάγοντας την κλάση Document σε ένα νέο αρχείο TypeScript — αυτή η γραμμή πρέπει να λυθεί χωρίς σφάλμα μόλις το πακέτο εγκατασταθεί:
import { Document } from '@asposefoss/pdf';Βήμα 2: Εισαγωγή των απαιτούμενων κλάσεων
Εισάγετε το Document για να ανοίξετε το αρχείο και το Page για τις υπογραφές τύπων σχολίων που χρησιμοποιούνται στα παρακάτω βήματα:
import { Document, Page } from '@asposefoss/pdf';Βήμα 3: Προσθήκη Σχολίων Σήμανσης
Page.AddHighlight(), Page.AddUnderline(), Page.AddSquiggly() και Page.AddStrikeOut() δέχονται όλοι έναν πίνακα quads — ένα 8-αριθμητικό τετράγωνο (x1,y1,x2,y2,x3,y3,x4,y4) ανά περιοχή κειμένου που επισημαίνεται — συν ένα color και προαιρετικό contents. Η βιβλιοθήκη δημιουργεί αυτόματα τη ροή εμφάνισης (/AP) για όλα τα τέσσερα υποτύπους:
import { Document } from '@asposefoss/pdf';
const doc = Document.OpenFile('input.pdf');
const page = doc.Pages[0];
page.AddHighlight({
quads: [72, 700, 300, 700, 72, 685, 300, 685],
color: [1, 1, 0],
contents: 'Yellow highlight',
});
page.AddUnderline({
quads: [72, 660, 300, 660, 72, 645, 300, 645],
color: [0, 0, 1],
});
page.AddStrikeOut({
quads: [72, 620, 300, 620, 72, 605, 300, 605],
color: [1, 0, 0],
});
doc.WriteTo('annotated.pdf');Βήμα 4: Προσθήκη Σχημάτων και Σχολίων Μελάνης
Page.AddSquare() και Page.AddCircle() δέχονται ένα περιβάλλον rect συν color (γραμμή) και προαιρετικό fill. Page.AddLine() δέχεται ένα 4-αριθμητικό line (x1,y1,x2,y2) και προαιρετικά άκρα βέλους. Page.AddInk() δέχεται paths — έναν πίνακα επίπεδων ζευγών σημείων, ένα ανά κίνηση πένας:
page.AddSquare({ rect: [100, 500, 220, 560], color: [0.8, 0, 0], fill: [1, 1, 0.5], width: 2 });
page.AddCircle({ rect: [250, 500, 370, 560], color: [0, 0.5, 0], width: 2 });
page.AddLine({
line: [100, 470, 370, 470],
color: [0, 0, 0.7],
width: 2,
startEnding: 'OpenArrow',
endEnding: 'ClosedArrow',
});
page.AddInk({
paths: [[100, 400, 130, 430, 160, 390, 190, 420]],
color: [0.6, 0, 0.6],
width: 2,
});Βήμα 5: Προσθήκη Αυκόλουθης Σημείωσης και Ελεύθερου Κειμένου
Page.AddTextNote() τοποθετεί ένα εικονίδιο με δυνατότητα κλικ που ανοίγει ένα αναδυόμενο παράθυρο σχολίου. Page.AddFreeText() σχεδιάζει κείμενο απευθείας στη σελίδα μέσα στο rect του:
page.AddTextNote({
rect: [400, 700, 420, 720],
icon: 'Note',
author: 'Reviewer',
contents: 'This is a sticky-note annotation.',
});
page.AddFreeText({
rect: [400, 600, 550, 660],
contents: 'FreeText sample',
fontSize: 10,
align: 'center',
fill: [1, 1, 0.8],
width: 1,
});Βήμα 6: Ισοπεδίαση Σχολίου σε Στατικό Περιεχόμενο
Κάθε χειριστήριο σημείωσης που επιστρέφεται από μια κλήση Add* διαθέτει μια μέθοδο Flatten() που ενσωματώνει την εμφάνιση της σημείωσης στη ροή περιεχομένου της σελίδας και την αφαιρεί από το /Annots. Μετά την επίπεδη μετατροπή δεν απομένει τίποτα για κλικ ή επεξεργασία σε έναν προβολέα:
const note = page.AddFreeText({
rect: [210, 535, 470, 590],
contents: 'Sticky note — flattened into the page.',
fontSize: 11,
align: 'left',
});
note.Flatten(); // -> boolean; bakes the annotation, unwires itself from /Annots
Βήμα 7: Αναζήτηση κειμένου σημείωσης
Page.SearchAnnotationText() and Page.SearchAnnotations() είναι διακριτά και στις δύο κατευθύνσεις: SearchAnnotationText() ταιριάζει με κυριολεκτικά μεταδεδομένα σημειώσεων (/Contents, /T, /Subj), ενώ SearchAnnotations() ταιριάζει με το rendered κείμενο σημειώσεων σήμανσης όπως FreeText:
const metadataHits = page.SearchAnnotationText('confidential');
for (const hit of metadataHits) {
console.log(hit.key, hit.value); // e.g. 'Contents', 'confidential'
}
const renderedHits = page.SearchAnnotations('confidential');
console.log(renderedHits.length);Κοινά προβλήματα και διορθώσεις
Page.AddHighlight() (ή άλλη μέθοδο σήμανσης) σχεδιάζεται στο λάθος σημείο. quads είναι ένας επίπεδος πίνακας 8 αριθμών (x1,y1,x2,y2,x3,y3,x4,y4), όχι ένα rect — η μεταβίβαση ενός ορθογωνίου 4 αριθμών παράγει ένα εκφυλισμένο ή ελλιπές τετράγωνο. Δημιουργήστε ένα τετράγωνο ανά γραμμή του επισημασμένου κειμένου.
Μια επίπεδη σημείωση είναι ακόμη κλικαρίσιμη. Flatten() πρέπει να κληθεί στο αντικείμενο που επιστρέφει η Add* κλήση, και το έγγραφο πρέπει να αποθηκευτεί (doc.WriteTo() / doc.Save()) μετά το επίπεδο — η αλλαγή υπάρχει μόνο στη μνήμη μέχρι να γραφτεί ξανά το αρχείο.
SearchAnnotationText() δεν επιστρέφει αποτελέσματα παρόλο που το κείμενο είναι ορατό στη σελίδα. Αναζητά μόνο πεδία μεταδεδομένων της σημείωσης (/Contents, /T, /Subj) — ορατό κείμενο σημειώσεων που αποδίδεται από τη δική της εμφάνιση (π.χ. ένα FreeText body) εντοπίζεται από SearchAnnotations() αντίθετα, και κανένα δεν αναζητά το κανονικό περιεχόμενο της σελίδας (use Page.GetText() or Page.Search() για αυτό).
Τα σήματα διαγραφής δεν εμφανίζονται όταν γίνεται αναζήτηση σε σημειώσεις. Page.AddRedact() δημιουργεί ένα RedactAnnotation, ένας διακριτός υποτύπος από τις σημειώσεις σήμανσης/σχήματος/κειμένου που καλύπτονται εδώ — δείτε το Redaction οδηγό.
Συχνές Ερωτήσεις
Πόσους υποτύπους σημειώσεων υποστηρίζει το Page;
Η βιβλιοθήκη δημιουργεί εμφανίσεις για σήμανση (υπογράμμιση, υπεργράμμιση, διαγράμμιση, κυματιστή γραμμή), σχήματα (τετράγωνο, κύκλο, γραμμή, πολύγωνο, μελάνι), κείμενο (σημείωμα αυτοκόλλητο, ελεύθερο κείμενο), συνδέσμους και σφραγίδες — καθώς και σημειώσεις επισύναψης αρχείου και διαγραφής, που καλύπτονται στους δικούς τους οδηγούς «πώς-να».
Μπορώ να διαβάσω τις σημειώσεις που ήδη υπάρχουν σε μια σελίδα;
Ναι — Page.Annotations επιστρέφει τις υπάρχουσες σημειώσεις ως έναν πίνακα από typed handles που μπορείτε να εξετάσετε, να επεξεργαστείτε ή να τα επίπεδοποιήσετε, και Page.RemoveAnnotation(a) αφαιρεί μία.
Ποια είναι η διαφορά μεταξύ της επίπεδωσης μιας σημείωσης και της εφαρμογής διαγραφής;
Flatten() ενσωματώνει το appearance στην σελίδα και αφαιρεί το αντικείμενο σημείωσης, αλλά οποιοδήποτε κείμενο ή εικόνα που βρίσκεται κάτω από αυτήν παραμένει αμετάβλητο. ApplyRedactions() επαναγράφει καταστροφικά τη ροή περιεχομένου έτσι ώστε το καλυμμένο περιεχόμενο να εξαφανιστεί — δείτε τον οδηγό Διαγραφής για λεπτομέρειες.
Διατηρούνται οι σημειώσεις κατά τη διάρκεια μιας αποθήκευσης/ανοιγματος;
Ναι — οι σημειώσεις που προστέθηκαν πριν από doc.WriteTo() / doc.Save() γράφονται στο PDF και διαβάζονται σωστά στην επόμενη Document.Open() / Document.OpenFile().