Technical

Modifica PDF nel browser: come funziona e perché la privacy conta

Come LuraPDF elabora i PDF interamente nel browser con pdf-lib, pdfjs-dist, Tesseract.js e WebAssembly: i tuoi file non vengono mai caricati.

LuraPDF Team
LuraPDF Team

Team Editoriale e Tecnico · 6 maggio 2026 · 10 minuti di lettura

Ogni volta che carichi un documento su uno strumento PDF basato su cloud, quel documento esiste su server che non controlli, elaborato da software che non puoi ispezionare, conservato da un'azienda con la propria politica di conservazione dei dati e sicurezza. Per un certo periodo, l'infrastruttura di qualcun altro detiene i tuoi contratti, dichiarazioni fiscali, cartelle mediche o documenti aziendali riservati.

LuraPDF funziona diversamente. Tutto avviene nella scheda del tuo browser, sul tuo hardware, con la gestione della memoria del tuo sistema operativo. Questo articolo spiega l'architettura tecnica che rende tutto ciò possibile e i compromessi ingegneristici coinvolti.

Il Browser come Piattaforma di Elaborazione Documenti

I browser moderni non sono più semplici motori di rendering HTML. Sono ambienti di esecuzione applicativa completi, dotati di:

  • Motore JavaScript (V8 in Chrome, SpiderMonkey in Firefox): esegue codice a velocità quasi nativa
  • WebAssembly (WASM): esegue codice C/C++ compilato a velocità quasi nativa in un ambiente isolato
  • Canvas API: consente la manipolazione delle immagini a livello di pixel
  • File System Access API: permette la lettura di file locali senza caricarli
  • Web Workers: esegue calcoli su thread in background senza bloccare l'interfaccia utente
  • ArrayBuffer / Blob: gestisce dati binari grezzi (come i byte PDF) in memoria

Queste funzionalità, unite insieme, abilitano una pipeline di elaborazione documenti completa che cinque anni fa avrebbe richiesto un server backend.

Le Tre Librerie Fondamentali

LuraPDF è costruito su tre librerie open source di base:

pdf-lib

pdf-lib è una libreria TypeScript per creare e modificare documenti PDF in qualsiasi ambiente JavaScript. Implementa una parte sostanziale della specifica PDF (ISO 32000), tra cui:

  • Creazione, modifica ed eliminazione di pagine
  • Incorporamento di font (sia i 14 font standard che font personalizzati TTF/OTF)
  • Incorporamento di immagini (JPEG, PNG)
  • Posizionamento di annotazioni testuali
  • Creazione e manipolazione di campi modulo
  • Metadati del documento (titolo, autore, data di creazione, ecc.)
  • Protezione del documento con password
  • Gestione della tabella dei riferimenti incrociati

Quando LuraPDF unisce PDF, utilizza pdf-lib per leggere l'albero delle pagine di ogni documento, normalizzare le risorse condivise e assemblare un nuovo PDF. Quando comprime, ri-codifica gli oggetti immagine con fattori di qualità inferiori. Quando protegge un file con password, deriva una chiave dalla tua password e scrive un documento cifrato usando il PDF Standard Security Handler, comprensibile da qualsiasi lettore.

pdf-lib opera interamente su oggetti ArrayBuffer — dati binari grezzi nella memoria del browser. Non vengono effettuate chiamate di rete.

pdfjs-dist

PDF.js è il motore di rendering PDF di Mozilla, distribuito come pdfjs-dist su npm. È il motore che alimenta il visualizzatore PDF integrato di Firefox, testato su milioni di PDF reali.

LuraPDF utilizza pdfjs-dist per:

  • Rendering delle pagine: convertire le pagine PDF in Canvas ImageData per la visualizzazione
  • Estrazione del testo: leggere i flussi di contenuto testuale dalle pagine PDF
  • Metadati delle pagine: ottenere le dimensioni delle pagine, i valori di rotazione e il tipo di contenuto

Quando vedi il tuo PDF renderizzato nell'interfaccia di LuraPDF — l'anteprima visiva delle pagine — è pdfjs-dist che esegue il rendering di ogni pagina su un elemento HTML Canvas.

Tesseract.js

Tesseract.js è la versione compilata in WebAssembly di Tesseract OCR. Tesseract è un motore OCR open source originariamente sviluppato da HP Labs (1985) e attualmente mantenuto da Google. Utilizza un modello di rete neurale LSTM (Long Short-Term Memory) per il riconoscimento dei caratteri.

