Introduktion

Det introductory post täcker annotationer kort: markeringar, understrykningar, klisterlappar och stämplar, tillagda via Page.AddHighlight(), Page.AddUnderline() och liknande metoder. Det är en liten del av vad en Page faktiskt stödjer — annoteringsgalleriet i detta bibliotek omfattar markup, frihandsformer, länkar med verklig navigation och formulärinlämningsåtgärder, samt sökning, allt nåbart direkt från Page.

Detta inlägg går igenom resten av den ytan: form- och frihandsannotationsmetoderna, vad en Link annotationsåtgärd faktiskt kan göra, och de två olika sätten att söka i annoteringsinnehåll beroende på om texten du letar efter finns i annoteringens utseende eller dess /Contents kommentar.

Varje annoteringsmetod returnerar ett typat handtag som är avgränsat till den annotation som den just skapade, och varje annotation på en sida kan läsas efteråt via page.Annotations.


Vad som ingår

Markup-annotationer

Page.AddHighlight(), Page.AddUnderline(), Page.AddSquiggly() och Page.AddStrikeOut() använder alla samma typ av alternativ — en uppsättning quad points som markerar textområdet och en valfri färg — och alla fyra returnerar en MarkupAnnotation. Quad points härrör vanligtvis från en textsökning eller från en känd textruta.

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] }));

Anteckningar och fristående text

Page.AddTextNote() lägger till en klassisk klistermärkessymbol som öppnar ett kommentarfönster när den klickas på och returnerar en TextAnnotation. Page.AddFreeText() ritar istället sin text direkt på sidan i en inramad ruta, med egen teckenstorlek, justering och fyllningsfärg — användbart för anmärkningar som ska vara synliga utan att öppna något.

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,
});

Former och frihandsbläck

Page.AddSquare() och Page.AddCircle() ritar en inramad rektangel eller ellips, vardera med valfri fyllning på insidan. Page.AddLine() ritar en rak linje mellan två punkter, med oberoende valbara pilspetsstilar (startEnding/endEnding, t.ex. 'OpenArrow'/'ClosedArrow') i varje ände. Page.AddPolygon() och Page.AddPolyline() ritar slutna och öppna mångpunktsformer från en platt lista med koordinater, och Page.AddInk() registrerar ett eller flera frihandspenndrag som paths av punktlistor.

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 });

Länkar och deras åtgärder

Page.AddLink() returnerar en LinkAnnotation vars action bestämmer vad som händer vid klick: { type: 'uri', uri: '...' } öppnar en extern URL, { type: 'goto', page: N } hoppar till en sida i samma dokument, och { type: 'submit', url: '...', format: 'html' } skickar de aktuella formulärfältsvärdena till en endpoint. Ett utanför intervallet goto sidnummer eller ett felaktigt åtgärdsobjekt avvisas vid skapandet istället för att tyst accepteras.

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.

Söka i annoteringsinnehåll

Två olika metoder söker i annoteringstext, och de är avsiktligt disjunkta: Page.SearchAnnotations() söker i texten som en annoterings egna framträdande ritar — den synliga etiketten på en FreeText eller stämpel, till exempel — medan Page.SearchAnnotationText() söker i texten som bärs i annoteringens /Contents post, såsom en klisterlapps kommentarskropp. En matchning i den ena innebär inte en matchning i den andra.

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

Annotationer som inte längre behövs kan tas bort direkt med Page.RemoveAnnotation(), genom att skicka antingen annoteringshandtaget eller dess underliggande ordbok.


Snabbstart

Installera paketet, lägg sedan till en markering, en länk och en klisteranteckning på en befintlig sida:

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');

Stödda format

FormatFiländelseLäsSkriv
PDFpdf✓✓
Markdownmd✓✓
SVGsvg✓✓
TIFFtiff✓✓
DOCXdocx—✓
HTMLhtml—✓
PNGpng—✓
EPUBepub—✓

Öppen källkod & licensiering

Aspose.PDF FOSS för TypeScript är släppt under MIT license, med källkoden publicerad på GitHub. Det finns ingen utvärderingsvattenstämpel, användningsgräns eller separat licensfil att hantera, och biblioteket kan användas i kommersiella produkter utan royalties.

Paketet är för närvarande i version 0.1.0, vilket återspeglar aktiv tidig utveckling. Node.js (>=22) är det enda körningskravet, och paketet har inga andra tredjepartsberoenden.


Kom igång

Relaterade resurser