Introduktion
Varje funktion i Aspose.PDF FOSS för TypeScript nås genom två klasser: Document och Page. Document äger sidkollektionen och allt som är dokument-omfattande — metadata, bokmärken, sidetiketter och spara/ladda — medan varje Page i doc.Pages äger allt som är begränsat till den sidan: innehåll, annotationer och formulärfält. När de två klasserna är bekanta är resten av bibliotekets yta — konvertering, annotationer, formulär, säkerhet — i själva verket bara fler metoder på samma två objekt.
Detta inlägg är en närmare titt på de delar av den kärn-ytan som introduktionsinlägget bara nämner i förbifarten: att sammanställa dokument från andra dokument, bygga sidor från tomma intet, lägga till ett bokmärkes-träd för navigering och märka innehåll för tillgänglighet. Alla fyra är enkla metodanrop — ingen separat modul att importera, inget extra beroende utöver @asposefoss/pdf-paketet självt.
Det här är de operationer som dyker upp när en PDF-pipeline går förbi ”öppna en fil, ändra den, spara den”: att kombinera rapporter från flera källor till ett dokument, generera sidor programmässigt istället för att börja från en mall, och göra utskriften navigerbar och tillgänglig snarare än bara visuellt korrekt.
Vad som ingår
Sammanställning och omorganisering av dokument
Document.Split() delar ett dokument i en ny enkel-sidig Document per sida, i sidordning. Document.ExtractPages() kopierar en given uppsättning 1-baserade sidnummer till ett nytt självständigt Document, i den angivna ordningen — samma sida kan upprepas. Sidor från ett dokument kan också kopieras till ett annat: Document.Append() kopierar varje sida i ett källdokument till slutet av måldokumentet, och Document.InsertPage() kopierar en enskild sida mellan dokument på en specifik 1-baserad position.
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');
Flera dokument kan även kombineras till ett i ett enda anrop med Document.Merge(), vilket bygger en ny Document från kopior av varje sida i varje dokument som skickas till den, i ordning.
Skapa sidor från grunden
Document.New() skapar ett dokument från tomt: noll sidor när ett format utelämnas, eller en tom sida av den angivna PageFormat när en sådan skickas. Ytterligare tomma sidor kommer från Document.AddPage(), som också accepterar en PageFormat (eller ett befintligt Page för att kopiera storleken). Text ritas på en sida med Page.AddText(), placerad vid en (x, y)-punkt i PDF:s användarutrymme.
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');
Bokmärken och dokumentnavigering
Dokumentets disposition (bokmärkespanelen som de flesta PDF-läsare visar bredvid sidan) läses med Document.GetOutlines() och ersätts helt och hållet med Document.SetOutlines(), där varje arbetar med ett träd av OutlineItem-värden. Varje OutlineItem innehåller en Title, en Dest-destination och, valfritt, Children för nästlade poster, samt visningshintar som Open (expanderad som standard) och 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);
Destinationer som namnges på detta sätt ({ name: 'intro' }) löses upp via dokumentets tabell för namngivna destinationer, som Document.GetNamedDestinations() och Document.SetNamedDestination() hanterar direkt när ett bokmärke behöver peka på en destination som inte är knuten till sidinnehåll.
Strukturerad text och tillgänglighetstaggar
Document.GetStructTree() returnerar dokumentets logiska strukturträd (eller null när dokumentet inte är taggat), och Document.CreateStructTree() bygger ett, vilket markerar dokumentet som Taggat. När ett strukturträd finns, returnerar Page.GetStructuredText() sidans text som TextBlock-värden — placerade fragment som redan är grupperade i rader och stycke-liknande block — vilket är den indata som ett hand-taggningssteg arbetar med: gå igenom blocken, avgöra vilka som är rubriker versus brödtext, och lägga till motsvarande element i trädet.
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);
}
}
Ett märkt strukturträd är vad efterföljande funktioner bygger på: semantisk HTML export flödar om från det istället för att falla tillbaka på en enkel heuristisk layout, och Document.ValidatePdfUa() kontrollerar dokumentet mot en delmängd av PDF/UA tillgänglighetsstandard som beror på att märkning finns.
Snabbstart
Installera paketet, öppna sedan ett dokument, plocka ut och kombinera om en delmängd av dess sidor, och spara resultatet:
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');
Stödda format
| Format | Filändelse | Läs | Skriv |
|---|---|---|---|
| ✓ | ✓ | ||
| Markdown | md | ✓ | ✓ |
| SVG | svg | ✓ | ✓ |
| TIFF | tiff | ✓ | ✓ |
| DOCX | docx | — | ✓ |
| HTML | html | — | ✓ |
| PNG | png | — | ✓ |
| EPUB | epub | — | ✓ |
Öppen källkod & licensiering
Aspose.PDF FOSS för TypeScript är släppt under MIT license, med källkoden publicerad på GitHub. Det finns ingen utvärderingsvattenstämpel, användningsgräns eller separat licensfil att hantera, och biblioteket kan användas i kommersiella produkter utan royalties.
Paketet är för närvarande på version 0.1.0, vilket speglar aktiv tidig utveckling. Node.js (>=22) är det enda körkravet, och paketet har inga andra tredjepartsberoenden.