L'esecuzione di Tesseract tramite WebAssembly nel browser significa:

  • Il binario WASM da 22 MB viene caricato una volta e memorizzato nella cache dal browser
  • L'elaborazione OCR viene eseguita su CPU tramite WebAssembly, non su GPU
  • L'elaborazione è più lenta rispetto all'OCR cloud (che utilizza cluster GPU) ma produce lo stesso output di qualità
  • Il contenuto del tuo documento non lascia mai il tuo dispositivo

Per una scansione di 20 pagine: l'OCR nel browser richiede circa 30–120 secondi. Un servizio cloud potrebbe impiegarne 2–5. Il compromesso è privacy vs. velocità.

L'Architettura: Dal File all'Output

Ecco cosa succede quando, ad esempio, comprimi un PDF in LuraPDF:

  1. Selezione del file: trascini un PDF sulla zona di rilascio. La File API del browser legge il file in un ArrayBuffer — byte grezzi nella memoria del browser. Non avviene alcun caricamento.

  2. Validazione: un rapido controllo che i byte magici %PDF compaiano all'inizio dell'ArrayBuffer.

  3. Caricamento: PDFDocument.load() di pdf-lib analizza la tabella dei riferimenti incrociati, legge l'albero degli oggetti e costruisce una rappresentazione del documento in memoria.

  4. Enumerazione delle immagini: la libreria percorre i flussi di contenuto delle pagine per trovare gli XObject immagine (immagini incorporate). Vengono estratti la larghezza, l'altezza, il tipo di compressione e i dati in byte di ogni immagine.

  5. Ri-codifica: per ogni immagine, i dati pixel grezzi vengono disegnati su un elemento HTML Canvas, quindi ri-esportati con un fattore di qualità JPEG inferiore usando canvas.toBlob('image/jpeg', quality). L'oggetto immagine originale viene sostituito con la versione codificata più piccola.

  6. Serializzazione del documento: il metodo save() di pdf-lib serializza il documento modificato di nuovo in byte. I flussi di oggetti vengono compressi con DEFLATE.

  7. Download: i byte vengono incapsulati in un oggetto Blob, viene creato un URL oggetto temporaneo (URL.createObjectURL(blob)) e un clic programmatico su <a> attiva il meccanismo di download del browser.

Dati totali trasmessi a qualsiasi server esterno: zero byte.

Web Workers: Mantenere l'Interfaccia Reattiva

L'elaborazione PDF è intensiva per la CPU. Eseguirla sul thread JavaScript principale bloccherebbe la scheda del browser — non potresti scorrere, fare clic o vedere aggiornamenti sull'avanzamento mentre il file viene elaborato.

LuraPDF esegue tutti i calcoli pesanti (OCR, analisi di PDF di grandi dimensioni, ri-codifica delle immagini) in Web Workers — thread JavaScript separati che vengono eseguiti in background. Il thread principale gestisce l'interfaccia utente, mostra le barre di avanzamento e comunica con il worker tramite scambio di messaggi (postMessage / onmessage).

Quando l'OCR è in esecuzione, un evento di avanzamento si attiva dopo l'elaborazione di ogni pagina. Il worker invia { page: 5, total: 20, confidence: 94 } al thread principale, che aggiorna la barra di avanzamento. La tua interfaccia utente rimane interattiva per tutta la durata.

Gestione della Memoria

La memoria del browser è limitata. Un PDF da 200 MB caricato in memoria, elaborato e salvato potrebbe richiedere 400–600 MB di RAM (byte originali + dati Canvas intermedi + byte di output). Su sistemi con RAM limitata, questo può generare pressione sulla memoria.

Strategie utilizzate:

  • Elaborazione delle pagine in streaming: per le operazioni su più pagine, le pagine vengono elaborate e gli elementi Canvas intermedi vengono scartati dopo l'uso
  • URL.revokeObjectURL(): gli URL blob temporanei vengono revocati dopo il download per consentire la garbage collection
  • Terminazione dei Worker: i Web Workers vengono terminati dopo aver completato il loro compito per recuperare la memoria utilizzata

Per file di grandi dimensioni (>100 MB), i browser moderni gestiscono la situazione senza problemi su sistemi con 8+ GB di RAM. I sistemi più vecchi o con memoria limitata potrebbero avere difficoltà con file sorgente da oltre 100 MB.

L'Architettura per la Privacy

