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 și Document.Open() pentru datele Uint8Array în memorie.
  • Numerele de pagină transmise către metode precum RemovePage() și ExtractPages() sunt bazate pe 1, în timp ce doc.Pages este un tablou bazat pe 0.
  • Transmite { compressed: true } către Document.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.Rect pentru 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ă InvalidPasswordErrorPDF-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 0Transmite un număr de pagină numerotat de la 1, distinct de indexarea doc.Pages
Ieșirea WriteTo() este mai mare decât se așteptaSalvarea implicită nu folosește comprimarea xref/object-streamTransmite { 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:
DocumentPunctul 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
PageO 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

Vezi și:

 Română