Giocare a Tetris in un file PDF: incredibile ma vero

L'esperimento di un ricercatore, che ha sviluppato un gioco come Tetris all'interno di un file PDF, evidenzia la versatilità e le potenzialità del formato. I moderni motori PDF permettono l'esecuzione automatica di codice JavaScript all'interno del browser Web.

Da tempo non è più necessario installare applicazioni come Adobe Reader e simili perché i browser Web integrano un motore PDF in grado di aprire e gestire documenti in questo formato. PDFium e PDF.js sono utilizzati da alcuni dei principali browser, integrati direttamente per la visualizzazione nativa dei file PDF. Un ricercatore indipendente, Thomas Rinsma, ha voluto dimostrare l’incredibile versatilità di questi motori PDF: sia PDFium che PDF.js constano di sufficienti primitive per costruire funzionalità interattiva e realizzare, addirittura, il videogioco Tetris all’interno di un normale documento PDF.

Cosa sono PDFium e PDF.js

PDFium è un motore PDF open source sviluppato da Google, integrato principalmente nei browser basati su Chromium:

  • Google Chrome: Utilizza PDFium per la visualizzazione dei file PDF integrata nel browser. Non è necessario alcun plugin o estensione aggiuntiva.
  • Microsoft Edge: La versione basata su Chromium (rilasciata nel 2020) utilizza PDFium per gestire i PDF. Tuttavia, Microsoft ha aggiunto funzionalità personalizzate, come l’annotazione migliorata e la lettura vocale.
  • Opera e Vivaldi: Essendo basati su Chromium, entrambi i browser ereditano a loro volta PDFium come motore PDF predefinito.

PDF.js è una libreria JavaScript sviluppata da Mozilla per la visualizzazione dei PDF direttamente nel browser, senza la necessità di plugin aggiuntivi:

  • Mozilla Firefox: Integra PDF.js nativamente come visualizzatore PDF predefinito. È uno dei primi browser a fornire una soluzione completamente basata su JavaScript per i PDF.
  • Brave: Sebbene basato su Chromium, Brave utilizza PDFium come motore PDF predefinito, ma PDF.js può essere aggiunto come estensione.

Dal canto suo, Apple Safari non utilizza né PDFium né PDF.js. Safari poggia sulle API di macOS per la visualizzazione dei PDF, sfruttando la tecnologia nativa di Apple.

PDFtris: come funziona Tetris in un documento PDF

Provate a questo punto ad aprire il documento PDFtris congegnato da Rinsma e fate clic sul riquadro Start game. Utilizzando i pulsanti posti al di sotto del “campo di gioco”, potrete muovere le varie forme e incastrarle l’una con l’altra. Il tasto “spin” permette di attivare una rotazione.

È tuttavia possibile giocare anche da tastiera cliccando sul riquadro Type here for keyboard controls quindi servendosi dei tasti fisici W, A, S e D.

Tetris in un documento PDF

Com’è possibile ottenere un effetto del genere utilizzando un “semplice” documento PDF?

Rinsma ricorda che il formato PDF non è affatto “semplice”. All’interno dei file in questo formato è possibile aggiungere codice di programmazione che motori come PDFium e PDF.js sono in grado di leggere, interpretare ed eseguire. Cliccando qui potete trovare lo script Python sviluppato da Rinsma che genera il file PDF (out.pdf) contenente le routine JavaScript in grado di aggiungere il riquadro di Tetris sulla pagina del documento.

Qualche considerazione finale

L’esperimento di creare un gioco come Tetris in un PDF è molto più che un esercizio di programmazione creativa. È una dimostrazione pratica delle potenzialità latenti di una tecnologia consolidata come quella alla base dei file PDF. L’approccio utilizzato invita sviluppatori e tecnici a riconsiderare i limiti percepiti degli strumenti che usiamo quotidianamente.

La possibilità di eseguire codice JavaScript in maniera così naturale, al caricamento di un file PDF nel browser Web, fa riflettere anche sull’opportunità di verificare in maniera più puntuale ciò che viene caricato. Sarebbe utile che i principali motori PDF per browser Web iniziassero a informare gli utenti della presenza di codice JavaScript nel documento, chiedendo un’esplicita conferma prima dell’effettiva esecuzione.

Ti consigliamo anche

Link copiato negli appunti