Einleitung

Der einleitende Beitrag zeigt die Grundstruktur der Konvertierung: Document.ToHtml(), Document.ToMarkdown() und Document.ToDocx(), die jeweils ohne Argumente aufgerufen werden, um einen vernünftigen Standard zu erhalten. Jede dieser Methoden akzeptiert ein Optionsobjekt, das beeinflusst, was tatsächlich ausgegeben wird — semantisches Markup versus eine pixelgetreue Kopie, ein reflow-fähiges Word-Dokument versus eines, das das exakte Layout jeder Seite reproduziert.

Dieser Beitrag behandelt diese Optionen sowie eine Konvertierungsrichtung, die die Einleitung überhaupt nicht anspricht: die Validierung eines Dokuments gegen die PDF/A, PDF/X und PDF/UA Standards und dessen Anpassung, um die Konformität mit Document.ConvertToPdfA() und dessen Geschwistern zu erreichen.


Was enthalten ist

HTML Export: Semantisch vs Fest

Document.ToHtml() ohne Optionen durchläuft den Strukturbaum des Dokuments und erzeugt reflow-fähiges Markup — Überschriften und Absätze, die in einem Browser bei jeder Breite natürlich lesbar sind. Dieser Modus hängt davon ab, dass das Dokument zuerst getaggt wird (Document.CreateStructTree() oder ein äquivalenter Tagging-Durchlauf); ohne Strukturbaum fällt der Export auf einen einfachen heuristischen Body zurück statt auf echtes semantisches Markup. Das Übergeben von { mode: 'fixed', fonts: 'embed' } schaltet vollständig zu einer anderen Rendering-Strategie um: Jede Seite wird zu positioniertem SVG und absolut platziertem Text, wobei jedes einbettbare Schriftprogramm als base64-WOFF @font-face eingebettet wird, sodass die Seite gleich aussieht, ohne dass der Leser die Schriften installiert hat.

// Semantic mode reflows from the structure tree, so this must run after the
// tagging pass: ToHtml falls back to a heuristic body when GetStructTree() is
// null, and the export loses its heading structure silently.
const semantic = doc.ToHtml();
const fixed = doc.ToHtml({ mode: 'fixed', fonts: 'embed' });

Die beiden Ausgaben dienen unterschiedlichen Zwecken: semantisches HTML ist das, was Sie zum Lesen oder erneuten Veröffentlichen von Inhalten im Web benötigen, und festes HTML ist das, was Sie benötigen, wenn das exakte visuelle Layout einer Seite unverändert im Browser erhalten bleiben muss.

Word- und Vektor-Exporte

Document.ToDocx() ohne Optionen aufgerufen erzeugt ein umflossenes .docx: Absätze und Bilder, die ein Textverarbeitungsprogramm neu umbrechen und wie ein normales Dokument bearbeiten kann. Stattdessen bewirkt das Übergeben von { mode: 'textbox' }, dass die Geometrie jeder Seite erhalten bleibt und Inhalte in festen Textfeldern platziert werden, anstatt sie umfließen zu lassen – näher an einer getreuen visuellen Kopie als an einem editierbaren Dokument. Page.ToSvg() rendert eine einzelne Seite zu einer eigenständigen <svg>-Zeichenkette, nützlich, wenn eine vektorbasierte, auflösungsunabhängige Kopie einer Seite benötigt wird, anstatt eines Rasterbildes.

import { Document } from '@asposefoss/pdf';

const doc = Document.OpenFile('in.pdf');
const svg = doc.Pages[0].ToSvg();               // standalone <svg> string
const docx = doc.ToDocx();                       // .docx bytes, reflowed, images in the package
const fixed = doc.ToDocx({ mode: 'textbox' });   // .docx keeping each page's own geometry

Validierung und Konvertierung zu PDF/A, PDF/X und PDF/UA

Document.ValidatePdfA(), Document.ValidatePdfX() und Document.ValidatePdfUa() prüfen das Dokument jeweils gegen einen kuratierten, maschinenprüfbaren Teilbereich des entsprechenden Standards — PDF/A (ISO 19005) für die Langzeitarchivierung, PDF/X (ISO 15930) für die Druckproduktion und PDF/UA (ISO 14289-1) für Barrierefreiheit — und geben ein ValidationReport mit einem Passed-Flag zurück, das das Ergebnis zusammenfasst. Document.ConvertToPdfA() (und das entsprechende ConvertToPdfX()/ConvertToPdfUa()) versucht, das Dokument zu diesem Niveau zu remediieren, prüft anschließend erneut und liefert ein ConversionReport, das auflistet, welche Aktionen tatsächlich angewendet wurden und welche Probleme weiterhin ungelöst bleiben.

import { Document } from '@asposefoss/pdf';

const doc = Document.OpenFile('in.pdf');
const pdfa = doc.ValidatePdfA('2b');
console.log(`validate: PDF/A-2b ${pdfa.Passed ? 'passes' : 'fails'}`);

// Conversion runs against a copy: the live document is still saved
// unconverted, so ConvertToPdfA must never touch it directly.
const pages = doc.Pages;
const allPages: number[] = [];
for (let i = 1; i <= pages.length; i++) allPages.push(i);
const copy = doc.ExtractPages(allPages);
const conversion = copy.ConvertToPdfA('2b');

console.log(`pdf/a convert: ${conversion.applied.length} action(s) applied, `
  + `${conversion.unresolved.length} unresolved`);
console.log(`result: ${conversion.passed ? 'passes' : 'still fails'} PDF/A-2b`);

Eine Konvertierung garantiert nicht, dass sie in einem Durchlauf die vollständige Konformität erreicht – häufige Ursachen für ein verbleibendes Scheitern sind nicht eingebettete Schriften und ein fehlendes Ausgabedesign, die beide in conversion.unresolved erscheinen.


Schnellstart

Installieren Sie das Paket und rendern Sie anschließend eine Seite nach SVG sowie das gesamte Dokument nach umflossenem HTML und DOCX:

git clone https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-TypeScript.git
cd Aspose.PDF-FOSS-for-TypeScript
npm install
npm run build
import { Document } from '@asposefoss/pdf';

const doc = Document.OpenFile('in.pdf');

const svg = doc.Pages[0].ToSvg();   // standalone <svg> string
const html = doc.ToHtml();          // reflowable HTML (falls back without a structure tree)
const docx = doc.ToDocx();          // .docx bytes, reflowed, images in the package

// fs.writeFileSync('page1.svg', svg);
// fs.writeFileSync('out.html', html);
// fs.writeFileSync('out.docx', docx);

Unterstützte Formate

FormatErweiterungLesenSchreiben
PDFpdf✓✓
Markdownmd✓✓
SVGsvg✓✓
TIFFtiff✓✓
DOCXdocx—✓
HTMLhtml—✓
PNGpng—✓
EPUBepub—✓

Open Source & Lizenzierung

Aspose.PDF FOSS für TypeScript wird unter der MIT-Lizenz veröffentlicht, wobei der Quellcode auf GitHub veröffentlicht wird. Es gibt kein Evaluationswasserzeichen, keine Nutzungslimitierung und keine separate Lizenzdatei zu verwalten, und die Bibliothek kann in kommerziellen Produkten ohne Lizenzgebühren verwendet werden.

Das Paket ist derzeit in Version 0.1.0, was auf eine aktive Frühphasenentwicklung hinweist. Node.js (>=22) ist die einzige Laufzeitanforderung, und das Paket hat keine weiteren Drittanbieterabhängigkeiten.


Erste Schritte

Verwandte Ressourcen