Pidieffer

Qui di seguito trovi la bozza di progetto per applicazione che fornisca la possibilità di compilazione dei files PDF distribuiti dalla pubblica amministrazione italiana.

Questo documento cerca di delineare le esigenze, gli obiettivi da perseguire ed i mezzi per farlo, nella progettazione e sviluppo di un'applicazione per la compilazione dei files PDF.

Indice

 

Situazione

La pubblica amministrazione italiana distribuisce ai cittadini, attraverso la rete Internet, un certo numero di moduli in formato elettronico, che i cittadini devono usare per adempiere ai loro doveri in materia fiscale. Questi moduli sono distribuiti come files in formato PDF, ma i campi in essi rappresentati sono solo delle immagini statiche (ovvero delle caselle rettangolari disegnate), non dei campi PDF compilabili, quindi le applicazioni già esistenti che permettono la compilazione dei files PDF contenenti campi compilabili (esempi Scribus, Adobe Reader) sono inutili in questo scenario o, al meglio, non ottimizzate per questo compito.

Esigenze

Compilare i files PDF tipicamente distribuiti da vari enti della pubblica amministrazione italiana. Questi files PDF normalmente non contengono campi compilabili elettronicamente, ma sono fatti per essere stampati e compilati a mano su carta.

Obiettivi

Dare uno strumento accessibile a tutti per compilare i suddetti files PDF attraverso una procedura elettronica.

Vincoli

L'applicazione deve essere utilizzabile sul maggior numero di computers possibili, indipendentemente, nei limiti del possibile, dal sistema operativo e dall'harware. L'applicazione deve impedire agli utenti di modificare graficamente l'aspetto dei moduli compilati, ovvero deve permettere di scrivere solo negli spazi lasciati bianchi all'interno del modulo ed espressamente dedicati alla compilazione manuale. L'applicazione deve impedire all'utente di sovrapporre qualsivoglia immagine ai moduli, o comunque di modificare i moduli in modo arbitrario che non sia il testo da inserire nelle caselle predisposte; in particolare l'utente dovrà firmare a mano il modulo dopo averlo stampato oppure apporre firma digitale usando altre applicazioni apposite.

Attività

Qui dovremmo identificare i vari passi che ci porteranno al completamento del progetto. Io sono nato programmatore e mi viene naturale saltare subito alla scrittura del codice, ma mi rendo conto che qui manca qualcosa.

Ci provo comunque:

  • Ricerca strumenti disponibili
  • Scelta della piattaforma di sviluppo
  • Raccolta di alcuni files PDF rilevanti
  • Identificazione degli strumenti che useremo per le strutture dati (direi che Xschema + XML + XSL potrebbe andare bene, ma se ci sono alternative vale la pena discuterne)
  • Definizione della struttura dati che servirà a descrivere come va compilato ogni file PDF
  • Compilazione delle strutture dati, una per ogni file PDF che il software sarà in grado di compilare
    • Possiamo pensare anche ad un designer che permette di descrivere il PDF in modo visuale e restituisce in output la struttura dati compilata
  • Sviluppo del software
    • Prende un file PDF, la sua struttura dati compilata, i dati che l'utente vuole inserire nel PDF e compila il PDF
      • Questo significa ovviamente creare un'interfaccia utente che permetta di selezionare un PDF fra quelli noti e chieda automaticamente all'utente i dati che ha senso chiedere per quel PDF.

Nota: un'impostazione del software meno rigida della presente sarebbe un software che permette all'utente di scrivere liberamente sul PDF in modalità WYSIWYG. Purtroppo questo, per quanto ne so, è abbastanza difficile da ottenere se si vuole una sufficiente indipendeza dalla piattaforma su cui il software girerà. Inoltre ritengo sia meglio poter "garantire" il funzionamento del software su un numero limitato di files PDF utili e noti a priori, piuttosto che far sperare nel suo funzionamento su qualsiasi file PDF in circolazione.

Strumenti esistenti

  • Per i dati
    • XML
      • Esistino dizionari già fatti che fanno al caso nostro?
      • XSchema è più potente dei normali DTD, ma è altrettanto supportato?
      • XSL/FO è utilizzabile per la generazione dei PDF compilati? (Se lo fosse quasi tutto il software si ridurrebbe all'interfaccia utente)
  • Per la scrittura del codice
    • Librerie per la modifica dei files PDF
      • iText (Java)
      • PC4P (PHP)
    • Librerie per la gestione di XML
      • Apache Xalan (C++, Java) e Xerces (C++, Java, Perl)
    • Linguaggi di sviluppo
      • Ne usiamo più di uno? Magari uno ideale per creare l'interfaccia utente, un altro ideale per la creazione del file PDF. Per esempio, Java è una pessima scelta per l'interfaccia utente (a meno che non sia web based con megacluster di server sotto il didietro), ma una buona scelta per la creazione del PDF.
        • Per l'interfaccia utente
          • PHP
          • Python (Plone via Web, GTK/WxPython lato client)
        • Per la generazione del PDF
          • C/C++
          • Java
          • PHP
          • ReportLab (Python)
    • Ambienti di sviluppo
      • Eclipse
      • NetBeans
      • Altri?
    • Sviluppo in team
      • Bazaar
      • CVS
      • SVN (il più usato ultimamente)