Il modello di sicurezza è applicato dalla same-origin policy del browser e dall'architettura di isolamento:

  • Nessuna richiesta HTTP: nessuna chiamata API esterna, nessuna telemetria, nessuna chiamata analytics durante l'elaborazione dei documenti
  • Esecuzione in sandbox: i Web Workers non possono effettuare chiamate di rete a origini esterne
  • Nessuna archiviazione persistente: i file elaborati non vengono scritti nello storage del browser (localStorage, IndexedDB o File System Access)
  • Memoria con scope alla scheda: quando chiudi la scheda, tutti gli ArrayBuffer e gli oggetti Blob ad essa associati vengono sottoposti a garbage collection

Questa architettura è verificabile: apri la scheda Network in DevTools del browser mentre elabori un file. Vedrai zero richieste durante l'operazione di elaborazione.

Librerie Open Source: Ispezionabili, Non una Scatola Nera

Tutte e tre le librerie fondamentali — pdf-lib, pdfjs-dist e Tesseract.js — sono open source con repository pubblici su GitHub. Le implementazioni sono ispezionabili da chiunque. Il codice di elaborazione PDF che gira in LuraPDF non è una scatola nera proprietaria; è codice pubblico con utenti reali, issue e contributi.

Questo è importante per la fiducia. Quando un servizio cloud dice "elaboriamo ed eliminiamo i tuoi file", stai credendo sulla parola. Quando LuraPDF usa librerie open source in una sandbox del browser senza chiamate di rete, puoi verificare l'affermazione osservando la scheda network.

Compromessi rispetto all'Elaborazione Cloud

Il modello basato su browser presenta compromessi reali che vale la pena riconoscere onestamente:

Velocità: i servizi cloud hanno cluster GPU e infrastrutture dedicate. L'OCR nel browser su un documento di grandi dimensioni richiede da 2 a 10 volte il tempo di un equivalente cloud. La compressione è rapida perché utilizza direttamente la Canvas API.

Limiti di dimensione dei file: la memoria del browser è il vincolo. File molto grandi (>300 MB) possono raggiungere i limiti di memoria su alcuni sistemi. I servizi cloud non hanno questo vincolo.

Potenza di elaborazione: WASM gira al 40–80% della velocità del C++ nativo. I servizi cloud eseguono codice nativo ottimizzato. Per la maggior parte dei documenti questa differenza è impercettibile; per lavori OCR su oltre 100 pagine è evidente.

Funzionalità: alcune funzionalità PDF avanzate (verifica della conformità PDF/X, gestione professionale del colore, flussi di lavoro CMYK) richiedono strumenti specializzati lato server. L'elaborazione nel browser gestisce il 95% dei casi.

Per l'elaborazione quotidiana dei documenti — comprimere, unire, firmare, convertire, oscurare — il modello basato su browser è abbastanza veloce, privato per design e non richiede account o abbonamenti.

Domande Frequenti

LuraPDF raccoglie telemetria o dati sull'utilizzo? LuraPDF utilizza Google Analytics per le statistiche aggregate delle visualizzazioni di pagina. Le operazioni di elaborazione dei documenti non generano eventi analytics. Il contenuto dei tuoi file non viene mai trasmesso.

Posso verificare che non avvenga alcun caricamento? Sì. Apri gli Strumenti per sviluppatori (F12), fai clic sulla scheda Network e filtra per "XHR" o "Fetch". Elabora un file. Osserva zero richieste di rete relative ai documenti durante l'elaborazione.

Perché l'OCR richiede così tanto tempo rispetto ad altri servizi? Tesseract.js basato su browser gira su CPU tramite WebAssembly. I servizi OCR cloud girano su cluster GPU che elaborano i caratteri ordini di grandezza più velocemente. Il compromesso è che il tuo documento non lascia mai il tuo browser.

Cosa succede se chiudo la scheda durante l'elaborazione? L'elaborazione si interrompe immediatamente. La memoria della scheda del browser viene sottoposta a garbage collection. Il file originale sul disco rimane invariato.

Il codice è open source? Le librerie di elaborazione fondamentali (pdf-lib, pdfjs-dist, Tesseract.js) sono open source. Il codice dell'interfaccia di LuraPDF non è attualmente open source, ma la pipeline di elaborazione utilizza solo componenti open source.

Il passaggio all'elaborazione dei documenti basata su browser non è un espediente. È una scelta architetturale genuina con vantaggi misurabili in termini di privacy e fiducia — al costo della velocità nelle operazioni intensive. Per i documenti che preferiresti non esistessero sui server di qualcun altro, è il compromesso giusto.

Sull'autore

LuraPDF Team
LuraPDF Team

Team Editoriale e Tecnico · 6 maggio 2026 · 10 minuti di lettura

Il team LuraPDF è un gruppo di esperti di elaborazione documenti, ingegneri software e technical writer che rendono la modifica dei PDF gratuita, privata e accessibile.