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 en Document.Open() voor in-memory Uint8Array-gegevens.
  • Paginanummers die worden doorgegeven aan methoden zoals RemovePage() en ExtractPages() zijn 1-gebaseerd, terwijl doc.Pages een 0-gebaseerde array is.
  • Geef { compressed: true } door aan Document.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.Rect om posities te berekenen ten opzichte van de werkelijke breedte en hoogte van de pagina in plaats van coördinaten hard te coderen.

Veelvoorkomende problemen

ProbleemOorzaakOplossing
Document.Open() / OpenFile() gooit InvalidPasswordErrorDe PDF is beveiligd met een wachtwoord en er is geen wachtwoord (of een verkeerd wachtwoord) opgegevenGeef { password: '...' } door aan Document.OpenFile() / Document.Open()
RemovePage() verwijdert de verkeerde paginaPaginanummers die aan RemovePage() worden doorgegeven, zijn 1-gebaseerd, niet 0-gebaseerdGeef een 1-gebaseerd paginanummer door, verschillend van de doc.Pages array-indexering
WriteTo() output is groter dan verwachtDe standaardopslag gebruikt geen xref/object-stream compressieGeef { 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 / MethodeBeschrijving
DocumentCentraal 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
PageEen 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

Zie ook

 Nederlands