Annotations
Annotaties
Deze pagina behandelt het maken, lezen, zoeken en flattenen van PDF-annotaties. Page biedt één Add*() methode per annotatiesubtype, die elk een live Annotation handle teruggeven; de Annotation basisklasse en zijn subtypes (TextAnnotation, StampAnnotation, MarkupAnnotation en andere) geven de eigenschappen van de annotatie weer voor lezen en bewerken.
Markup-, notitie- en linkannotaties aanmaken
De vier tekst-markupmethoden — Page.AddHighlight(), Page.AddUnderline(), Page.AddSquiggly() en Page.AddStrikeOut() — nemen een quads array (/QuadPoints) en retourneren een MarkupAnnotation. Page.AddLink() maakt een klikbaar gebied met een URI of interne actie, en Page.AddTextNote() voegt een plaknotitie-icoon toe dat een pop-up opent met contents tekst, en retourneert een TextAnnotation.
page.AddHighlight({ quads, color: [1, 1, 0], contents: 'Yellow highlight' });
page.AddUnderline({ quads, color: [0, 0, 1] });
page.AddStrikeOut({ quads, color: [1, 0, 0] });
page.AddLink({
rect: [100, 700, 220, 716],
action: { type: 'uri', uri: 'https://example.com' },
border: 0,
});
page.AddTextNote({
rect: [x, y, x + 20, y + 20], icon: 'Note', author: 'Reviewer',
contents: 'This is a sticky-note annotation.',
});Page biedt ook vorm- en vrije-hand-methoden — AddSquare(), AddCircle(), AddLine(), AddPolygon(), AddPolyline(), AddInk(), AddFreeText(), AddCaret() en AddStamp() — die elk de overeenkomstige annotatie-handle voor dat subtype retourneren en automatisch de /AP weergave genereren.
Annotaties lezen en opsommen
page.Annotaties is een array van alle Annotation op de pagina. Elke annotatie, ongeacht subtype, geeft Subtype, Rect, Color, Contents, Name, Layer, ModDate, Flags, Print, Hidden en Opacity weer; subtypes voegen hun eigen velden toe, zoals StampAnnotation.StampName of MarkupAnnotation.QuadPoints.
const freeText = page.Annotations.find((a) => a.Subtype === 'FreeText');
if (freeText) {
freeText.Contents = 'Updated note text';
}Zoeken van annotatietekst
Page.SearchAnnotationText() and Page.SearchAnnotations() zijn opzettelijk gescheiden. SearchAnnotationText() vindt overeenkomsten in de tekst en aantekening carries in plaats van trekt — een notitie’s /Contents, zijn auteur (/T), of zijn onderwerp (/Subj) — en retourneert AnnotationTextMatch[] ({ annot, key, value, text }). SearchAnnotations() vindt overeenkomsten in de tekst en aantekening draws, zoals een FreeText’s zichtbare woorden, en retourneert AnnotationMatch[] ({ annot, text, quads }).
// A sticky note's /Contents text — found by SearchAnnotationText, not SearchAnnotations.
const textHits = page.SearchAnnotationText('body secret');
console.log(textHits[0].key, textHits[0].value); // 'Contents' 'body secret'
// A FreeText's rendered words — found by SearchAnnotations, not SearchAnnotationText.
const drawnHits = page.SearchAnnotations('bravo');Flattenen van annotaties
Annotation.Flatten() bakt de /AP weergave van een annotatie direct in de content-stream van de pagina op zijn /Rect, en verwijdert deze vervolgens uit /Annots. Het resultaat is permanente, statische inhoud — geen afzonderlijke annotatie meer die een gebruiker kan klikken, bewerken of verbergen.
const note = page.AddTextNote({
rect: [72, 660, 92, 680], icon: 'Comment', contents: 'Reviewed and approved.',
});
note.Flatten();Tips en best practices
- Roep
Flatten()aan op het object dat direct wordt geretourneerd door deAdd*()-aanroep — een annotatie die later wordt verkregen doorpage.Annotatiesopnieuw te lezen, is een andere objectreferentie. SearchAnnotationText()enSearchAnnotations()bestrijken verschillende tekst: voer beide uit als je een zin wilt vinden ongeacht of deze in een notitie is getypt of op de pagina is getekend.- De vier opmaakmethoden (
AddHighlight,AddUnderline,AddSquiggly,AddStrikeOut) genereren hun/APweergave automatisch — handmatig tekenen in de content-stream is niet nodig. - Encryptie overleeft een ronde reis: annotaties die vóór
Document.Save()zijn toegevoegd met eenencryptoptie blijven geldig nadat het document opnieuw is geopend en ontcijferd.
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
page.Annotations.find() retourneert undefined voor een annotatie die je zojuist hebt toegevoegd | Zoeken naar een verouderde array die is vastgelegd voordat de annotatie werd toegevoegd | Lees page.Annotations opnieuw na de Add*()-aanroep, of gebruik de door de aanroep rechtstreeks geretourneerde handle |
SearchAnnotationText() vindt niets voor tekst die zichtbaar is op de pagina | De tekst wordt weergegeven door de annotatie (bijv. een FreeText’s body), niet meegenomen in /Contents | Gebruik SearchAnnotations() in plaats daarvan — het komt overeen met de getekende tekst |
Annotatie blijft bewerkbaar verschijnen na Flatten() | Flatten() werd aangeroepen op een kopie in plaats van de handle Add*() die werd geretourneerd | Roep Flatten() aan op het object dat rechtstreeks door de aanmaakmethode wordt geretourneerd |
FAQ
Wat is het verschil tussen SearchAnnotationText en SearchAnnotations?
SearchAnnotationText() Komt overeen met de tekst van een annotatie carries — /Contents, /T (author), of /Subj — zoals een sticky note’s body. SearchAnnotations() matcht tekst met een annotatie draws op de pagina, zoals een FreeText’s zichtbare woorden. De twee zijn disjunct: een overeenkomst in de één zal niet in de andere verschijnen.
Hoe maak ik een annotatie permanent en niet-interactief?
Roep Flatten() aan op de Annotation handle die wordt geretourneerd door de Add*() methode die deze heeft gemaakt. Dit verwerkt zijn weergave in de inhoudsstroom van de pagina en verwijdert het uit /Annots.
Welke annotatie-subtypes worden ondersteund?
Page biedt creatiemethoden voor tekstmarkup (AddHighlight, AddUnderline, AddSquiggly, AddStrikeOut), notities en bijschriften (AddTextNote, AddFreeText, AddCaret), koppelingen (AddLink), vormen (AddSquare, AddCircle, AddLine, AddPolygon, AddPolyline), vrijehand-inkt (AddInk), stempels (AddStamp), en bestandsbijlagen (AddFileAttachment).
Hoe lijst ik alle annotaties die al op een pagina staan?
Lees page.Annotaties, een array van Annotation handles. Elk biedt Subtype, Rect, Color, Contents en de andere gedeelde eigenschappen, zodat je ze kunt filteren of inspecteren met standaard array-methoden.
API Reference Samenvatting
| Klasse/Methode | Beschrijving |
|---|---|
Annotation | Basis afhandeling over elke annotatie; maakt Subtype, Rect, Color, Contents, Name, Flags, Print, Hidden, Opacity beschikbaar |
Annotation.Flatten() | Verwerk de weergave van de annotatie in statische paginainhoud |
TextAnnotation | Een /Text plakbriefje-handvat; voegt Icon, Open, Author toe |
StampAnnotation | Een /Stamp rubberstempel-handvat; voegt StampName toe |
MarkupAnnotation | Een tekstopmaak-handvat (Highlight/Underline/StrikeOut/Squiggly); voegt MarkupType, QuadPoints toe |
Page.AddHighlight() / Page.AddUnderline() / Page.AddStrikeOut() / Page.AddSquiggly() | Maak een tekstopmaak-annotatie over /QuadPoints |
Page.AddTextNote() | Maak een sticky-note-annotatie |
Page.AddLink() | Maak een klikbare link met een URI of interne actie |
Page.Annotations | Elke Annotation op de pagina, als een array |
Page.SearchAnnotationText() | Zoek de tekst die een annotatie draagt (/Contents, /T, /Subj) |
Page.SearchAnnotations() | Zoek de tekst die een annotatie op de pagina tekent |