Jak pracovat s anotacemi v TypeScript

Jak pracovat s anotacemi v TypeScript

Tento průvodce ukazuje, jak přidávat, zploštit a vyhledávat PDF anotace pomocí Aspose.PDF FOSS pro TypeScript. Třída Page poskytuje jednu Add* metodu pro každý podtyp anotace — markup (zvýraznění, podtržení, přeškrtnutí, vlnovka), tvary (čtverec, kruh, čára, polygon, inkoust), text (poznámka, volný text) a odkazy — každá vrací typovaný Annotation handle, který lze později načíst nebo zploštit. Vyžaduje Node.js 22 nebo novější.

Průvodce krok za krokem

Krok 1: Nainstalujte balíček

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

Ověřte instalaci importováním třídy Document v novém souboru TypeScript — tento řádek by měl být bez chyb, jakmile je balíček nainstalován:

import { Document } from '@asposefoss/pdf';

Krok 2: Importujte požadované třídy

Importujte Document pro otevření souboru a Page pro podpisy typů anotací použité v níže uvedených krocích:

import { Document, Page } from '@asposefoss/pdf';

Krok 3: Přidat značkové anotace

Page.AddHighlight(), Page.AddUnderline(), Page.AddSquiggly() a Page.AddStrikeOut() všechny přijímají pole quads— jeden osmčíselný čtyřúhelník (x1,y1,x2,y2,x3,y3,x4,y4) na každou zvýrazněnou oblast textu— plus color a volitelný contents. Knihovna automaticky generuje proud vzhledu (/AP) pro všechny čtyři podtypy:

import { Document } from '@asposefoss/pdf';

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

page.AddHighlight({
  quads: [72, 700, 300, 700, 72, 685, 300, 685],
  color: [1, 1, 0],
  contents: 'Yellow highlight',
});
page.AddUnderline({
  quads: [72, 660, 300, 660, 72, 645, 300, 645],
  color: [0, 0, 1],
});
page.AddStrikeOut({
  quads: [72, 620, 300, 620, 72, 605, 300, 605],
  color: [1, 0, 0],
});

doc.WriteTo('annotated.pdf');

Krok 4: Přidat tvarové a inkové anotace

Page.AddSquare() a Page.AddCircle() přijímají ohraničující rect plus color (čára) a volitelný fill. Page.AddLine() přijímá 4-číselný line (x1,y1,x2,y2) a volitelné konce šipek. Page.AddInk() přijímá paths— pole plochých dvojic bodů, jedno pro každý tah pera:

page.AddSquare({ rect: [100, 500, 220, 560], color: [0.8, 0, 0], fill: [1, 1, 0.5], width: 2 });
page.AddCircle({ rect: [250, 500, 370, 560], color: [0, 0.5, 0], width: 2 });
page.AddLine({
  line: [100, 470, 370, 470],
  color: [0, 0, 0.7],
  width: 2,
  startEnding: 'OpenArrow',
  endEnding: 'ClosedArrow',
});
page.AddInk({
  paths: [[100, 400, 130, 430, 160, 390, 190, 420]],
  color: [0.6, 0, 0.6],
  width: 2,
});

Krok 5: Přidat lepkavou poznámku a volný text

Page.AddTextNote() umisťuje klikací ikonu, která otevře vyskakovací okno komentáře. Page.AddFreeText() kreslí text přímo na stránce uvnitř svého rect:

page.AddTextNote({
  rect: [400, 700, 420, 720],
  icon: 'Note',
  author: 'Reviewer',
  contents: 'This is a sticky-note annotation.',
});

page.AddFreeText({
  rect: [400, 600, 550, 660],
  contents: 'FreeText sample',
  fontSize: 10,
  align: 'center',
  fill: [1, 1, 0.8],
  width: 1,
});

Krok 6: Zploštit anotaci na statický obsah

Každá rukojeť anotace vrácená voláním Add* má metodu Flatten(), která zapracuje vzhled anotace do proudu obsahu stránky a odstraní jej z /Annots. Po zploštění už v prohlížeči nezůstane nic, co by šlo kliknout nebo upravit:

const note = page.AddFreeText({
  rect: [210, 535, 470, 590],
  contents: 'Sticky note — flattened into the page.',
  fontSize: 11,
  align: 'left',
});

note.Flatten(); // -> boolean; bakes the annotation, unwires itself from /Annots

Krok 7: Vyhledat text anotace

Page.SearchAnnotationText() and Page.SearchAnnotations() jsou disjunktní v obou směrech: SearchAnnotationText() odpovídá doslovným metadatům anotace (/Contents, /T, /Subj), zatímco SearchAnnotations() odpovídá rendered textu značkovacích anotací, jako jsou FreeText:

const metadataHits = page.SearchAnnotationText('confidential');
for (const hit of metadataHits) {
  console.log(hit.key, hit.value); // e.g. 'Contents', 'confidential'
}

const renderedHits = page.SearchAnnotations('confidential');
console.log(renderedHits.length);

Běžné problémy a opravy

Page.AddHighlight() (nebo jiná metoda značkování) se vykresluje na špatném místě. quads je ploché pole o 8 číslech (x1,y1,x2,y2,x3,y3,x4,y4), ne rect — předání 4-čísleného obdélníku vytváří degenerovaný nebo chybějící čtyřúhelník. Vytvořte jeden čtyřúhelník na řádek zvýrazněného textu.

Zploštěná anotace je stále kliknutelná. Flatten() musí být zavolána na objektu vráceném metodou Add* volání, a dokument musí být uložen (doc.WriteTo() / doc.Save()) po zploštění — změna existuje pouze v paměti, dokud není soubor znovu zapsán.

SearchAnnotationText() nevrací žádné výsledky, i když je text na stránce viditelný. Vyhledává pouze pole metadat anotace (/Contents, /T, /Subj) — viditelný text značek vykreslený z vlastního vzhledu anotace (např. a FreeText tělo) je nalezeno pomocí SearchAnnotations() místo toho a nevyhledává běžný obsah stránky (použijte Page.GetText() or Page.Search() k tomu).

Značky redakce se nezobrazují při vyhledávání anotací. Page.AddRedact() vytvoří RedactAnnotation, odlišný podtyp od markup/shape/text anotací pokrytých zde — viz Redaction průvodce.

Často kladené otázky

Kolik podtypů anotací Page podporuje?

Knihovna generuje vzhledy pro markup (highlight, underline, strikeout, squiggly), tvary (square, circle, line, polygon, ink), text (sticky note, free text), odkazy a razítka — plus file attachment a redaction anotace, které jsou pokryty ve svých vlastních how-to průvodcích.

Mohu číst anotace, které již na stránce existují?

Ano — Page.Annotations vrací existující anotace jako pole typovaných handle, které můžete prohlížet, upravovat nebo zploštit, a Page.RemoveAnnotation(a) odebere jednu.

Jaký je rozdíl mezi zploštěním anotace a aplikací redakce?

Flatten() vkládá anotaci appearance do stránky a odstraní objekt anotace, ale jakýkoli text nebo obrázek pod ním zůstane nedotčen. ApplyRedactions() destruktivně přepíše obsahový stream, takže pokrytý obsah samotný zmizí — viz Redaction průvodce pro podrobnosti.

Zůstávají anotace zachovány během cyklu uložení/otevření?

Ano — anotace přidané před doc.WriteTo() / doc.Save() jsou zapsány do PDF a při dalším Document.Open() / Document.OpenFile() jsou správně načteny zpět.

Viz také:

 Čeština