Skip to main content
Open SourceTecnico

Come abbiamo creato un editor PDF open source gratuito con Next.js

Un approfondimento tecnico sulla creazione di EditoraPDF — il nostro percorso dall'idea a un editor PDF open source pronto per la produzione

Di EditoraPDF Team

Quando abbiamo iniziato a creare EditoraPDF, avevamo un obiettivo chiaro: realizzare un editor PDF open source completamente gratuito che rispetti la privacy degli utenti e funzioni interamente nel browser. Nessun server, nessun caricamento, nessun tracciamento — solo pura elaborazione lato client.

Questa è la storia di come l'abbiamo creato, delle sfide tecniche che abbiamo affrontato e delle decisioni che abbiamo preso lungo il percorso. Che tu sia uno sviluppatore che vuole creare qualcosa di simile o semplicemente curioso riguardo allo sviluppo open source, questo articolo ti offrirà uno sguardo completo dall'interno.

La visione: editing PDF con la privacy al primo posto

La maggior parte degli editor PDF di oggi richiede di caricare i propri documenti sui loro server. Per documenti sensibili come contratti, cartelle cliniche o estratti conto, questo è un incubo per la privacy.

Volevamo creare qualcosa di diverso:

  • Elaborazione 100% lato client — i file non lasciano mai il tuo browser
  • Nessuna installazione richiesta — funziona direttamente nei browser web
  • Nessuna registrazione o tracciamento — utilizzo completamente anonimo
  • Open source — codice trasparente che chiunque può verificare
  • Gratuito per sempre — nessun paywall o abbonamento

Con questi principi in mente, abbiamo iniziato a valutare le tecnologie che potessero rendere reale questa visione.

La scelta dello stack tecnologico

Framework frontend: Next.js 14

Abbiamo scelto Next.js 14 con il nuovo App Router per diversi motivi:

  • Eccellenti capacità SEO — rendering lato server e gestione dei metadati pronti all'uso
  • Supporto all'esportazione statica — distribuzione ovunque (Vercel, Netlify, GitHub Pages)
  • Integrazione con TypeScript — type safety e una migliore esperienza di sviluppo
  • Ottimizzazione delle prestazioni — code splitting automatico, ottimizzazione delle immagini
  • Esperienza di sviluppo — hot reload, ottima documentazione, vasto ecosistema

Rendering PDF: PDF.js

PDF.js di Mozilla è lo standard di riferimento per il rendering dei PDF nel browser. È ciò che alimenta il visualizzatore PDF integrato di Firefox.

Vantaggi principali:

  • Collaudato in milioni di browser
  • Qualità di rendering eccellente
  • Capacità di estrazione del testo
  • Rendering basato su canvas per le prestazioni
  • Manutenzione attiva da parte di Mozilla

Manipolazione PDF: pdf-lib

Per creare e modificare i PDF, usiamo pdf-lib — una libreria JavaScript pura che funziona interamente nel browser.

Capacità principali:

  • Creare PDF da zero
  • Modificare PDF esistenti (aggiungere pagine, ruotare, eliminare)
  • Incorporare testo, immagini e forme
  • Copiare pagine tra documenti
  • Zero dipendenze da Node.js

Gestione dello stato: Zustand

Invece di Redux, abbiamo scelto Zustand — una libreria di gestione dello stato minimale e veloce.

  • API semplice — nessun codice boilerplate
  • Progettazione TypeScript-first
  • Dimensione ridotta del bundle (~1KB)
  • Nessun context provider necessario

Styling: Tailwind CSS

Tailwind CSS ci offre uno styling utility-first con un'eccellente esperienza di sviluppo e bundle di produzione ridotti grazie al purging automatico.

Architettura e decisioni di progettazione

1. Elaborazione esclusivamente lato client

Tutto avviene nel browser:

User uploads PDF
  ↓
PDF.js parses and renders to canvas
  ↓
User makes edits (text, images, shapes)
  ↓
pdf-lib creates new PDF with changes
  ↓
Download to user's device

In nessun momento il file lascia il dispositivo dell'utente. Questa è vera privacy by design.

2. Sistema di coordinate normalizzato

Una sfida importante: i PDF hanno dimensioni di pagina diverse e gli utenti possono ingrandire o ridurre. Come tracciare le posizioni degli overlay?

Soluzione: Normalizzare tutte le coordinate nell'intervallo [0, 1].

// Instead of absolute pixels:
{ x: 150, y: 200 }

// We store normalized coordinates:
{ x: 0.25, y: 0.33 }

// Then scale to current viewport:
actualX = normalizedX * pageWidth * zoom
actualY = normalizedY * pageHeight * zoom

Questo rende gli overlay indipendenti dallo zoom e portabili tra diverse dimensioni di pagina.

3. Architettura dei componenti

Abbiamo strutturato l'app in componenti mirati:

  • PdfViewer — rendering del canvas principale
  • Thumbnails — barra laterale di navigazione delle pagine
  • Toolbar — controlli di zoom, rotazione, eliminazione
  • EditToolbar — selezione degli strumenti (testo, immagine, forma)
  • AdvancedOverlayLayer — rendering di testo, immagini, forme
  • ExportButton — logica di esportazione del PDF

4. Pattern di gestione dello stato

Il nostro store Zustand mantiene:

{
  originalFile: File,
  pages: [
    {
      id: string,
      originalIndex: number,
      rotation: 0 | 90 | 180 | 270,
      deleted: boolean,
      textOverlays: [],
      imageOverlays: [],
      shapeOverlays: []
    }
  ],
  selectedPageId: string,
  zoom: number,
  editMode: 'select' | 'text' | 'image' | 'shape'
}

Sfide tecniche che abbiamo affrontato

Sfida 1: Accuratezza dell'estrazione del testo

