Jádro API
Základní API
Tento průvodce ukazuje, jak otevřít, upravit, sestavit a uložit PDF dokumenty pomocí tříd Document a Page — vstupních bodů pro každou operaci v Aspose.PDF FOSS pro TypeScript. Document načítá, vytváří, sestavuje a ukládá celé PDF soubory; Page, dosažitelné přes doc.Pages, poskytuje operace s textem, obrázkem, anotacemi a obsahovým proudem na úrovni jednotlivých stránek.
Životní cyklus dokumentu
Document.OpenFile() otevře PDF z cesty k souboru; Document.Open() přijímá Uint8Array v paměti. Stránky lze prohlížet a upravovat přímo, a Document.WriteTo() zapíše výsledek zpět — volitelně se zkompresí xref-stream a object-stream.
import { Document } from '@asposefoss/pdf';
// Open from disk (or Document.Open(uint8array) for in-memory data)
const doc = Document.OpenFile('input.pdf');
// Inspect and edit pages
const pages = doc.Pages;
console.log(pages.length);
pages[0].Rotate = 90;
doc.RemovePage(2); // 1-based page number
doc.Reorder([3, 1, 2]);
// Metadata
doc.SetMetadata({ title: 'Report', author: 'Jane', custom: { Dept: 'R&D' } });
// Save
doc.WriteTo('output.pdf'); // or: const bytes = doc.Save();
doc.WriteTo('small.pdf', { compressed: true }); // xref stream + object streams
Rozdělování, slučování a extrahování stránek
Document.Split() vrací jeden Document na stránku. Document.ExtractPages() přijímá seznam stránek číslovaný od jedné, povolující opakování, a vrací nový Document pouze s těmito stránkami. Document.Append() a Document.InsertPage() kopírují stránky mezi dokumenty a Document.Merge() kombinuje několik dokumentů do jednoho.
const parts = doc.Split(); // one Document per page
const chapter = doc.ExtractPages([3, 4, 5]); // subset (1-based, repeats allowed) as a new Document
docA.Append(docB); // copy all of docB's pages onto docA
docA.InsertPage(1, docB.Pages[0]); // copy a single page across documents
Vytvoření nového dokumentu
Document.New() zahajuje prázdný dokument na daném PageFormat. Page.AddText() umisťuje text na určenou pozici a Document.AddPage() přidává další stránky, včetně otočeného formátu, jako je PageFormat.A4.landscape().
import { Document, PageFormat } from '@asposefoss/pdf';
const doc = Document.New(PageFormat.A4); // one blank A4 page
doc.Pages[0].AddText('Hello', 72, 720, { fontSize: 14 });
doc.AddPage(PageFormat.A4.landscape()); // append more as you go
doc.WriteTo('scratch.pdf');Vodoznaky a čísla stránek
Page.AddText() také podporuje rotaci, barvu a průhlednost, což stačí k vykreslení čísla stránky a úhlového vodoznaku bez dalších tříd.
const doc = Document.OpenFile('in.pdf');
const page = doc.Pages[0];
// Page number, right-aligned near the bottom-right corner.
const w = page.Rect[2] - page.Rect[0];
page.AddText(`Page ${page.Number}`, w - 40, 20, { fontSize: 10, align: 'right' });
// Semi-transparent diagonal watermark, centered on the page.
page.AddText('DRAFT', page.Rect[2] / 2, page.Rect[3] / 2, {
font: 'Times-Bold', fontSize: 64, color: [0.7, 0.7, 0.7], opacity: 0.4, rotate: 45, align: 'center',
});
doc.WriteTo('out.pdf');Introspekce obsahového streamu
parseContentStream() dekóduje surový /Contents stream stránky do seznamu dvojic operátor/operand a serializeContentStream() převádí upravený seznam operátorů zpět na bajty.
import { parseContentStream, serializeContentStream } from '@asposefoss/pdf';
const ops = parseContentStream(doc.Pages[0].Contents);
// ops: { operator: string, operands: PdfObject[], inlineImage?: {...} }[]
for (const op of ops) {
if (op.operator === 'Tj') console.log('text op:', op.operands);
}
const bytes = serializeContentStream(ops); // round-trips operators + operands
Vícesloupcový tok textu
Page.AddTextBlock() umístí dlouhý řetězec textu do obdélníkového regionu a vrátí jakýkoli text, který se nevešel, což lze předat do druhého volání k pokračování toku do dalšího sloupce.
const rest = page.AddTextBlock(longText, [72, 600, 200, 150], {
font: 'Times-Roman', fontSize: 11, align: 'justify', valign: 'top', leading: 14,
});
if (rest) page.AddTextBlock(rest, [300, 600, 200, 150]); // continue into a 2nd column
Tipy a osvědčené postupy
- Použijte
Document.OpenFile()pro cesty k souborům aDocument.Open()pro dataUint8Arrayv paměti. - Čísla stránek předávaná metodám, jako jsou
RemovePage()aExtractPages(), jsou číslována od 1, zatímcodoc.Pagesje pole číslované od 0. - Předáte
{ compressed: true }doDocument.WriteTo(), abyste povolili kompresi xref-stream a object-stream při výstupu. Document.ExtractPages()přijímá opakovaná čísla stránek, takže stejná zdrojová stránka může být ve výsledku uvedena vícekrát.- Přečtěte
page.Rect, abyste spočítali pozice relativně k skutečné šířce a výšce stránky, místo aby byly souřadnice pevně zakódovány.
Časté problémy
| Problém | Příčina | Oprava |
|---|---|---|
Document.Open() / OpenFile() vyvolá InvalidPasswordError | PDF je chráněn heslem a nebylo zadáno žádné heslo (nebo bylo zadáno špatné) | Předat { password: '...' } do Document.OpenFile() / Document.Open() |
RemovePage() odstraňuje špatnou stránku | Čísla stránek předávaná do RemovePage() jsou číslována od jedné, nikoli od nuly | Předávejte číslo stránky založené na 1, odlišné od indexování pole doc.Pages |
WriteTo() výstup je větší, než se očekávalo | Výchozí uložení nepoužívá kompresi xref/object-stream | Předávejte { compressed: true } do Document.WriteTo() |
FAQ
Přijímá Document.Open() jak cesty k souborům, tak data v paměti?
Document.OpenFile() otevírá ze souborové cesty; Document.Open() přijímá Uint8Array paměťových bajtů.
Je číslování stránek 0-základní nebo 1-základní?
Obojí, v závislosti na API: doc.Pages je prosté 0-základní pole, ale metody jako RemovePage() a ExtractPages() používají 1-základní čísla stránek.
Mohu šifrovat dokument při jeho ukládání?
Ano — předávejte volbu encrypt do WriteTo() / Save() s algorithm: 'aes256' | 'aes128' | 'rc4' a volitelnými hesly uživatele/vlastníka.
Jak mohu snížit velikost výstupního souboru?
Předáte { compressed: true } do Document.WriteTo() pro povolení komprese xref-stream a object-stream.
Mohu prohlížet operátory surového content-stream stránky?
Ano — parseContentStream(doc.Pages[0].Contents) vrací seznam operátorů a serializeContentStream() převádí upravený seznam zpět na bajty.
API Reference Shrnutí
| Třída / Metoda | Popis: |
|---|---|
Document | Centrální vstupní bod pro vytváření, načítání a ukládání PDF dokumentů |
Document.OpenFile() / Document.Open() | Načtěte PDF ze souborové cesty nebo z paměťových bajtů |
Document.New() | Vytvořte prázdný dokument s daným PageFormat |
Document.WriteTo() / Document.Save() | Zapište dokument na cestu souboru nebo vraťte bajty |
Document.Split() / Document.Merge() / Document.ExtractPages() | Rozdělujte, slučujte a extrahujte stránky napříč dokumenty |
Document.Append() / Document.InsertPage() | Zkopírujte stránky z jednoho dokumentu do druhého |
Page | Jedna stránka PDF; poskytuje metody pro text, obrázek, anotaci a content-stream |
Page.AddText() / Page.AddTextBlock() | Přidejte na stránku umístěný nebo proudící text |
parseContentStream() / serializeContentStream() | Analyzujte a znovu serializujte operátory surového content-streamu stránky |