Εισαγωγή

Η εισαγωγική ανάρτηση καλύπτει εν συντομία τις σημειώσεις: υπογραμμίσεις, επισημάνσεις, αυτοκόλλητες σημειώσεις και σφραγίδες, που προστίθενται μέσω Page.AddHighlight(), Page.AddUnderline() και παρόμοιων μεθόδων. Αυτό είναι ένα μικρό τμήμα του τι υποστηρίζει πραγματικά ένα Page — η συλλογή σημειώσεων σε αυτή τη βιβλιοθήκη καλύπτει σήμανση, ελεύθερα σχήματα, συνδέσμους με πραγματική πλοήγηση και ενέργειες υποβολής φορμών, καθώς και αναζήτηση, όλα προσβάσιμα απευθείας από Page.

Αυτή η ανάρτηση εξετάζει το υπόλοιπο αυτού του επιπέδου: τις μεθόδους σχήματος και ελεύθερης σχεδίασης σημειώσεων, τι μπορεί πραγματικά να κάνει η ενέργεια μιας Link σημείωσης, και τους δύο διαφορετικούς τρόπους αναζήτησης του περιεχομένου της σημείωσης ανάλογα με το αν το κείμενο που ψάχνετε βρίσκεται στην εμφάνιση της σημείωσης ή στο /Contents σχόλιό της.

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


Τι περιλαμβάνεται

Σημειώσεις σήμανσης

Page.AddHighlight(), Page.AddUnderline(), Page.AddSquiggly() και Page.AddStrikeOut() δέχονται όλοι το ίδιο σχήμα επιλογών — ένα σύνολο τετραγωνικών σημείων που σηματοδοτούν την περιοχή κειμένου και ένα προαιρετικό χρώμα — και και οι τέσσερις επιστρέφουν ένα MarkupAnnotation. Τα τετραγωνικά σημεία συνήθως προέρχονται από μια αναζήτηση κειμένου ή από γνωστό ορθογώνιο κειμένου.

const markup = (body: [number, number, number, number], sample: string,
  add: (quads: number[]) => void): void => {
  const yMid = (body[1] + body[3]) / 2 - 6;
  const textRect: [number, number, number, number] = [body[0] + 4, yMid, body[2] - 4, yMid + 16];
  page.AddText(sample, textRect[0], textRect[1], { fontSize: 12 });
  add(rectToQuads(textRect));
};

markup(cardBody, 'Highlight this phrase', (quads) =>
  page.AddHighlight({ quads, color: [1, 1, 0], contents: 'Yellow highlight' }));
markup(cardBody, 'Underline this phrase', (quads) =>
  page.AddUnderline({ quads, color: [0, 0, 1] }));
markup(cardBody, 'Squiggle this phrase', (quads) =>
  page.AddSquiggly({ quads, color: [1, 0.5, 0] }));
markup(cardBody, 'Strike this phrase out', (quads) =>
  page.AddStrikeOut({ quads, color: [1, 0, 0] }));

Σημειώσεις και Απομονωμένο Κείμενο

Page.AddTextNote() προσθέτει ένα κλασικό εικονίδιο αυτοκόλλητης σημείωσης που ανοίγει ένα αναδυόμενο παράθυρο σχολίου όταν κάνετε κλικ, επιστρέφοντας ένα TextAnnotation. Page.AddFreeText() αντίθετα σχεδιάζει το κείμενό του απευθείας στη σελίδα μέσα σε ένα πλαίσιο με περίγραμμα, με το δικό του μέγεθος γραμματοσειράς, στοίχιση και χρώμα γεμίσματος — χρήσιμο για επισημάνσεις που πρέπει να είναι ορατές χωρίς να ανοίγει κάτι.

page.AddTextNote({
  rect: [x, y, x + 20, y + 20], icon: 'Note', author: 'Reviewer',
  contents: 'This is a sticky-note annotation.',
});

page.AddFreeText({
  rect: [220, 60, 520, 96],
  contents: 'FreeText sample', fontSize: 10, align: 'center',
  fill: [1, 1, 0.8], width: 1,
});

Σχήματα και Ελεύθερο Μελάνι

Page.AddSquare() και Page.AddCircle() σχεδιάζουν ένα ορθογώνιο ή έλλειψη με περίγραμμα, το καθένα με προαιρετική εσωτερική γέμιση. Page.AddLine() σχεδιάζει μια ευθεία γραμμή μεταξύ δύο σημείων, με ανεξάρτητα επιλέξιμα στυλ άκρων βέλους (startEnding/endEnding, π.χ. 'OpenArrow'/'ClosedArrow') σε κάθε άκρο. Page.AddPolygon() και Page.AddPolyline() σχεδιάζουν κλειστά και ανοιχτά πολύ-σημειακά σχήματα από μια επίπεδη λίστα συντεταγμένων, και Page.AddInk() καταγράφει ένα ή περισσότερα ελεύθερα μολύβια ως paths λιστών σημείων.

page.AddSquare({ rect: [50, 400, 130, 435], color: [0.8, 0, 0], fill: [1, 1, 0.5], width: 2 });
page.AddCircle({ rect: [150, 400, 230, 435], color: [0, 0.5, 0], width: 2 });

