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 undDocument.Open()für im Speicher befindlicheUint8Array-Daten. - Seitennummern, die an Methoden wie
RemovePage()undExtractPages()übergeben werden, sind 1-basiert, währenddoc.Pagesein 0-basiertes Array ist. - Übergeben Sie
{ compressed: true }anDocument.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
| Problem | Ursache | Lösung |
|---|---|---|
Document.Open() / OpenFile() wirft InvalidPasswordError | Das PDF ist passwortgeschützt und es wurde kein Passwort (oder das falsche) angegeben | Übergib { password: '...' } an Document.OpenFile() / Document.Open() |
RemovePage() entfernt die falsche Seite | An RemovePage() übergebene Seitennummern sind 1-basiert, nicht 0-basiert | Geben Sie eine 1-basierte Seitenzahl an, die sich vom doc.Pages Array-Index unterscheidet |
WriteTo() Ausgabe ist größer als erwartet | Die 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 / Methode | Beschreibung |
|---|---|
Document | Zentrale 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 |
Page | Eine 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 |