Kern API
Kern-API
Deze gids laat zien hoe je PDF-documenten kunt openen, bewerken, samenstellen en opslaan met de Document en Page klassen — de toegangspunten voor elke bewerking in Aspose.PDF FOSS voor TypeScript. Document laadt, maakt aan, stelt samen en slaat volledige PDF-bestanden op; Page, bereikbaar via doc.Pages, biedt per-pagina tekst-, afbeelding-, annotatie- en content-stream bewerkingen.
Documentlevenscyclus
Document.OpenFile() opent een PDF vanaf een bestandspad; Document.Open() accepteert een in-memory Uint8Array. Pagina’s kunnen ter plaatse worden geïnspecteerd en bewerkt, en Document.WriteTo() schrijft het resultaat terug — optioneel met xref-stream en object-stream compressie.
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
Splitsen, samenvoegen en pagina’s extraheren
Document.Split() retourneert één Document per pagina. Document.ExtractPages() neemt een 1-gebaseerde, herhalingen-toegestane paginalijst en geeft een nieuwe Document terug met alleen die pagina’s. Document.Append() en Document.InsertPage() kopiëren pagina’s tussen documenten, en Document.Merge() combineert meerdere documenten tot één.
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
Een nieuw document maken
Document.New() start een leeg document op een gegeven PageFormat. Page.AddText() plaatst gepositioneerde tekst, en Document.AddPage() voegt verdere pagina’s toe, inclusief een geroteerd formaat zoals 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');Watermerken en paginanummers
Page.AddText() ondersteunt ook rotatie, kleur en doorzichtigheid, wat voldoende is om een paginanummer en een diagonale watermerk weer te geven zonder extra klassen.
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');Introspectie van inhoudsstroom
parseContentStream() decodeert de ruwe /Contents-stroom van een pagina naar een lijst van operator/operand-paren, en serializeContentStream() zet een bewerkte operatorlijst terug om in bytes.
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
Tekststroom over meerdere kolommen
Page.AddTextBlock() stroomt een lange tekstreeks in een rechthoekig gebied en retourneert alle tekst die niet paste, die kan worden doorgegeven aan een tweede oproep om de stroom in een andere kolom voort te zetten.
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
Tips en best practices
- Gebruik
Document.OpenFile()voor bestandspaden enDocument.Open()voor in-memoryUint8Array-gegevens. - Paginanummers die worden doorgegeven aan methoden zoals
RemovePage()enExtractPages()zijn 1-gebaseerd, terwijldoc.Pageseen 0-gebaseerde array is. - Geef
{ compressed: true }door aanDocument.WriteTo()om xref-stream- en object-streamcompressie in de uitvoer in te schakelen. Document.ExtractPages()accepteert herhaalde paginanummers, zodat dezelfde bronpagina meer dan één keer in het resultaat kan voorkomen.- Lees
page.Rectom posities te berekenen ten opzichte van de werkelijke breedte en hoogte van de pagina in plaats van coördinaten hard te coderen.
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
Document.Open() / OpenFile() gooit InvalidPasswordError | De PDF is beveiligd met een wachtwoord en er is geen wachtwoord (of een verkeerd wachtwoord) opgegeven | Geef { password: '...' } door aan Document.OpenFile() / Document.Open() |
RemovePage() verwijdert de verkeerde pagina | Paginanummers die aan RemovePage() worden doorgegeven, zijn 1-gebaseerd, niet 0-gebaseerd | Geef een 1-gebaseerd paginanummer door, verschillend van de doc.Pages array-indexering |
WriteTo() output is groter dan verwacht | De standaardopslag gebruikt geen xref/object-stream compressie | Geef { compressed: true } door aan Document.WriteTo() |
FAQ
Accepteert Document.Open() zowel bestands-paden als gegevens in het geheugen?
Document.OpenFile() opent vanuit een bestandspad; Document.Open() accepteert een Uint8Array van bytes in het geheugen.
Is paginanummering 0-gebaseerd of 1-gebaseerd?
Beide, afhankelijk van de API: doc.Pages is een gewone 0-gebaseerde array, maar methoden zoals RemovePage() en ExtractPages() gebruiken 1-gebaseerde paginanummers.
Kan ik een document versleutelen tijdens het opslaan?
Ja — geef een encrypt-optie door aan WriteTo() / Save() met algorithm: 'aes256' | 'aes128' | 'rc4' en optionele gebruiker/eigenaar-wachtwoorden.
Hoe verklein ik de grootte van het uitvoerbestand?
Geef { compressed: true } door aan Document.WriteTo() om xref-stream- en object-streamcompressie in te schakelen.
Kan ik de ruwe content-stream-operatoren van een pagina inspecteren?
Ja — parseContentStream(doc.Pages[0].Contents) retourneert de operatorlijst, en serializeContentStream() converteert een bewerkte lijst terug naar bytes.
API Reference Samenvatting
| Klasse / Methode | Beschrijving |
|---|---|
Document | Centraal toegangspunt voor het maken, laden en opslaan van PDF-documenten |
Document.OpenFile() / Document.Open() | Laad een PDF vanaf een bestandspad of vanuit in-memory bytes |
Document.New() | Start een leeg document met een gegeven PageFormat |
Document.WriteTo() / Document.Save() | Schrijf het document naar een bestandspad of retourneer bytes |
Document.Split() / Document.Merge() / Document.ExtractPages() | Splits, voeg samen en extraheer pagina’s tussen documenten |
Document.Append() / Document.InsertPage() | Kopieer pagina’s van het ene document naar het andere |
Page | Een enkele PDF-pagina; biedt tekst-, afbeelding-, annotatie- en content-streammethoden |
Page.AddText() / Page.AddTextBlock() | Voeg gepositioneerde of doorlopende tekst toe aan een pagina |
parseContentStream() / serializeContentStream() | Parse en herserialiseer de ruwe content-streamoperatoren van een pagina |