Introducere

Postarea introductory post acoperă pe scurt adnotările: evidențieri, sublinieri, note adezive și ștampile, adăugate prin Page.AddHighlight(), Page.AddUnderline() și metode similare. Aceasta este o mică parte din ceea ce suportă cu adevărat un Page — galeria de adnotări din această bibliotecă include markup, forme libere, linkuri cu navigare reală și acțiuni de trimitere a formularelor, și căutare, toate accesibile direct din Page.

Acest articol trece prin restul acelei suprafețe: metodele de adnotare de formă și de mână liberă, ce poate face de fapt acțiunea unei adnotări Link, și cele două moduri diferite de a căuta conținutul adnotării în funcție de faptul dacă textul pe care îl cauți se află în aspectul adnotării sau în comentariul său /Contents.

Fiecare metodă de adnotare returnează un manipulator tipizat limitat la adnotarea pe care tocmai a creat-o, iar fiecare adnotare de pe o pagină poate fi citită ulterior prin page.Annotations.


Ce este inclus

Adnotări markup

Page.AddHighlight(), Page.AddUnderline(), Page.AddSquiggly() și Page.AddStrikeOut() acceptă toate aceeași structură de opțiuni — un set de puncte quad care marchează zona de text și o culoare opțională — și toate patru returnează un MarkupAnnotation. Punctele quad sunt de obicei obținute dintr-o căutare de text sau dintr-un dreptunghi de text cunoscut.

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

Note și Text Autonom

Page.AddTextNote() adaugă o pictogramă clasică de notiță adezivă care deschide o fereastră pop-up de comentariu la clic, returnând un TextAnnotation. Page.AddFreeText() în schimb trasează textul său direct pe pagină în interiorul unei casete încadrate, cu dimensiunea propriului font, aliniere și culoare de umplere — util pentru apeluri care ar trebui să fie vizibile fără a deschide nimic.

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

Forme și Cerneală Liberă

Page.AddSquare() și Page.AddCircle() trasează un dreptunghi sau elipsă încadrată, fiecare cu o umplere interioară opțională. Page.AddLine() trasează o linie dreaptă între două puncte, cu stiluri de vârf de săgeată selectabile independent (startEnding/endEnding, de exemplu 'OpenArrow'/'ClosedArrow') la fiecare capăt. Page.AddPolygon() și Page.AddPolyline() trasează forme închise și deschise cu multiple puncte dintr-o listă plată de coordonate, iar Page.AddInk() înregistrează una sau mai multe trăsături de stilou liber ca paths de liste de puncte.

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

Legături și Acțiunile Lor

Page.AddLink() returnează un LinkAnnotation al cărui action decide ce se întâmplă la clic: { type: 'uri', uri: '...' } deschide un URL extern, { type: 'goto', page: N } sare la o pagină din același document și { type: 'submit', url: '...', format: 'html' } trimite valorile curente ale câmpurilor de formular către un endpoint. Un număr de pagină goto în afara intervalului sau un obiect de acțiune malformat este respins în momentul creării, în loc să fie acceptat silențios.

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.

Căutarea Conținutului Anotărilor

Două metode diferite caută textul adnotării și sunt deliberat distincte: Page.SearchAnnotations() caută textul apariției proprii a unei adnotări desenează — eticheta vizibilă pe o FreeText sau ștampilă, de exemplu — în timp ce Page.SearchAnnotationText() caută textul transportat în adnotării /Contents intrarea, cum ar fi corpul comentariului unei note adezive. O potrivire în una nu implică o potrivire în cealaltă.

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

Anotațiile care nu mai sunt necesare pot fi eliminate direct cu Page.RemoveAnnotation(), furnizând fie identificatorul anotației, fie dicționarul său de bază.


Start rapid

Instalați pachetul, apoi adăugați o evidențiere, un link și o notă adezivă pe o pagină existentă:

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

Formate suportate

FormatExtensieCiteșteScrie
PDFpdf✓✓
Markdownmd✓✓
SVGsvg✓✓
TIFFtiff✓✓
DOCXdocx—✓
HTMLhtml—✓
PNGpng—✓
EPUBepub—✓

Open Source & Licențiere

Aspose.PDF FOSS pentru TypeScript este lansat sub licența MIT, cu sursa publicată pe GitHub. Nu există filigran de evaluare, limită de utilizare sau fișier de licență separat de gestionat, iar biblioteca poate fi utilizată în produse comerciale fără redevențe.

Pachetul este în prezent la versiunea 0.1.0, reflectând o dezvoltare activă în stadiu incipient. Node.js (>=22) este singura cerință de runtime, iar pachetul nu are alte dependențe terțe.


Începeți

Resurse conexe