Kärna API
Kärn-API
Denna guide visar hur man öppnar, redigerar, sammanställer och sparar PDF-dokument med klasserna Document och Page — ingångspunkterna för varje operation i Aspose.PDF FOSS för TypeScript. Document laddar, skapar, sammanställer och sparar hela PDF-filer; Page, nås via doc.Pages, exponerar per-sida text-, bild-, annoterings- och innehållsströmoperationer.
Dokumentlivscykel
Document.OpenFile() öppnar en PDF från en filsökväg; Document.Open() accepterar en Uint8Array i minnet. Sidor kan inspekteras och redigeras på plats, och Document.WriteTo() skriver tillbaka resultatet — valfritt med xref-stream och object-stream-komprimering.
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
Uppdelning, sammanslagning och extrahering av sidor
Document.Split() returnerar en Document per sida. Document.ExtractPages() tar en 1-baserad, upprepningstillåten sidlista och returnerar en ny Document med endast dessa sidor. Document.Append() och Document.InsertPage() kopierar sidor mellan dokument, och Document.Merge() kombinerar flera dokument till ett.
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
Skapa ett nytt dokument
Document.New() startar ett tomt dokument vid en given PageFormat. Page.AddText() placerar positionerad text, och Document.AddPage() lägger till ytterligare sidor, inklusive ett roterat format såsom 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');Vattenmärken och sidnummer
Page.AddText() stöder också rotation, färg och opacitet, vilket är tillräckligt för att rendera ett sidnummer och ett diagonalt vattenmärke utan några extra klasser.
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 av innehållsström
parseContentStream() avkodar en sidas råa /Contents-ström till en lista med operator/operand-par, och serializeContentStream() konverterar en redigerad operatorlista tillbaka till byte.
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
Flöde av text i flera kolumner
Page.AddTextBlock() flödar en lång textsträng in i ett rektangulärt område och returnerar all text som inte fick plats, vilken kan matas in i ett andra anrop för att fortsätta flödet i en annan kolumn.
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 och bästa praxis
- Använd
Document.OpenFile()för filsökvägar ochDocument.Open()för in-memoryUint8Array-data. - Sidnummer som skickas till metoder som
RemovePage()ochExtractPages()är 1-baserade, medandoc.Pagesär en 0-baserad array. - Skicka
{ compressed: true }tillDocument.WriteTo()för att aktivera xref-stream- och object-stream-komprimering i utdata. Document.ExtractPages()accepterar upprepade sidnummer, så samma källsida kan förekomma mer än en gång i resultatet.- Läs
page.Rectför att beräkna positioner relativt sidans faktiska bredd och höjd istället för att hårdkoda koordinater.
Vanliga problem
| Problem | Orsak | Lösning |
|---|---|---|
Document.Open() / OpenFile() kastar InvalidPasswordError | PDF-filen är lösenordsskyddad och inget lösenord (eller fel lösenord) angavs | Skicka { password: '...' } till Document.OpenFile() / Document.Open() |
RemovePage() tar bort fel sida | Sidtalen som skickas till RemovePage() är 1-baserade, inte 0-baserade | Ange ett 1-baserat sidnummer, skilt från doc.Pages arrayindexering |
WriteTo() utdata är större än förväntat | Standardlagringen använder inte xref/object-stream-komprimering | Skicka { compressed: true } till Document.WriteTo() |
FAQ
Accepterar Document.Open() både filsökvägar och data i minnet?
Document.OpenFile() öppnas från en filsökväg; Document.Open() accepterar en Uint8Array av minnesbytes.
Är sidnumrering 0-baserad eller 1-baserad?
Båda, beroende på API: doc.Pages är en enkel 0-baserad array, men metoder såsom RemovePage() och ExtractPages() använder 1-baserade sidnummer.
Kan jag kryptera ett dokument när jag sparar det?
Ja — skicka ett encrypt-alternativ till WriteTo() / Save() med algorithm: 'aes256' | 'aes128' | 'rc4' och valfria användar-/ägarlösenord.
Hur minskar jag storleken på utdatafilen?
Skicka { compressed: true } till Document.WriteTo() för att aktivera xref-stream- och object-stream-komprimering.
Kan jag inspektera en sidas råa content-stream-operatorer?
Ja — parseContentStream(doc.Pages[0].Contents) returnerar operatörslistan, och serializeContentStream() konverterar en redigerad lista tillbaka till bytes.
API Reference Sammanfattning
| Klass / Metod | Beskrivning |
|---|---|
Document | Centralt ingångspunkt för att skapa, läsa in och spara PDF-dokument |
Document.OpenFile() / Document.Open() | Ladda en PDF från en filsökväg eller minnes-bytes |
Document.New() | Starta ett tomt dokument med en given PageFormat |
Document.WriteTo() / Document.Save() | Skriv dokumentet till en filsökväg eller returnera bytes |
Document.Split() / Document.Merge() / Document.ExtractPages() | Dela, slå ihop och extrahera sidor mellan dokument |
Document.Append() / Document.InsertPage() | Kopiera sidor från ett dokument till ett annat |
Page | En enda PDF-sida; exponerar metoder för text, bild, annotering och innehållsström |
Page.AddText() / Page.AddTextBlock() | Lägg till positionerad eller flödande text på en sida |
parseContentStream() / serializeContentStream() | Analysera och återserialisera en sidas råa innehållsströmoperatörer |