Annotations
Annotationen
Diese Seite behandelt das Erstellen, Lesen, Suchen und Flachlegen von PDF-Annotationen. Page stellt für jeden Annotationstyp eine Add*() Methode bereit, die jeweils einen Live-Annotation-Handle zurückgibt; die Annotation Basisklasse und ihre Unterklassen (TextAnnotation, StampAnnotation, MarkupAnnotation und andere) stellen die Eigenschaften der Annotation zum Lesen und Bearbeiten bereit.
Erstellung von Markup-, Notiz- und Link-Annotationen
Die vier Text-Markup-Methoden — Page.AddHighlight(), Page.AddUnderline(), Page.AddSquiggly() und Page.AddStrikeOut() — akzeptieren ein quads-Array (/QuadPoints) und geben ein MarkupAnnotation zurück. Page.AddLink() erstellt einen anklickbaren Bereich mit einer URI oder einer internen Aktion, und Page.AddTextNote() fügt ein Haftnotiz-Icon hinzu, das ein Popup mit contents Text öffnet und ein TextAnnotation zurückgibt.
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 stellt außerdem Formen- und Freihand-Methoden bereit — AddSquare(), AddCircle(), AddLine(), AddPolygon(), AddPolyline(), AddInk(), AddFreeText(), AddCaret() und AddStamp() — die jeweils den entsprechenden Annotation-Handle für diesen Subtyp zurückgeben und automatisch das /AP Erscheinungsbild erzeugen.
Lesen und Auflisten von Annotationen
page.Annotationen ist ein Array aller Annotation auf der Seite. Jede Annotation, unabhängig vom Subtyp, stellt Subtype, Rect, Color, Contents, Name, Layer, ModDate, Flags, Print, Hidden und Opacity bereit; Subtypen fügen eigene Felder hinzu, wie z.B. StampAnnotation.StampName oder MarkupAnnotation.QuadPoints.
const freeText = page.Annotations.find((a) => a.Subtype === 'FreeText');
if (freeText) {
freeText.Contents = 'Updated note text';
}Durchsuchen von Anmerkungstext
Page.SearchAnnotationText() and Page.SearchAnnotations() sind bewusst getrennt. SearchAnnotationText() findet Treffer im Text einer Annotation carries statt zu zeichnen — einer Notiz’s /Contents, sein Autor (/T), oder ihr Betreff (/Subj) — und gibt zurück AnnotationTextMatch[] ({ annot, key, value, text }). SearchAnnotations() findet Treffer im Text einer Annotation draws, wie ein FreeText’s sichtbare Wörter und gibt zurück 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');Flachlegen von Anmerkungen
Annotation.Flatten() verankert das /AP einer Anmerkung direkt im Inhaltsstrom der Seite an ihrer /Rect und entfernt sie anschließend aus /Annots. Das Ergebnis ist permanenter, statischer Inhalt — keine separate Anmerkung mehr, die ein Betrachter anklicken, bearbeiten oder ausblenden kann.
const note = page.AddTextNote({
rect: [72, 660, 92, 680], icon: 'Comment', contents: 'Reviewed and approved.',
});
note.Flatten();Tipps und bewährte Verfahren
- Rufen Sie
Flatten()auf dem Objekt auf, das direkt vom Aufruf vonAdd*()zurückgegeben wird — eine Anmerkung, die durch erneutes Lesen vonpage.Annotationenanschließend erhalten wird, ist eine andere Objektreferenz. SearchAnnotationText()undSearchAnnotations()decken unterschiedlichen Text ab: führen Sie beide aus, wenn Sie einen Ausdruck finden müssen, egal ob er in eine Notiz eingegeben oder auf die Seite gezeichnet wurde.- Die vier Markup-Methoden (
AddHighlight,AddUnderline,AddSquiggly,AddStrikeOut) erzeugen ihr/APErscheinungsbild automatisch — manuelles Zeichnen im Inhaltsstrom ist nicht erforderlich. - Verschlüsselung übersteht einen Rundweg: Anmerkungen, die vor
Document.Save()mit einerencrypt-Option hinzugefügt wurden, bleiben nach dem erneuten Öffnen und Entschlüsseln des Dokuments gültig.
Häufige Probleme
| Problem | Ursache | Behebung |
|---|---|---|
page.Annotations.find() gibt undefined für eine Annotation, die Sie gerade hinzugefügt haben zurück | Suche in einem veralteten Array, das vor dem Hinzufügen der Annotation erfasst wurde | Lese page.Annotations nach dem Aufruf von Add*() erneut ein, oder verwende den vom Aufruf direkt zurückgegebenen Handle |
SearchAnnotationText() findet nichts für sichtbaren Text auf der Seite | Der Text wird von der Annotation gezeichnet (z.B. der Körper eines FreeText), nicht in /Contents transportiert. | Verwende stattdessen SearchAnnotations() — es entspricht dem gezeichneten Text. |
Die Annotation erscheint nach Flatten() weiterhin editierbar. | Flatten() wurde auf einer Kopie aufgerufen statt auf dem von Add*() zurückgegebenen Handle. | Rufe Flatten() auf dem Objekt auf, das direkt von der Erzeugungsmethode zurückgegeben wird. |
FAQ
Was ist der Unterschied zwischen SearchAnnotationText und SearchAnnotations?
SearchAnnotationText() stimmt mit dem Text einer Annotation überein carries — /Contents, /T (Autor), oder /Subj — beispielsweise dem Körper einer Haftnotiz. SearchAnnotations() matcht Text einer Annotation draws auf der Seite, wie ein FreeText’s sichtbare Wörter. Die beiden sind disjunkt: ein Treffer im einen erscheint nicht im anderen.
Wie mache ich eine Anmerkung dauerhaft und nicht interaktiv?
Rufen Sie Flatten() mit dem von der Add*()-Methode zurückgegebenen Annotation-Handle auf. Dadurch wird das Aussehen in den Inhaltsstrom der Seite eingebettet und es wird aus /Annots entfernt.
Welche Anmerkungsuntertypen werden unterstützt?
Page stellt Erzeugungsmethoden für Textauszeichnung (AddHighlight, AddUnderline, AddSquiggly, AddStrikeOut), Notizen und Callouts (AddTextNote, AddFreeText, AddCaret), Links (AddLink), Formen (AddSquare, AddCircle, AddLine, AddPolygon, AddPolyline), Freihand-Tinte (AddInk), Stempel (AddStamp) und Dateianhänge (AddFileAttachment) bereit.
Wie kann ich jede bereits auf einer Seite vorhandene Anmerkung auflisten?
Lese page.Annotationen, ein Array von Annotation-Handles. Jeder stellt Subtype, Rect, Color, Contents und die anderen gemeinsamen Eigenschaften bereit, sodass du sie mit Standard-Array-Methoden filtern oder inspizieren kannst.
API Reference Zusammenfassung
| Klasse/Methode | Beschreibung |
|---|---|
Annotation | Basis-Handle über jede Annotation; stellt Subtype, Rect, Color, Contents, Name, Flags, Print, Hidden, Opacity bereit |
Annotation.Flatten() | Betten Sie das Erscheinungsbild der Annotation in statischen Seiteninhalt ein |
TextAnnotation | Ein /Text Klebezettel-Handle; fügt Icon, Open, Author hinzu |
StampAnnotation | Ein /Stamp Gummistempel-Handle; fügt StampName hinzu |
MarkupAnnotation | Ein Text-Markup-Handle (Highlight/Underline/StrikeOut/Squiggly); fügt MarkupType, QuadPoints hinzu |
Page.AddHighlight() / Page.AddUnderline() / Page.AddStrikeOut() / Page.AddSquiggly() | Erstelle eine Text-Markup-Anmerkung über /QuadPoints |
Page.AddTextNote() | Erstelle eine Haftnotiz-Annotation |
Page.AddLink() | Erstelle einen anklickbaren Link mit einer URI oder internen Aktion |
Page.Annotations | Jedes Annotation auf der Seite, als Array |
Page.SearchAnnotationText() | Finde den Text, den eine Annotation enthält (/Contents, /T, /Subj) |
Page.SearchAnnotations() | Text finden, den eine Anmerkung auf der Seite zeichnet |