Wprowadzenie
Każda funkcjonalność w Aspose.PDF FOSS dla TypeScript jest dostępna poprzez dwie klasy: Document i Page. Document zarządza kolekcją stron oraz wszystkim, co jest związane z dokumentem — metadanymi, zakładkami, etykietami stron i operacjami zapisu/odczytu — natomiast każda Page w doc.Pages zarządza wszystkim, co dotyczy tej jednej strony: treścią, adnotacjami i polami formularzy. Gdy te dwie klasy są już znane, reszta interfejsu biblioteki — konwersja, adnotacje, formularze, bezpieczeństwo — to w rzeczywistości tylko kolejne metody na tych samych dwóch obiektach.
Ten wpis przygląda się bliżej częściom tego podstawowego interfejsu, które introductory post jedynie wspomina pobieżnie: składaniu dokumentów z innych dokumentów, tworzeniu stron od zera, dodawaniu drzewa zakładek do nawigacji oraz tagowaniu treści w celu zapewnienia dostępności. Wszystkie cztery to zwykłe wywołania metod — bez osobnego modułu do importu, bez dodatkowych zależności poza samym pakietem @asposefoss/pdf.
Są to operacje, które pojawiają się, gdy pipeline PDF przechodzi poza „otwórz jeden plik, zmień go, zapisz”: łączenie raportów z kilku źródeł w jeden dokument, generowanie stron programowo zamiast zaczynania od szablonu oraz uczynienie wyniku nawigowalnym i dostępnym, a nie tylko wizualnie poprawnym.
Co jest zawarte
Składanie i reorganizacja dokumentów
Document.Split() dzieli dokument na jeden nowy jednostronicowy Document na stronę, w kolejności stron. Document.ExtractPages() kopiuje podany zestaw numerów stron liczonych od 1 do nowego, samodzielnego Document, w podanej kolejności — ta sama strona może być powtórzona. Strony z jednego dokumentu mogą być również kopiowane do innego: Document.Append() kopiuje każdą stronę dokumentu źródłowego na koniec docelowego, a Document.InsertPage() kopiuje pojedynczą stronę pomiędzy dokumentami na określonej pozycji liczonych od 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');
Kilka dokumentów można również połączyć w jeden w jednym wywołaniu za pomocą Document.Merge(), które tworzy nowy Document z kopii każdej strony każdego przekazanego do niego dokumentu, w kolejności.
Tworzenie stron od podstaw
Document.New() tworzy dokument od zera: zero stron, gdy pominięto format, lub jedną pustą stronę podanego PageFormat, gdy zostanie przekazany. Dodatkowe puste strony pochodzą z Document.AddPage(), które także przyjmuje PageFormat (lub istniejący Page, aby skopiować jego rozmiar). Tekst jest rysowany na stronie za pomocą Page.AddText(), umieszczony w punkcie (x, y) w przestrzeni użytkownika 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');
Zakładki i nawigacja po dokumencie
Szkic dokumentu (panel zakładek wyświetlany przez większość czytników PDF obok strony) jest odczytywany za pomocą Document.GetOutlines() i całkowicie zastępowany przez Document.SetOutlines(), przy czym każdy pracuje z drzewem wartości OutlineItem. Każdy OutlineItem zawiera Title, docelowy Dest oraz opcjonalnie Children dla wpisów zagnieżdżonych, plus wskazówki wyświetlania takie jak Open (rozszerzone domyślnie) 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);
Docelowe nazwy w ten sposób ({ name: 'intro' }) są rozwiązywane poprzez tabelę nazwanych destynacji dokumentu, którą Document.GetNamedDestinations() i Document.SetNamedDestination() zarządzają bezpośrednio, gdy zakładka musi wskazywać na destynację niepowiązaną z treścią strony.
Strukturalny tekst i tagowanie dostępności
Document.GetStructTree() zwraca drzewo struktury logicznej dokumentu (lub null, gdy dokument nie jest oznaczony), a Document.CreateStructTree() buduje je, oznaczając dokument jako Tagged. Gdy drzewo struktury istnieje, Page.GetStructuredText() zwraca tekst strony jako wartości TextBlock — pozycjonowane fragmenty już pogrupowane w linie i bloki podobne do akapitów — co jest wejściem dla ręcznego procesu tagowania: przeglądanie bloków, decydowanie, które z nich są nagłówkami, a które tekstem głównym, i dołączanie odpowiednich elementów do drzewa.
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);
}
}
Drzewo struktury oznaczonej jest tym, na czym opierają się funkcje downstream: eksport semantyczny HTML przetwarza go ponownie zamiast cofać się do zwykłego heurystycznego układu, a Document.ValidatePdfUa() sprawdza dokument względem podzbioru standardu dostępności PDF/UA, który zależy od obecności tagowania.
Szybki start
Zainstaluj pakiet, następnie otwórz dokument, wyodrębnij i połącz ponownie podzbiór jego stron oraz zapisz wynik:
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');
Obsługiwane formaty
| Format | Rozszerzenie | Odczyt | Zapis |
|---|---|---|---|
| ✓ | ✓ | ||
| Markdown | md | ✓ | ✓ |
| SVG | svg | ✓ | ✓ |
| TIFF | tiff | ✓ | ✓ |
| DOCX | docx | — | ✓ |
| HTML | html | — | ✓ |
| PNG | png | — | ✓ |
| EPUB | epub | — | ✓ |
Open Source i licencjonowanie
Aspose.PDF FOSS dla TypeScript jest udostępniany na licencji MIT, ze źródłem opublikowanym na GitHub. Nie ma znaku wodnego w wersji ewaluacyjnej, limitu użytkowania ani osobnego pliku licencyjnego do zarządzania, a biblioteka może być używana w produktach komercyjnych bez tantiem.
Pakiet jest obecnie w wersji 0.1.0, co odzwierciedla aktywny rozwój we wczesnym stadium. Node.js (>=22) jest jedynym wymogiem środowiska uruchomieniowego, a pakiet nie ma innych zależności zewnętrznych.