Introducere
Fiecare funcționalitate în Aspose.PDF FOSS pentru TypeScript este accesată prin două clase: Document și Page. Document deține colecția de pagini și tot ce ține de document — metadate, semne de carte, etichete de pagină și salvare/încărcare — în timp ce fiecare Page în doc.Pages deține tot ce este limitat la acea pagină: conținut, adnotări și câmpuri de formular. Odată ce aceste două clase sunt cunoscute, restul suprafeței bibliotecii — conversie, adnotări, formulare, securitate — este, de fapt, doar mai multe metode pe aceleași două obiecte.
Acest articol oferă o privire mai detaliată asupra părților din acea suprafață de bază pe care postarea introductivă o menționează doar în trecere: asamblarea documentelor din alte documente, crearea paginilor de la zero, adăugarea unui arbore de semne de carte pentru navigare și etichetarea conținutului pentru accesibilitate. Toate cele patru sunt apeluri simple de metode — fără modul separat de importat, fără dependență suplimentară în afara pachetului @asposefoss/pdf.
Acestea sunt operațiunile care apar odată ce un pipeline PDF trece de „deschide un fișier, modifică-l, salvează-l”: combinarea rapoartelor din mai multe surse într-un singur document, generarea programatică a paginilor în loc să se înceapă dintr-un șablon și realizarea unui rezultat navigabil și accesibil, nu doar corect din punct de vedere vizual.
Ce este inclus
Asamblarea și reorganizarea documentelor
Document.Split() împarte un document în câte un nou Document pe pagină, în ordinea paginilor. Document.ExtractPages() copiază un set dat de numere de pagini numerotate de la 1 într-un nou Document independent, în ordinea specificată — aceeași pagină poate fi repetată. Paginile dintr-un document pot fi, de asemenea, copiate într-altul: Document.Append() copiază fiecare pagină a unui document sursă la sfârșitul țintă, iar Document.InsertPage() copiază o singură pagină între documente la o poziție specifică numerotată de la 1.
import { Document } from '@asposefoss/pdf';
const report = Document.OpenFile('report.pdf');
const parts = report.Split(); // one Document per page
const chapter = report.ExtractPages([3, 4, 5]); // subset (1-based, repeats allowed) as a new Document
const cover = Document.OpenFile('cover.pdf');
report.InsertPage(1, cover.Pages[0]); // copy a single page across documents
report.Append(chapter); // copy chapter's pages onto report
report.WriteTo('assembled.pdf');
Mai multe documente pot fi, de asemenea, combinate într-unul singur într-un singur apel cu Document.Merge(), care creează un nou Document din copii ale fiecărei pagini a fiecărui document transmis, în ordine.
Construirea paginilor de la zero
Document.New() creează un document din nimic: zero pagini când un format este omis, sau o pagină goală a PageFormat specificat când este furnizat. Pagini suplimentare goale provin din Document.AddPage(), care acceptă și un PageFormat (sau un Page existent pentru a copia dimensiunea). Textul este desenat pe o pagină cu Page.AddText(), poziționat la un punct (x, y) în spațiul utilizator PDF.
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');
Semne de carte și navigare în document
Schița documentului (panoul de semne de carte pe care majoritatea cititoarelor PDF îl afișează alături de pagină) este citită cu Document.GetOutlines() și înlocuită integral cu Document.SetOutlines(), fiecare lucrând cu un arbore de valori OutlineItem. Fiecare OutlineItem conține un Title, o destinație Dest și, opțional, Children pentru intrări imbricate, plus indicii de afișare precum Open (extins implicit) și Bold.
import { Document, OutlineItem } from '@asposefoss/pdf';
const items: OutlineItem[] = [
{ Title: 'Introduction', Dest: { name: 'intro' } },
{
Title: 'Chapters',
Open: true,
Children: [
{ Title: 'Chapter 1', Dest: { name: 'ch1' } },
{ Title: 'Chapter 2', Dest: { name: 'ch2' } },
],
},
];
doc.SetOutlines(items);
Destinațiile denumite în acest mod ({ name: 'intro' }) sunt rezolvate prin tabelul de destinații denumite al documentului, pe care Document.GetNamedDestinations() și Document.SetNamedDestination() îl gestionează direct când un semn de carte trebuie să indice o destinație care nu este legată de conținutul paginii.
Text structurat și etichetarea pentru accesibilitate
Document.GetStructTree() returnează arborele de structură logică al documentului (sau null când documentul nu este etichetat), iar Document.CreateStructTree() construiește unul, marcând documentul ca Etichetat. Odată ce există un arbore de structură, Page.GetStructuredText() returnează textul paginii ca valori TextBlock — fragmente poziționate deja grupate în linii și blocuri asemănătoare paragrafelor — care constituie intrarea de la care lucrează o trecere de etichetare manuală: parcurgerea blocurilor, deciderea care dintre ele sunt titluri versus textul corpului, și adăugarea elementelor corespunzătoare în arbore.
function handTagPage(doc: Document, page: Page, heading: string): void {
const root = doc.GetStructTree();
if (!root) throw new Error('handTagPage: the document is not tagged yet');
for (const block of page.GetStructuredText()) {
const text = block.text.trim();
if (text.length === 0) continue;
const el = root.Append(text.startsWith(heading) ? 'H2' : 'P');
el.MarkContent(page, block.quad);
}
}
Un arbore de structură etichetat este baza pe care se construiesc funcționalitățile din aval: exportul semantic HTML se rearanjează din el în loc să revină la un aranjament simplu euristic, iar Document.ValidatePdfUa() verifică documentul față de un subset al standardului de accesibilitate PDF/UA care depinde de prezența etichetării.
Începe rapid
Instalați pachetul, apoi deschideți un document, extrageți și recombinați un subset de pagini ale acestuia și salvați rezultatul:
git clone https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-TypeScript.git
cd Aspose.PDF-FOSS-for-TypeScript
npm install
npm run buildimport { Document } from '@asposefoss/pdf';
const doc = Document.OpenFile('report.pdf');
const chapter = doc.ExtractPages([3, 4, 5]); // subset (1-based, repeats allowed) as a new Document
const cover = Document.OpenFile('cover.pdf');
doc.InsertPage(1, cover.Pages[0]); // copy a single page across documents
doc.Append(chapter); // copy chapter's pages onto doc
doc.WriteTo('assembled.pdf');
Formate suportate
| Format | Extensie | Citire | Scriere |
|---|---|---|---|
| ✓ | ✓ | ||
| Markdown | md | ✓ | ✓ |
| SVG | svg | ✓ | ✓ |
| TIFF | tiff | ✓ | ✓ |
| DOCX | docx | — | ✓ |
| HTML | html | — | ✓ |
| PNG | png | — | ✓ |
| EPUB | epub | — | ✓ |
Open Source și Licențiere
Aspose.PDF FOSS pentru TypeScript este lansat sub licența MIT, cu sursa publicată pe GitHub. Nu există filigran de evaluare, limită de utilizare sau fișier de licență separat de gestionat, iar biblioteca poate fi utilizată în produse comerciale fără redevențe.
Pachetul se află în prezent la versiunea 0.1.0, reflectând o dezvoltare activă în stadiu incipient. Node.js (>=22) este singura cerință de runtime, iar pachetul nu are alte dependențe terțe.