Úvod
Každou funkci v Aspose.PDF FOSS pro TypeScript získáte pomocí dvou tříd: Document a Page. Document vlastní kolekci stránek a vše, co se týká dokumentu — metadata, záložky, štítky stránek a ukládání/načítání — zatímco každá Page v doc.Pages vlastní vše, co se vztahuje k jedné stránce: obsah, anotace a pole formulářů. Jakmile jsou tyto dvě třídy známé, zbytek rozhraní knihovny — konverze, anotace, formuláře, zabezpečení — jsou ve skutečnosti jen další metody na stejných dvou objektech.
Tento příspěvek se podrobněji zaměřuje na části toho základního rozhraní, které úvodní příspěvek zmiňuje jen okrajově: skládání dokumentů z jiných dokumentů, vytváření stránek od nuly, přidání stromu záložek pro navigaci a označování obsahu pro přístupnost. Všechny čtyři jsou obyčejná volání metod — žádný samostatný modul k importu, žádná další závislost mimo samotný balíček @asposefoss/pdf.
Jedná se o operace, které se objeví, jakmile PDF pipeline překročí „otevřít jeden soubor, změnit jej, uložit jej“: sloučení zpráv z několika zdrojů do jednoho dokumentu, programové generování stránek místo začátku ze šablony a vytvoření výstupu, který je navigovatelný a přístupný, nikoli jen vizuálně správný.
Co je zahrnuto
Skládání a reorganizace dokumentů
Document.Split() rozbije dokument na jeden nový jednostránkový Document na stránku, v pořadí stránek. Document.ExtractPages() zkopíruje zadanou sadu čísel stránek začínajících od 1 do nového samostatného Document, v uvedeném pořadí — stejná stránka může být opakována. Stránky z jednoho dokumentu lze také zkopírovat do jiného: Document.Append() zkopíruje každou stránku zdrojového dokumentu na konec cílového, a Document.InsertPage() zkopíruje jednu stránku mezi dokumenty na konkrétní pozici počínaje 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');
Několik dokumentů lze také sloučit do jednoho v jediném volání pomocí Document.Merge(), které vytvoří nový Document ze kopií všech stránek všech dokumentů předaných do něj, v pořadí.
Vytváření stránek od nuly
Document.New() vytvoří dokument z ničeho: nula stránek, když není zadán formát, nebo jednu prázdnou stránku daného PageFormat, když je předán. Další prázdné stránky pocházejí z Document.AddPage(), která také přijímá PageFormat (nebo existující Page pro kopírování velikosti). Text je vykreslen na stránku pomocí Page.AddText(), umístěného v bodě (x, y) v uživatelském prostoru 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');
Záložky a navigace v dokumentu
Osnova dokumentu (panel záložek, který většina PDF čteček zobrazuje vedle stránky) je načtena pomocí Document.GetOutlines() a kompletně nahrazena pomocí Document.SetOutlines(), přičemž každá pracuje se stromem hodnot OutlineItem. Každý OutlineItem nese Title, cíl Dest a volitelně Children pro vnořené položky, plus zobrazovací nápovědy jako Open (rozbaleno ve výchozím nastavení) a 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);
Cíle pojmenované tímto způsobem ({ name: 'intro' }) se řeší přes tabulku pojmenovaných cílů dokumentu, kterou Document.GetNamedDestinations() a Document.SetNamedDestination() spravují přímo, když záložka potřebuje odkazovat na cíl, který není svázán s obsahem stránky.
Strukturovaný text a značení přístupnosti
Document.GetStructTree() vrací logický strom struktury dokumentu (nebo null, když dokument není označen), a Document.CreateStructTree() vytvoří jeden, označující dokument jako Tagged. Jakmile existuje strom struktury, Page.GetStructuredText() vrací text stránky jako hodnoty TextBlock — umístěné fragmenty již seskupené do řádků a bloků podobných odstavcům — což je vstup, ze kterého pracuje ruční značení: procházení bloků, rozhodování, které jsou nadpisy a které tělo textu, a přidávání odpovídajících prvků do stromu.
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);
}
}
Označený strom struktury je tím, na čem staví následné funkce: export semantického HTML se z něj přetéká místo toho, aby se vrátil k jednoduchému heuristickému rozložení, a Document.ValidatePdfUa() kontroluje dokument vůči podmnožině standardu přístupnosti PDF/UA, který závisí na přítomnosti značkování.
Rychlý start
Nainstalujte balíček, poté otevřete dokument, vyjměte a znovu spojte podmnožinu jeho stránek a uložte výsledek:
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');
Podporované formáty
| Formát | Rozšíření | Číst | Zapsat |
|---|---|---|---|
| ✓ | ✓ | ||
| Markdown | md | ✓ | ✓ |
| SVG | svg | ✓ | ✓ |
| TIFF | tiff | ✓ | ✓ |
| DOCX | docx | — | ✓ |
| HTML | html | — | ✓ |
| PNG | png | — | ✓ |
| EPUB | epub | — | ✓ |
Open Source a licencování
Aspose.PDF FOSS pro TypeScript je vydáno pod licencí MIT, se zdrojovým kódem publikovaným na GitHub. Neexistuje žádný evaluační vodoznak, omezení používání ani samostatný licenční soubor k řízení, a knihovna může být použita v komerčních produktech bez royalty.
Balíček je momentálně ve verzi 0.1.0, což odráží aktivní vývoj v rané fázi. Node.js (>=22) je jediným požadavkem na runtime a balíček nemá žádné další třetí strany závislosti.