Hogyan dolgozzunk az annotációkkal a TypeScript-ben

Hogyan dolgozzunk az annotációkkal a TypeScript-ben

Ez az útmutató bemutatja, hogyan lehet PDF-feljegyzéseket hozzáadni, laposítani és keresni a Aspose.PDF FOSS segítségével a TypeScript számára. A Page osztály minden feljegyzés al-típushoz egy Add* metódust biztosít — jelölés (kiemelés, aláhúzás, áthúzás, hullámos), alakzatok (négyzet, kör, vonal, sokszög, tinta), szöveg (ragasztó jegyzet, szabad szöveg), és hivatkozások — mindegyik egy típusos Annotation kezelőt ad vissza, amely később visszaolvasható vagy laposítható. Node.js 22 vagy újabb verzió szükséges.

Lépésről lépésre útmutató

1. lépés: A csomag telepítése

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

Ellenőrizze a telepítést a Document osztály importálásával egy új TypeScript fájlban — ennek a sornak hibamentesen kell feloldódnia, miután a csomag telepítve van:

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

2. lépés: A szükséges osztályok importálása

Importálja a Document a fájl megnyitásához, és a Page az alábbi lépésekben használt annotációtípus-aláírásokhoz:

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

3. lépés: Jelölő annotációk hozzáadása

Page.AddHighlight(), Page.AddUnderline(), Page.AddSquiggly() és Page.AddStrikeOut() mind egy quads tömböt fogadnak — egy 8 számjegyű kvadrát (x1,y1,x2,y2,x3,y3,x4,y4) minden kiemelt szövegterülethez — plusz egy color és opcionális contents. A könyvtár automatikusan előállítja a megjelenítési adatfolyamot (/AP) a négy altípushoz:

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

4. lépés: Alak- és tinta-annotációk hozzáadása

Page.AddSquare() és Page.AddCircle() egy határoló rect-t fogadnak, plusz color (körvonal) és opcionális fill. Page.AddLine() egy 4 számjegyű line-t (x1,y1,x2,y2) és opcionális nyílvégeket fogad. Page.AddInk() paths-t fogad — egy lapos pontpár tömbökből álló tömböt, egyet minden tollvonásra:

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

5. lépés: Ragadós jegyzet és szabad szöveg hozzáadása

Page.AddTextNote() egy kattintható ikont helyez el, amely megnyit egy megjegyzés felugró ablakot. Page.AddFreeText() közvetlenül a lapra rajzol szöveget annak rect belsejében:

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

6. lépés: Annotáció laposítása statikus tartalommá

Minden annotáció-kezelő, amelyet egy Add* hívás ad vissza, rendelkezik egy Flatten() metódussal, amely beégeti az annotáció megjelenését az oldal tartalmi adatfolyamába, és eltávolítja azt a /Annots-ből. A laposítás után már nem marad semmi, amire kattintani vagy szerkeszteni lehetne a megjelenítőben:

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

7. lépés: Annotációszöveg keresése

Page.SearchAnnotationText() and Page.SearchAnnotations() nem átfedőek mindkét irányban: SearchAnnotationText() illeszkedik a szó szerinti annotáció metaadatokhoz (/Contents, /T, /Subj), míg SearchAnnotations() illeszkedik a rendered jelölőnyelvi annotációk szövegéhez, például 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);

Gyakori problémák és megoldások

Page.AddHighlight() (vagy egy másik jelölőnyelvi módszer) a helytelen helyen jelenik meg. quads egy 8 számú lapos tömb (x1,y1,x2,y2,x3,y3,x4,y4), nem egy rect — egy 4 számjegyből álló téglalap átadása degenerált vagy hiányzó négyszöget eredményez. Készíts egy négyszöget a kiemelt szöveg minden egyes sora számára.

A lapított annotáció továbbra is kattintható. Flatten() azt az objektumot kell meghívni, amelyet a Add* hívás visszaad, és a dokumentumot menteni kell (doc.WriteTo() / doc.Save()) a lapítás után — a változás csak a memóriában létezik, amíg a fájl vissza nem íródik.

SearchAnnotationText() nem ad találatot, annak ellenére, hogy a szöveg látható az oldalon. Csak az annotáció metaadat mezőit keres (/Contents, /T, /Subj) — látható jelölő szöveg, amely az annotáció saját megjelenéséből kerül renderelésre (például egy FreeText body) megtalálható SearchAnnotations() helyette, és nem keres a szokásos oldal tartalmában (használja Page.GetText() or Page.Search() ehhez).

A redakciós jelek nem jelennek meg az annotációk keresésekor. Page.AddRedact() létrehoz egy RedactAnnotation, egy különálló altípust a jelölés/forma/szöveg annotációktól, amelyek itt lefedettek — lásd a Redaction útmutatót.

Gyakran Ismételt Kérdések

Hány annotáció alcsaládot támogat a Page?

A könyvtár megjelenéseket generál a jelölésekhez (kiemelés, aláhúzás, áthúzás, hullámos), formákhoz (négyzet, kör, vonal, sokszög, tinta), szöveghez (ragadós jegyzet, szabad szöveg), hivatkozásokhoz és pecsétekhez — valamint fájlcsatolás és pirosítás annotációkhoz, amelyek saját útmutatóikban vannak leírva.

Olvashatok olyan annotációkat, amelyek már léteznek egy oldalon?

Igen — a Page.Annotations visszaadja a meglévő annotációkat egy típusos kezelőket tartalmazó tömbként, amelyet megtekinthet, szerkeszthet vagy laposíthat, és a Page.RemoveAnnotation(a) eltávolít egyet.

Mi a különbség egy annotáció laposításában és egy pirosítás alkalmazásában?

Flatten() létrehozza egy annotációjának appearance az oldalra, és eltávolítja a megjegyzés objektumot, de az alatta lévő szöveg vagy kép tartalom érintetlen marad. ApplyRedactions() destruktívan felülírja a tartalomfolyamot, így a lefedett tartalom eltűnik — lásd a Redaction útmutatót a részletekért.

Megmaradnak a annotációk egy mentés/megnyitás körúton?

Igen — a doc.WriteTo() / doc.Save() előtt hozzáadott annotációk be vannak írása a PDF-be, és a következő Document.Open() / Document.OpenFile() során helyesen visszaolvasásra kerülnek.

Lásd még:

 Magyar