Kern API

Kern-API

Dieser Leitfaden zeigt, wie man PDF-Dokumente mit den Klassen Document und Page öffnet, bearbeitet, zusammenstellt und speichert — die Einstiegspunkte für jede Operation in Aspose.PDF FOSS für TypeScript. Document lädt, erstellt, stellt zusammen und speichert komplette PDF-Dateien; Page, erreichbar über doc.Pages, stellt Operationen für Text, Bild, Annotation und Inhalts-Stream pro Seite bereit.


Dokumentenlebenszyklus

Document.OpenFile() öffnet ein PDF aus einem Dateipfad; Document.Open() akzeptiert ein im Speicher befindliches Uint8Array. Seiten können vor Ort inspiziert und bearbeitet werden, und Document.WriteTo() schreibt das Ergebnis zurück — optional mit xref-stream und object-stream Kompression.

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

Aufteilen, Zusammenführen und Extrahieren von Seiten

Document.Split() gibt pro Seite ein Document zurück. Document.ExtractPages() nimmt eine 1-basierte, Wiederholungen zulassende Seitenliste und liefert ein neues Document mit genau diesen Seiten. Document.Append() und Document.InsertPage() kopieren Seiten zwischen Dokumenten, und Document.Merge() kombiniert mehrere Dokumente zu einem.

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

Erstellen eines neuen Dokuments

Document.New() startet ein leeres Dokument bei einem gegebenen PageFormat. Page.AddText() platziert positionierten Text, und Document.AddPage() fügt weitere Seiten hinzu, einschließlich eines gedrehten Formats wie 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');

Wasserzeichen und Seitenzahlen

Page.AddText() unterstützt außerdem Drehung, Farbe und Transparenz, was ausreicht, um eine Seitenzahl und ein diagonales Wasserzeichen ohne zusätzliche Klassen darzustellen.

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

Introspektion des Inhaltsstroms

parseContentStream() dekodiert den rohen /Contents-Strom einer Seite in eine Liste von Operator/Operand-Paaren, und serializeContentStream() konvertiert eine bearbeitete Operatorliste zurück 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

Mehrspaltiger Textfluss

Page.AddTextBlock() fließt einen langen Textstring in einen rechteckigen Bereich und gibt den Text zurück, der nicht passte, welcher in einen zweiten Aufruf eingespeist werden kann, um den Fluss in eine weitere Spalte fortzusetzen.

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

Tipps und bewährte Verfahren

  • Verwenden Sie Document.OpenFile() für Dateipfade und Document.Open() für im Speicher befindliche Uint8Array-Daten.
  • Seitennummern, die an Methoden wie RemovePage() und ExtractPages() übergeben werden, sind 1-basiert, während doc.Pages ein 0-basiertes Array ist.
  • Übergeben Sie { compressed: true } an Document.WriteTo(), um xref-Stream- und Objekt-Stream-Kompression bei der Ausgabe zu aktivieren.
  • Document.ExtractPages() akzeptiert wiederholte Seitennummern, sodass dieselbe Quellseite mehr als einmal im Ergebnis erscheinen kann.
  • Lesen Sie page.Rect, um Positionen relativ zur tatsächlichen Breite und Höhe der Seite zu berechnen, anstatt Koordinaten fest zu codieren.

Häufige Probleme

ProblemUrsacheLösung
Document.Open() / OpenFile() wirft InvalidPasswordErrorDas PDF ist passwortgeschützt und es wurde kein Passwort (oder das falsche) angegebenÜbergib { password: '...' } an Document.OpenFile() / Document.Open()
RemovePage() entfernt die falsche SeiteAn RemovePage() übergebene Seitennummern sind 1-basiert, nicht 0-basiertGeben Sie eine 1-basierte Seitenzahl an, die sich vom doc.Pages Array-Index unterscheidet
WriteTo() Ausgabe ist größer als erwartetDie Standardspeicherung verwendet keine xref/object-stream-KompressionÜbergeben Sie { compressed: true } an Document.WriteTo()

FAQ

Akzeptiert Document.Open() sowohl Dateipfade als auch Daten im Speicher?

Document.OpenFile() öffnet von einem Dateipfad; Document.Open() akzeptiert ein Uint8Array aus im Speicher befindlichen Bytes.

Ist die Seitennummerierung 0-basiert oder 1-basiert?

Beides, abhängig vom API: doc.Pages ist ein einfaches 0-basiertes Array, aber Methoden wie RemovePage() und ExtractPages() verwenden 1-basierte Seitennummern.

Kann ich ein Dokument beim Speichern verschlüsseln?

Ja — übergebe eine encrypt-Option an WriteTo() / Save() mit algorithm: 'aes256' | 'aes128' | 'rc4' und optionalen Benutzer-/Eigentümer-Passwörtern.

Wie kann ich die Ausgabedateigröße reduzieren?

Übergebe { compressed: true } an Document.WriteTo(), um xref-Stream- und Objekt-Stream-Kompression zu aktivieren.

Kann ich die rohen Content-Stream-Operatoren einer Seite untersuchen?

Ja — parseContentStream(doc.Pages[0].Contents) gibt die Operatorliste zurück, und serializeContentStream() konvertiert eine bearbeitete Liste zurück in Bytes.


API Reference Zusammenfassung

Klasse / MethodeBeschreibung
DocumentZentrale Einstiegspunkt zum Erstellen, Laden und Speichern von PDF-Dokumenten
Document.OpenFile() / Document.Open()Lade ein PDF von einem Dateipfad oder aus im Speicher befindlichen Bytes
Document.New()Erstelle ein leeres Dokument mit einem angegebenen PageFormat
Document.WriteTo() / Document.Save()Schreibe das Dokument in einen Dateipfad oder gib Bytes zurück
Document.Split() / Document.Merge() / Document.ExtractPages()Teile, füge zusammen und extrahiere Seiten über Dokumente hinweg
Document.Append() / Document.InsertPage()Kopiere Seiten von einem Dokument in ein anderes
PageEine einzelne PDF-Seite; stellt Methoden für Text, Bild, Annotationen und Content-Stream bereit
Page.AddText() / Page.AddTextBlock()Füge einer Seite positionierten oder fließenden Text hinzu
parseContentStream() / serializeContentStream()Analysiere und serialisiere die rohen Content-Stream-Operatoren einer Seite neu

Siehe auch

 Deutsch