PDF.js è in grado di estrarre il testo, ma il posizionamento non è sempre perfetto al pixel a causa del modo in cui i PDF codificano il testo (a volte come singoli caratteri, a volte come parole).

Soluzione: Estraiamo gli elementi di testo con le loro matrici di trasformazione e li convertiamo in coordinate normalizzate con bounding box ampi.

Sfida 2: Prestazioni con PDF di grandi dimensioni

Il rendering di PDF con oltre 100 pagine può bloccare il browser.

Soluzione:

  • Caricamento lazy delle pagine (rendering solo delle pagine visibili)
  • Usare requestAnimationFrame per un rendering fluido
  • Consigliare un limite di 25MB / 50 pagine
  • Canvas offscreen per le miniature

Sfida 3: Qualità di esportazione

Incorporare testo e immagini in pdf-lib richiede un'attenta trasformazione delle coordinate dallo spazio del browser allo spazio del PDF.

Soluzione: Costruire una pipeline di trasformazione completa che gestisce:

  • Rotazioni delle pagine
  • Differenze nel sistema di coordinate (asse Y invertito nel PDF)
  • Incorporamento e dimensionamento dei font
  • Conversione del formato delle immagini

Sfida 4: Compatibilità tra browser

Browser diversi hanno implementazioni del canvas leggermente differenti e particolarità nel rendering dei PDF.

Soluzione: Test approfonditi su Chrome, Firefox, Safari ed Edge. Usare il rilevamento delle funzionalità invece del rilevamento del browser.

Perché lo abbiamo reso open source

Fin dal primo giorno sapevamo che doveva essere open source:

1. Trasparenza = Fiducia

Quando si tratta di documenti sensibili, gli utenti devono poter verificare che i file rimangano davvero in locale. L'open source consente a chiunque di verificare il codice.

2. Contributi della community

L'open source permette a sviluppatori di tutto il mondo di contribuire con nuove funzionalità, correggere bug e migliorare lo strumento.

3. Risorsa di apprendimento

Abbiamo imparato moltissimo dai progetti open source. Ora possiamo restituire qualcosa e aiutare altri a imparare Next.js, l'elaborazione dei PDF e lo sviluppo web.

4. Longevità

Anche se smettessimo di mantenerlo, la community può fare un fork e continuare lo sviluppo. Lo strumento continua a vivere.

I risultati

Dopo mesi di sviluppo, abbiamo lanciato EditoraPDF con:

100%
Elaborazione lato client
0 KB
Dati caricati sui server
MIT
Licenza open source
$0
Gratuito per sempre

Il codice sorgente è disponibile su github.com/affsquadDevs/editorapdf con licenza MIT.

Punti chiave per gli sviluppatori

  • L'elaborazione lato client è potente — I browser moderni possono gestire attività complesse che un tempo richiedevano server
  • Scegli le librerie giuste — PDF.js e pdf-lib ci hanno fatto risparmiare mesi di sviluppo
  • La normalizzazione delle coordinate è fondamentale — Rende gli overlay portabili e indipendenti dallo zoom
  • Le prestazioni contano — Il caricamento lazy e l'ottimizzazione sono cruciali per i file di grandi dimensioni
  • L'open source porta vantaggi a tutti — Trasparenza, community e apprendimento vincono tutti

Partecipa

EditoraPDF è un progetto open source e accogliamo con piacere i contributi di sviluppatori di ogni livello di esperienza.

Domande Frequenti

Con quale stack tecnologico è realizzato EditoraPDF?

EditoraPDF è realizzato con Next.js 14, TypeScript, React 18, PDF.js per il rendering, pdf-lib per la manipolazione, Zustand per la gestione dello stato e Tailwind CSS per lo styling. È completamente open source con licenza MIT.

Perché avete scelto Next.js per un editor PDF?

Next.js offre prestazioni eccellenti, capacità SEO, supporto all'esportazione statica e una grande esperienza di sviluppo. L'App Router rende semplice creare applicazioni veloci e ottimizzate per la SEO che possono essere distribuite ovunque.

EditoraPDF è davvero open source?

Sì, EditoraPDF è al 100% open source con licenza MIT. Il codice sorgente completo è disponibile su GitHub all'indirizzo github.com/affsquadDevs/editorapdf

Come funziona l'elaborazione PDF lato client?

PDF.js esegue il rendering dei PDF su canvas HTML nel browser, mentre pdf-lib manipola la struttura del PDF. Tutta l'elaborazione avviene localmente nel browser dell'utente usando JavaScript, garantendo privacy e sicurezza complete senza alcun caricamento sui server.

Posso usare il codice di EditoraPDF nel mio progetto?

Assolutamente sì! EditoraPDF è rilasciato con licenza MIT, il che significa che puoi usare, modificare e distribuire il codice liberamente, anche in progetti commerciali. Basta includere l'avviso di licenza originale.

Come posso contribuire al progetto?

Dai un'occhiata alla nostra Guida ai contributi su GitHub. Puoi contribuire con il codice, segnalare bug, suggerire funzionalità, migliorare la documentazione o aiutare con i test.

Considerazioni finali

Creare EditoraPDF è stato un percorso impegnativo ma gratificante. Abbiamo imparato un'enormità sull'elaborazione dei PDF, sulle capacità dei browser e sullo sviluppo open source.

La parte migliore? Ora chiunque può prendere questo codice, imparare da esso, modificarlo o creare qualcosa di ancora migliore. Questo è il potere dell'open source.

Se stai lavorando a un progetto simile o sei semplicemente curioso del codice, dai un'occhiata al repository GitHub. Saremmo felici di ricevere il tuo feedback, rispondere alle domande o esaminare le tue pull request.

© 2026 EditoraPDF. Tutti i diritti riservati.

Open Source