Node.js-Bibliothek
officepress
Word-, Excel-, PowerPoint-, OpenDocument-, Visio- und Publisher-Dateien als PDF, direkt in Ihrem eigenen Node.js-Prozess.
import { readFile, writeFile } from 'node:fs/promises';
import { convertToPdf } from '@toupiesoft/officepress';
const docx = await readFile('report.docx');
const pdf = convertToPdf(docx); // in process, offline
await writeFile('report.pdf', pdf);Demonstration: eine Konvertierung in einem Node.js-Skript, ein Stapel von 12 Dateien in 9 Formaten und Seiten im Vergleich mit dem Druck der Anwendung, mit der sie erstellt wurden.
Was Sie damit bauen können
Dokumentensysteme ohne Internet
Dokumente in einem abgeschotteten Netz archivieren, anzeigen und bearbeiten. Die Konvertierung läuft in Ihrem eigenen Node.js-Prozess.
Massenkonvertierung alter Dateien
Archive mit .doc-, .xls-, .ppt-, Visio- und Publisher-Dateien in parallelen Prozessen nach PDF umwandeln, mit Zeitlimit pro Datei.
Langzeitarchivierung
PDF/A-Ausgabe (Stufen 2 und 3) für Unterlagen, die jahrzehntelang lesbar bleiben müssen, wahlweise mit Passwortschutz und Komprimierung.
Automatisierung und KI
Jedes Dokument lässt sich auch als strukturiertes JSON ausgeben (Text, Formate, Tabellen, Layout), bereit für Suchindizes, Datenextraktion oder Sprachmodelle.
Dokumente erzeugen
Word-Dokumente aus JSON und Excel- oder OpenDocument-Arbeitsmappen aus Ihren Daten schreiben und im selben Schritt als PDF ausgeben.
Vorschauen in Ihrer Anwendung
Seitenbilder und PDFs hochgeladener Dateien für Portale, Ticketsysteme und Viewer, auf dem Server oder im Browser.
Formate
Word, Excel und PowerPoint von 97 bis heute, OpenDocument, Visio und Publisher.
Mit dem Ausdruck vergleichen
Beispiele →Im Detail
Was dargestellt wird
- Textdokumente: Formatvorlagen, Listen, Tabellen (verbundene und verschachtelte Zellen, wiederholte Überschriftszeilen), Abschnitte mit eigener Seitengrösse und eigenen Kopfzeilen, Fuss- und Endnoten, Spalten, Tabstopps, Felder (Inhaltsverzeichnis mit Seitenzahlen, PAGE, REF, SEQ, DATE), Gleichungen, Kommentare und nachverfolgte Änderungen auf Wunsch, Hyperlinks und PDF-Lesezeichen.
- Tabellenkalkulationen: Zahlen- und Datumsformate, bedingte Formatierung (Farbskalen, Datenbalken, Symbolsätze), Diagramme und Bilder an ihrem Anker, Druckbereiche, Anpassen an die Seite, Drucktitel, Seitenumbrüche, Kopf- und Fusszeilen. Formeln werden nicht neu berechnet: Gedruckt werden die in der Datei gespeicherten Werte.
- Präsentationen: Folienmaster und Layouts, Designfarben, Farbverläufe, Bilder, Tabellen, Diagramme, SmartArt aus der in der Datei gespeicherten Zeichnung, Referentennotizen und ausgeblendete Folien auf Wunsch.
- Visio: Vererbung von Mastershapes und Designs, Geometrie (Bögen, Splines, NURBS), Verbinder mit Pfeilspitzen, Füllmuster und Farbverläufe, massstäbliche Zeichnungen, mehrere Seiten.
- Publisher: Textrahmen und verknüpfte Textflüsse, Masterseiten, Bilder, Formen, Tabellen, Silbentrennung in acht Sprachen.
- Schriften: Auf dem Server installierte Schriften werden über ihren Namen zugeordnet. Fehlen Arial, Times New Roman, Courier New oder Calibri, bleiben die Zeilenumbrüche dank mitgelieferter metrisch kompatibler Schriften erhalten. Mitgelieferte Noto-Schriften decken Griechisch, Kyrillisch, Hebräisch, Arabisch, Devanagari, Thai, Chinesisch, Japanisch und Koreanisch ab.
- PDF-Ausgabe: PDF 1.4; PDF/A-2b, 2u, 2a, 3b, 3u und 3a, geprüft mit veraPDF 1.30.2; getaggtes PDF; PDF/UA-1 für Word-Dateien. Dieselbe Eingabe ergibt dasselbe PDF, Byte für Byte.
Sicherheit
- Zur Laufzeit verwendet die Bibliothek nur in Node.js integrierte Module:
zlib,fs,crypto,path,os,urlundworker_threads. Mit ihr wird kein npm-Paket installiert. - Kein Netzwerkzugriff, keine Kindprozesse, kein
evalodernew Function, keine nativen Add-ons. - Keine externen Aufrufe: Die Bibliothek kontaktiert weder ToupieSoft noch sonst jemanden.
- Makros werden nie ausgeführt. Dateien mit Makros werden ohne diese konvertiert.
- Beschädigte oder nicht unterstützte Eingaben lösen einen typisierten Fehler aus. Bei einer beschädigten Datei in einem älteren Format wird auf ihren Text zurückgegriffen.
convertToPdfAsyncläuft in einem Worker-Thread und akzeptiert ein Zeitlimit (timeoutMs).
Leistung
Gemessen am 14. Oktober 2026 mit officepress c98a0ac: jedes Dokument dreimal in einem Node.js-Prozess konvertiert; angegeben ist der Median der Durchläufe 2 und 3. Laptop mit AMD Ryzen 9 5900HS (8 Kerne), 32 GB RAM, Windows 10, Node.js 24.15. Eine Konvertierung nutzt einen Kern.
| Dokumente | Median pro Seite | 95 % der Dateien unter |
|---|---|---|
| Word, RTF, OpenDocument-Text | 34 ms | 1,5 s |
| Tabellenkalkulationen | 25 ms | 0,85 s |
| Präsentationen | 31 ms | 1,7 s |
| Visio | 36 ms | 0,36 s |
| Publisher | 22 ms | 5,4 s |
| Alle | 31 ms | 1,7 s |
Grosse Dateien brauchen Zeit und Speicher: Eine 102-MB-Publisher-Datei benötigt 5,5 s und erhöht den Prozessspeicher um 670 MB. Führen Sie Konvertierungen auf einem Server in einem Pool von Worker-Threads aus und begrenzen Sie die Upload-Grösse.
Wie die Wiedergabetreue geprüft wird
Jede Version wird Seite für Seite mit dem PDF verglichen, das die Anwendung druckt, mit der das Dokument erstellt wurde: Word, Excel, PowerPoint und Publisher 2021, Visio 2019, LibreOffice für OpenDocument. Jeder gefundene Unterschied wird mit Datei, Seite und Bild erfasst, und eine Korrektur zählt erst, wenn das Dokument selbst korrekt gedruckt wird.
Die Beispiele stammen aus diesem Testbestand. Laden Sie die Quelldatei und beide PDFs herunter und vergleichen Sie.
Grenzen
- Formeln werden nicht neu berechnet.
- Die PDF-Ausgabe ist weder verschlüsselt noch signiert.
- WordArt-Verzerrungen und 3D-Effekte werden nur teilweise dargestellt.
- Andere Schriftsysteme als Lateinisch, Griechisch, Kyrillisch, Hebräisch, Arabisch, Devanagari, Thai und CJK werden ohne vollständiges Text-Shaping gezeichnet.
- Fehlt eine Schrift auf dem Server, können die Zeilenumbrüche leicht von Office abweichen.
Die vollständige Liste finden Sie in der Dokumentation.
Integration
import { convertToPdf } from '@toupiesoft/officepress';
app.get('/documents/:id/preview.pdf', async (req, res) => {
const file = await storage.read(req.params.id); // Ihr Speicher
res.type('application/pdf').send(convertToPdf(file)); // im Prozess, offline
});
- Im Prozess:
convertToPdfist synchron; geeignet für Skripte, Batch-Jobs und geringe Last. - Worker-Pool: für einen Vorschaudienst ein fester Pool von
worker_threadshinter einer Warteschlange, bemessen auf die Anzahl Kerne minus eins. Siehe Dokumentvorschauen.
Testen Sie sie mit Ihren eigenen Dateien
Eine 30-Tage-Testlizenz: die vollständige Bibliothek in Ihrer eigenen Anwendung.

