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 och Document.Open() för in-memory Uint8Array-data.
  • Sidnummer som skickas till metoder som RemovePage() och ExtractPages() är 1-baserade, medan doc.Pages är en 0-baserad array.
  • Skicka { compressed: true } till Document.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.Rect för att beräkna positioner relativt sidans faktiska bredd och höjd istället för att hårdkoda koordinater.

Vanliga problem

ProblemOrsakLösning
Document.Open() / OpenFile() kastar InvalidPasswordErrorPDF-filen är lösenordsskyddad och inget lösenord (eller fel lösenord) angavsSkicka { password: '...' } till Document.OpenFile() / Document.Open()
RemovePage() tar bort fel sidaSidtalen som skickas till RemovePage() är 1-baserade, inte 0-baseradeAnge ett 1-baserat sidnummer, skilt från doc.Pages arrayindexering
WriteTo() utdata är större än förväntatStandardlagringen använder inte xref/object-stream-komprimeringSkicka { 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 / MetodBeskrivning
DocumentCentralt 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
PageEn 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

Se även

 Svenska