Bibliothèque Node.js
officepress
Les fichiers Word, Excel, PowerPoint, OpenDocument, Visio et Publisher en PDF, dans votre propre processus Node.js.
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);Démonstration : une conversion dans un script Node.js, un lot de 12 fichiers en 9 formats, et des pages comparées avec l’impression de l’application qui les a créées.
Ce que vous pouvez construire
Systèmes documentaires isolés
Archiver, prévisualiser et modifier des documents sur un réseau sans accès à Internet. La conversion tourne dans votre propre processus Node.js.
Conversion en masse de fichiers anciens
Transformer des archives de fichiers .doc, .xls, .ppt, Visio et Publisher en PDF, dans des processus parallèles avec une limite de temps par fichier.
Archivage à long terme
Sortie PDF/A (niveaux 2 et 3) pour les documents qui doivent rester lisibles pendant des décennies, avec protection par mot de passe et compression en option.
Automatisation et IA
Chaque document peut aussi être restitué en JSON structuré (texte, styles, tableaux, mise en page), prêt pour l’indexation, l’extraction de données ou les modèles de langage.
Génération de documents
Écrire des documents Word à partir de JSON et des classeurs Excel ou OpenDocument à partir de vos données, puis les imprimer en PDF dans la même étape.
Aperçus dans votre application
Images de pages et PDF des fichiers déposés, pour portails, systèmes de tickets et visionneuses, sur le serveur ou dans le navigateur.
Formats
Word, Excel et PowerPoint de 97 à aujourd’hui, OpenDocument, Visio et Publisher.
Comparer avec l’impression
Exemples →En détail
Ce qui est rendu
- Documents texte : styles, listes, tableaux (cellules fusionnées et imbriquées, lignes d’en-tête répétées), sections avec leur propre format de page et leurs propres en-têtes, notes de bas de page et notes de fin, colonnes, taquets de tabulation, champs (table des matières avec numéros de page, PAGE, REF, SEQ, DATE), équations, commentaires et modifications suivies sur demande, liens hypertexte et signets PDF.
- Tableurs : formats de nombre et de date, mise en forme conditionnelle (échelles de couleurs, barres de données, jeux d’icônes), graphiques et images à leur ancrage, zones d’impression, ajustement à la page, titres répétés, sauts de page, en-têtes et pieds de page. Les formules ne sont pas recalculées : ce sont les valeurs enregistrées dans le fichier qui sont imprimées.
- Présentations : masques et dispositions, couleurs du thème, dégradés, images, tableaux, graphiques, SmartArt d’après le dessin enregistré dans le fichier, notes de l’orateur et diapositives masquées sur demande.
- Visio : héritage des formes de base et des thèmes, géométrie (arcs, splines, NURBS), connecteurs avec pointes de flèche, motifs de remplissage et dégradés, dessins à l’échelle, plusieurs pages.
- Publisher : cadres de texte et articles liés, pages maîtres, images, formes, tableaux, césure en huit langues.
- Polices : les polices installées sur le serveur sont associées par leur nom. Lorsque Arial, Times New Roman, Courier New ou Calibri manquent, des polices fournies à métrique compatible conservent les retours à la ligne. Les polices Noto fournies couvrent le grec, le cyrillique, l’hébreu, l’arabe, le devanagari, le thaï, le chinois, le japonais et le coréen.
- Sortie PDF : PDF 1.4 ; PDF/A-2b, 2u, 2a, 3b, 3u et 3a, vérifiés avec veraPDF 1.30.2 ; PDF balisé ; PDF/UA-1 pour les fichiers Word. La même entrée donne le même PDF, octet pour octet.
Sécurité
- À l’exécution, la bibliothèque n’utilise que des modules intégrés à Node.js :
zlib,fs,crypto,path,os,urletworker_threads. Aucun paquet npm n’est installé avec elle. - Pas d’accès réseau, pas de processus enfants, pas de
evalni denew Function, pas de modules natifs. - Pas d’appels externes : la bibliothèque ne contacte ni ToupieSoft ni personne d’autre.
- Les macros ne sont jamais exécutées. Les fichiers contenant des macros sont convertis sans elles.
- Une entrée corrompue ou non prise en charge lève une erreur typée. Pour un fichier d’ancien format endommagé, seul le texte est repris.
convertToPdfAsyncs’exécute dans un worker thread et accepte une limite de temps (timeoutMs).
Performances
Mesuré le 14 octobre 2026 avec officepress c98a0ac : chaque document converti trois fois dans un même processus Node.js ; la médiane des passages 2 et 3 est indiquée. Ordinateur portable AMD Ryzen 9 5900HS (8 cœurs), 32 Go de RAM, Windows 10, Node.js 24.15. Une conversion utilise un cœur.
| Documents | Médiane par page | 95 % des fichiers en moins de |
|---|---|---|
| Word, RTF, texte OpenDocument | 34 ms | 1,5 s |
| Tableurs | 25 ms | 0,85 s |
| Présentations | 31 ms | 1,7 s |
| Visio | 36 ms | 0,36 s |
| Publisher | 22 ms | 5,4 s |
| Total | 31 ms | 1,7 s |
Les gros fichiers demandent du temps et de la mémoire : un fichier Publisher de 102 Mo prend 5,5 s et ajoute 670 Mo à la mémoire du processus. Sur un serveur, exécutez les conversions dans un pool de worker threads et limitez la taille des fichiers chargés.
Contrôle de la fidélité
Chaque version est comparée page par page avec le PDF imprimé par l’application qui a créé le document : Word, Excel, PowerPoint et Publisher 2021, Visio 2019, LibreOffice pour OpenDocument. Chaque différence constatée est consignée avec le fichier, la page et une image, et une correction n’est validée que lorsque le document lui-même s’imprime correctement.
Les exemples proviennent de ce banc d’essai. Téléchargez le fichier source et les deux PDF, et comparez.
Limites
- Les formules ne sont pas recalculées.
- La sortie PDF n’est ni chiffrée ni signée.
- Les déformations WordArt et les effets 3D ne sont rendus qu’en partie.
- Les écritures autres que latine, grecque, cyrillique, hébraïque, arabe, devanagari, thaï et CJK sont dessinées sans mise en forme complète des glyphes.
- Lorsqu’une police manque sur le serveur, les retours à la ligne peuvent différer légèrement de ceux d’Office.
La liste complète figure dans la documentation.
Intégration
import { convertToPdf } from '@toupiesoft/officepress';
app.get('/documents/:id/preview.pdf', async (req, res) => {
const file = await storage.read(req.params.id); // votre stockage
res.type('application/pdf').send(convertToPdf(file)); // dans le processus, hors ligne
});
- Dans le processus :
convertToPdfest synchrone ; adapté aux scripts, aux traitements par lots et aux faibles volumes. - Pool de workers : pour un service d’aperçu, un pool fixe de
worker_threadsderrière une file d’attente, dimensionné au nombre de cœurs moins un. Voir Aperçus de documents.
Essayez-la sur vos propres fichiers
Une licence d’essai de 30 jours : la bibliothèque complète dans votre propre application.

