Introduzione

Rapida digressione sull'architettura di PDF Clown.

NOTA: Questo articolo è solo una bozza da rifinire e completare.

Anatomia

Affinché rappresenti quanto possibile rigorosamente e nitidamente il contenuto di files PDF, PDF Clown è caratterizzato da una struttura stratificata che cela progressivamente i dettagli sintattici (quegli "strani geroglifici" ;-)) e rivela le entità semantiche (pagine, segnalibri, caratteri ecc.), permettendo agli utenti di ridurre la sezione d'accesso quanto desiderato.

[Diagramma: Struttura stratificata di PDF Clown]

Ecco un diagramma di classe raffigurante le entità principali della libreria e le loro relazioni: notare che si tratta solo di una vista più dettagliata sui medesimi strati descritti sopra.

[Diagramma: Classi principali di PDF Clown]

Il diagramma sottostante rappresenta un oggetto Document (l'elemento alla radice di un file PDF modellato da PDF Clown) come è visto attraverso gli strati:

  1. Byte layer (file PDF grezzo): il rettangolo punteggiato dentro l'icona del file PDF contiene un frammento di dati che rappresenta un oggetto Dictionary di tipo Catalog (elemento-radice del file);
  2. Token layer (interpretazione lessicale (scansione) del file PDF): i bytes dell'oggetto Dictionary di tipo Catalog vengono aggregati in elementi atomici (lessemi);
  3. Object layer (strutture dati emergenti dall'aggregazione di lessemi): è riconosciuto lo schema di un oggetto indiretto, quindi viene istanziato un PdfIndirectObject che incapsula i dati dell'oggetto Dictionary di tipo Catalog;
  4. File layer (rappresentazione sintattica superiore del file PDF in PDF Clown): il PdfIndirectObject contenente l'oggetto Dictionary di tipo Catalog è schierato tra gli altri per rappresentare la struttura del file PDF;
  5. Document layer (rappresentazione semantica del file PDF in PDF Clown): l'oggetto Dictionary di tipo Catalog viene incapsulato in un oggetto Document, il quale eredita da PdfObjectWrapper (ponte tra l'object layer e il document layer).
[Diagramma: Un oggetto Document visto attraverso gli strati]

Funzionalità

Manipolazione di contenuti

Qui intendo descrivere una tra le funzionalità supportate da PDF Clown, cosicché possiate meglio valutare la ricchezza e flessibilità che la sua architettura consente. Per favore notate che qui ci si riferisce alla versione 0.0.4 o successiva di PDF Clown (le versioni precedenti sono caratterizzate da un modello meno sofisticato).

La manipolazione di contenuti grafici può essere realizzata a diversi livelli, in base alle vostre esigenze d'astrazione:

  1. content stream (livello inferiore):
    1. content stream non gestito: questa è la rappresentazione inferiore dei contenuti grafici, espressi come bytes. Vi si può accedere tramite oggetti PdfStream.
    2. content stream gestito: questa è la rappresentazione sintattica inferiore dei contenuti grafici, espressi come tokens (pezzi letterali che costituiscono operazioni e oggetti grafici (testo, immagini, tracciati...)). Vi si può accedere tramite oggetti Parser.
  2. modello di contenuto (livello intermedio):
    1. modello di contenuto non gestito: i tokens vengono aggregati in operazioni e oggetti grafici, inconsapevoli del loro stato grafico corrente. Vi si può accedere tramite oggetti Contents.
    2. modello di contenuto gestito: operazioni e oggetti grafici sono contestualizzati nello stato grafico corrente. Vi si può accedere tramite oggetti ContentScanner.
  3. composizione (alto livello):
    1. composizione primitiva: operazioni e oggetti grafici vengono astratti in elementi grafici. Vi si può accedere tramite oggetti PrimitiveFilter.
    2. composizione statica: gli elementi grafici sono vincolati in aree di pagina a scopo di allineamento. Vi si può accedere tramite oggetti BlockFilter.
    3. composizione dinamica: gli elementi grafici possono estendersi attraverso le pagine a scopo di composizione fluida. Vi si può accedere tramite oggetti FlowFilter (NOTA: attualmente questo livello non è stato ancora implementato).

I livelli content stream e modello di contenuto sono utilizzabili sia in lettura che in scrittura di files PDF, mentre il livello di composizione è una funzionalità di sola scrittura.