Libreria Node.js
officepress
File Word, Excel, PowerPoint, OpenDocument, Visio e Publisher in PDF, nel suo processo 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);Dimostrazione: una conversione in uno script Node.js, un lotto di 12 file in 9 formati e pagine confrontate con la stampa dell’applicazione che le ha create.
Cosa può costruire
Sistemi documentali isolati
Archiviare, visualizzare e modificare documenti in una rete senza accesso a Internet. La conversione gira nel suo processo Node.js.
Conversione in massa di file datati
Trasformare archivi di file .doc, .xls, .ppt, Visio e Publisher in PDF, in processi paralleli con un limite di tempo per file.
Archiviazione a lungo termine
Uscita PDF/A (livelli 2 e 3) per documenti che devono restare leggibili per decenni, con protezione tramite password e compressione opzionali.
Automazione e IA
Ogni documento può uscire anche come JSON strutturato (testo, stili, tabelle, impaginazione), pronto per indici di ricerca, estrazione di dati o modelli linguistici.
Generazione di documenti
Scrivere documenti Word da JSON e cartelle Excel o OpenDocument dai suoi dati, poi stamparli in PDF nello stesso passaggio.
Anteprime nella sua applicazione
Immagini delle pagine e PDF dei file caricati per portali, sistemi di ticket e visualizzatori, sul server o nel browser.
Formati
Word, Excel e PowerPoint dal 97 a oggi, OpenDocument, Visio e Publisher.
Confrontare con la stampa
Esempi →In dettaglio
Cosa viene reso
- Documenti di testo: stili, elenchi, tabelle (celle unite e annidate, righe di intestazione ripetute), sezioni con formato di pagina e intestazioni proprie, note a piè di pagina e note di chiusura, colonne, tabulazioni, campi (indice con numeri di pagina, PAGE, REF, SEQ, DATE), equazioni, commenti e revisioni tracciate su richiesta, collegamenti ipertestuali e segnalibri PDF.
- Fogli di calcolo: formati numerici e di data, formattazione condizionale (scale di colori, barre dei dati, set di icone), grafici e immagini nella loro posizione di ancoraggio, aree di stampa, adattamento alla pagina, titoli ripetuti, interruzioni di pagina, intestazioni e piè di pagina. Le formule non vengono ricalcolate: vengono stampati i valori salvati nel file.
- Presentazioni: master e layout, colori del tema, sfumature, immagini, tabelle, grafici, SmartArt dal disegno memorizzato nel file, note del relatore e diapositive nascoste su richiesta.
- Visio: ereditarietà da master e temi, geometria (archi, spline, NURBS), connettori con punte di freccia, motivi di riempimento e sfumature, disegni in scala, più pagine.
- Publisher: cornici di testo e articoli collegati, pagine master, immagini, forme, tabelle, sillabazione in otto lingue.
- Caratteri: i caratteri installati sul server vengono associati per nome. Se mancano Arial, Times New Roman, Courier New o Calibri, i caratteri inclusi con metriche compatibili mantengono le interruzioni di riga. I caratteri Noto inclusi coprono greco, cirillico, ebraico, arabo, devanagari, thai, cinese, giapponese e coreano.
- Output PDF: PDF 1.4; PDF/A-2b, 2u, 2a, 3b, 3u e 3a, verificati con veraPDF 1.30.2; PDF con tag; PDF/UA-1 per i file Word. Lo stesso input produce lo stesso PDF, byte per byte.
Sicurezza
- In esecuzione la libreria usa solo moduli integrati in Node.js:
zlib,fs,crypto,path,os,urleworker_threads. Con essa non viene installato alcun pacchetto npm. - Nessun accesso alla rete, nessun processo figlio, nessun
evalonew Function, nessun add-on nativo. - Nessuna chiamata esterna: la libreria non contatta né ToupieSoft né altri.
- Le macro non vengono mai eseguite. I file con macro vengono convertiti senza di esse.
- Un input corrotto o non supportato solleva un errore tipizzato. Per un file legacy danneggiato si ricorre al solo testo.
convertToPdfAsyncviene eseguito in un worker thread e accetta un limite di tempo (timeoutMs).
Prestazioni
Misurato il 14 ottobre 2026 con officepress c98a0ac: ogni documento convertito tre volte in un unico processo Node.js; viene riportata la mediana delle esecuzioni 2 e 3. Portatile con AMD Ryzen 9 5900HS (8 core), 32 GB di RAM, Windows 10, Node.js 24.15. Una conversione usa un core.
| Documenti | Mediana per pagina | 95 % dei file entro |
|---|---|---|
| Word, RTF, testo OpenDocument | 34 ms | 1,5 s |
| Fogli di calcolo | 25 ms | 0,85 s |
| Presentazioni | 31 ms | 1,7 s |
| Visio | 36 ms | 0,36 s |
| Publisher | 22 ms | 5,4 s |
| Totale | 31 ms | 1,7 s |
I file di grandi dimensioni richiedono tempo e memoria: un file Publisher di 102 MB richiede 5,5 s e aggiunge 670 MB alla memoria del processo. Su un server, esegua le conversioni in un pool di worker thread e limiti la dimensione dei file caricati.
Come viene verificata la fedeltà
Ogni versione viene confrontata pagina per pagina con il PDF stampato dall’applicazione che ha creato il documento: Word, Excel, PowerPoint e Publisher 2021, Visio 2019, LibreOffice per OpenDocument. Ogni differenza riscontrata viene registrata con il file, la pagina e un’immagine, e una correzione conta solo quando il documento stesso viene stampato correttamente.
Gli esempi provengono da questo banco di prova. Scarichi il file sorgente e i due PDF, e confronti.
Limiti
- Le formule non vengono ricalcolate.
- L’output PDF non è cifrato né firmato.
- Le deformazioni WordArt e gli effetti 3D sono resi solo in parte.
- Le scritture diverse da latino, greco, cirillico, ebraico, arabo, devanagari, thai e CJK vengono disegnate senza shaping completo.
- Se un carattere manca sul server, le interruzioni di riga possono differire leggermente da Office.
L’elenco completo è nella documentazione.
Integrazione
import { convertToPdf } from '@toupiesoft/officepress';
app.get('/documents/:id/preview.pdf', async (req, res) => {
const file = await storage.read(req.params.id); // il suo storage
res.type('application/pdf').send(convertToPdf(file)); // nel processo, offline
});
- Nel processo:
convertToPdfè sincrono; adatto a script, job batch e traffico ridotto. - Pool di worker: per un servizio di anteprima, un pool fisso di
worker_threadsdietro una coda, dimensionato sul numero di core meno uno. Veda Anteprime dei documenti.
La provi sui suoi file
Una licenza di prova di 30 giorni: la libreria completa nella sua applicazione.