page.AddLine({
  line: [260, 417, 420, 417],
  color: [0, 0, 0.7], width: 2,
  startEnding: 'OpenArrow', endEnding: 'ClosedArrow',
});

const stroke: number[] = [];
[-8, 6, -4, 10, -2, 8, -6].forEach((dy, i) => stroke.push(440 + i * 12, 417 + dy));
page.AddInk({ paths: [stroke], color: [0.6, 0, 0.6], width: 2 });

Σύνδεσμοι και οι Ενέργειές τους

Page.AddLink() επιστρέφει ένα LinkAnnotation του οποίου το action αποφασίζει τι συμβαίνει κατά το κλικ: { type: 'uri', uri: '...' } ανοίγει μια εξωτερική διεύθυνση URL, { type: 'goto', page: N } μεταβαίνει σε μια σελίδα μέσα στο ίδιο έγγραφο, και { type: 'submit', url: '...', format: 'html' } υποβάλλει τις τρέχουσες τιμές των πεδίων φόρμας σε ένα σημείο τερματισμού. Ένας αριθμός σελίδας goto εκτός εύρους ή ένα κακώς διαμορφωμένο αντικείμενο δράσης απορρίπτεται κατά τη δημιουργία αντί να γίνεται σιωπηλή αποδοχή.

const uriLink = page.AddLink({
  rect: [10, 10, 100, 30], action: { type: 'uri', uri: 'https://example.com' },
});

const gotoLink = page.AddLink({
  rect: [10, 40, 100, 60], action: { type: 'goto', page: 2 },
});

const submitLink = page.AddLink({
  rect: [10, 70, 100, 90],
  action: { type: 'submit', url: 'https://example.com/post', format: 'html' },
});

// page.AddLink({ rect: [...], action: { type: 'goto', page: 99 } }) throws RangeError
// when 99 is out of range for the document.

Αναζήτηση Περιεχομένου Σημείωσης

Δύο διαφορετικές μέθοδοι αναζητούν το κείμενο της σημείωσης, και είναι σκόπιμα διακριτές: Page.SearchAnnotations() αναζητά το κείμενο της δικής της εμφάνισης της σημείωσης σχεδιάζει — η ορατή ετικέτα σε ένα FreeText ή σφραγίδα, για παράδειγμα — ενώ Page.SearchAnnotationText() αναζητά το κείμενο που μεταφέρεται στην /Contents καταχώρηση, όπως το σώμα σχολίου μιας σημείωσης αυτοκόλλητης. Μία αντιστοίχηση στην μία δεν συνεπάγεται αντιστοίχηση στην άλλη.

page.SearchAnnotations('bravo');          // finds it if the annotation's drawn appearance contains it
page.SearchAnnotationText('bravo');       // finds it if the annotation's /Contents comment contains it

Οι σχολιασμοί που δεν χρειάζονται πλέον μπορούν να αφαιρεθούν απευθείας με το Page.RemoveAnnotation(), περνώντας είτε το αναγνωριστικό του σχολιασμού είτε το υποκείμενο λεξικό του.


Γρήγορη Έναρξη

Εγκαταστήστε το πακέτο, έπειτα προσθέστε μια επισήμανση, έναν σύνδεσμο και μια αυτοκόλλητη σημείωση σε μια υπάρχουσα σελίδα:

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
import { Document } from '@asposefoss/pdf';

const doc = Document.OpenFile('input.pdf');
const page = doc.Pages[0];

page.AddHighlight({ quads: [72, 700, 300, 700, 72, 715, 300, 715], color: [1, 1, 0] });

page.AddLink({
  rect: [72, 670, 200, 690], action: { type: 'uri', uri: 'https://example.com' },
});

page.AddTextNote({
  rect: [320, 670, 340, 690], icon: 'Note', author: 'Reviewer',
  contents: 'Please double-check this figure.',
});

doc.WriteTo('annotated.pdf');

Υποστηριζόμενες Μορφές

ΜορφήΕπέκτασηΑνάγνωσηΕγγραφή
PDFpdf✓✓
Markdownmd✓✓
SVGsvg✓✓
TIFFtiff✓✓
DOCXdocx—✓
HTMLhtml—✓
PNGpng—✓
EPUBepub—✓

Ανοιχτού Κώδικα & Άδειες

Aspose.PDF FOSS για το TypeScript κυκλοφορεί υπό την άδεια MIT, με τον κώδικα πηγής δημοσιευμένο στο GitHub. Δεν υπάρχει υδατογράφημα αξιολόγησης, όριο χρήσης ή ξεχωριστό αρχείο άδειας προς διαχείριση, και η βιβλιοθήκη μπορεί να χρησιμοποιηθεί σε εμπορικά προϊόντα χωρίς δικαιώματα.

Το πακέτο βρίσκεται αυτή τη στιγμή στην έκδοση 0.1.0, αντικατοπτρίζοντας ενεργή ανάπτυξη πρώιμου σταδίου. Το Node.js (>=22) είναι η μοναδική απαίτηση χρόνου εκτέλεσης, και το πακέτο δεν έχει άλλες εξαρτήσεις τρίτων.


Ξεκινώντας

Σχετικοί Πόροι