Nucleu API
API de bază
Acest ghid arată cum să deschideți, să editați, să asamblați și să salvați documente PDF cu clasele Document și Page — punctele de intrare pentru fiecare operație în Aspose.PDF FOSS pentru TypeScript. Document încarcă, creează, asamblează și salvează fișiere PDF întregi; Page, accesat prin doc.Pages, expune operații pe text, imagine, adnotare și flux de conținut pe pagină.
Ciclul de viață al documentului
Document.OpenFile() deschide un PDF dintr-o cale de fișier; Document.Open() acceptă un Uint8Array în memorie. Paginile pot fi inspectate și editate la fața locului, iar Document.WriteTo() scrie rezultatul înapoi — opțional cu compresie xref-stream și object-stream.
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
Împărțirea, combinarea și extragerea paginilor
Document.Split() returnează un Document pentru fiecare pagină. Document.ExtractPages() primește o listă de pagini numerotată de la 1, cu repetiții permise, și returnează un nou Document care conține doar acele pagini. Document.Append() și Document.InsertPage() copiază pagini între documente, iar Document.Merge() combină mai multe documente într-unul singur.
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
Crearea unui document nou
Document.New() începe un document gol la un PageFormat dat. Page.AddText() plasează text poziționat, iar Document.AddPage() adaugă pagini suplimentare, inclusiv un format rotit, cum ar fi 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');Filigrane și numere de pagină
Page.AddText() suportă, de asemenea, rotație, culoare și opacitate, ceea ce este suficient pentru a reda un număr de pagină și o filigrană diagonală fără clase suplimentare.
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');Introspecție a fluxului de conținut
parseContentStream() decodează fluxul brut /Contents al unei pagini într-o listă de perechi operator/operand, iar serializeContentStream() convertește o listă de operatori editată înapoi în octeți.
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
Flux de text pe mai multe coloane
Page.AddTextBlock() curge un șir lung de text într-o regiune rectangulară și returnează orice text care nu a încăput, care poate fi alimentat într-un al doilea apel pentru a continua fluxul într-o altă coloană.
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
Sfaturi și bune practici
- Folosiți
Document.OpenFile()pentru căile de fișiere șiDocument.Open()pentru dateleUint8Arrayîn memorie. - Numerele de pagină transmise către metode precum
RemovePage()șiExtractPages()sunt bazate pe 1, în timp cedoc.Pageseste un tablou bazat pe 0. - Transmite
{ compressed: true }cătreDocument.WriteTo()pentru a activa compresia xref-stream și object-stream la ieșire. Document.ExtractPages()acceptă numere de pagină repetate, astfel încât aceeași pagină sursă poate apărea de mai multe ori în rezultat.- Citește
page.Rectpentru a calcula pozițiile relative la lățimea și înălțimea reală a paginii, în loc să codifici coordonatele manual.
Probleme comune
| Problemă | Cauză | Remediere |
|---|---|---|
Document.Open() / OpenFile() aruncă InvalidPasswordError | PDF-ul este protejat prin parolă și nu a fost furnizată nicio parolă (sau a fost furnizată una greșită) | Transmite { password: '...' } către Document.OpenFile() / Document.Open() |
RemovePage() elimină pagina greșită | Numerele de pagină transmise către RemovePage() sunt numerotate de la 1, nu de la 0 | Transmite un număr de pagină numerotat de la 1, distinct de indexarea doc.Pages |
Ieșirea WriteTo() este mai mare decât se aștepta | Salvarea implicită nu folosește comprimarea xref/object-stream | Transmite { compressed: true } către Document.WriteTo() |
FAQ
Acceptă Document.Open() atât căi de fișier, cât și date în memorie?
Document.OpenFile() se deschide dintr-o cale de fișier; Document.Open() acceptă un Uint8Array de octeți în memorie.
Este numerotarea paginilor bazată pe 0 sau pe 1?
Ambele, în funcție de API: doc.Pages este un tablou simplu bazat pe 0, dar metodele precum RemovePage() și ExtractPages() utilizează numere de pagină bazate pe 1.
Pot cripta un document în timp ce îl salvez?
Da — transmite o opțiune encrypt către WriteTo() / Save() cu algorithm: 'aes256' | 'aes128' | 'rc4' și parole opționale pentru utilizator/proprietar.
Cum pot reduce dimensiunea fișierului de ieșire?
Transmite { compressed: true } către Document.WriteTo() pentru a activa compresia xref-stream și object-stream.
Pot inspecta operatorii fluxului de conținut brut ai unei pagini?
Da — parseContentStream(doc.Pages[0].Contents) returnează lista de operatori, iar serializeContentStream() convertește o listă editată înapoi în octeți.
API Reference Rezumat
| Clasă / Metodă | Descriere: |
|---|---|
Document | Punctul central de intrare pentru crearea, încărcarea și salvarea documentelor PDF |
Document.OpenFile() / Document.Open() | Încarcă un PDF dintr-o cale de fișier sau din bytes în memorie |
Document.New() | Pornește un document gol cu un PageFormat specificat |
Document.WriteTo() / Document.Save() | Scrie documentul într-o cale de fișier sau returnează bytes |
Document.Split() / Document.Merge() / Document.ExtractPages() | Împarte, combină și extrage pagini din documente |
Document.Append() / Document.InsertPage() | Copiază paginile dintr-un document în altul |
Page | O singură pagină PDF; expune metode pentru text, imagine, adnotare și flux de conținut |
Page.AddText() / Page.AddTextBlock() | Adaugă text poziționat sau curgător pe o pagină |
parseContentStream() / serializeContentStream() | Analizează și re-serializare operatorii brut ai fluxului de conținut al paginii |