# Breve introduzione al formato RTF

Home Page | Commenti | Articoli | Faq | Documenti | Ricerca | Archivio | Storie dalla Sala Macchine | Contribuire

A cura di Davide Bianchi | Ideato dalla Microsoft è un formato "portabile" per la definizione di documenti comprendenti formattazione di paragrafo, di carattere e di pagina.

Cosè l'RTF |  | L'RTF (Rich Text Format) è una metodo per codificare testo e grafica studiato per semplificare il trasferimento di informazioni tra le applicazioni. In sostanza si tratta di una specifica ideata dalla Microsoft molto simile come contenuti alla specifica PostScript per la definizione della pagina. L'RTF è un tipo di codifica del testo "tagged", cioè il documento viene codificato come del testo "semplice" e dei "marcatori" o "identificatori" (tag) che indicano quale/i tipo/tipi di "abbellimento" (grassetto, corsivo, tipo di carattere) applicare al "testo semplice". Come concetto è praticamente lo stesso dell'HTML, solo che l'RTF consente di specificare anche delle informazioni di impaginazione molto precise (la dimensione e l'orientamento del foglio per esempio) che in HTML mancano completamente, e di aggiungere all'interno del documento stesso il codice necessario alla tracciatura di grafici e disegni. Il documento RTF può contenere moltissimi "tag", non è detto che tutti i programmi che leggono il documento siano in grado di interpretare correttamente tutti i tag (l'RTF è una specifica tutt'ora in lavorazione, ed è cambiato molto dal 92 ad oggi), in generale un programma interpreta solo i tag che è in grado di riconosciere, se non è in grado di identificare un tag, lo ignora.
Come si presenta l'RTF |  | I tag RTF consentono di specificare le caratteristiche di una o più lettere (o parole), come nell'HTML. I tag RTF in genere sono composti dal carattere \ seguito da una o più lettere che identificano il tag e da uno o più numeri nel caso il tag richieda un parametro numerico (ad esempio i tag che specificano la dimensione del carattere richiedono che la dimensione sia indicata in numeri), il tag deve essere separato dal testo a cui si applica da uno spazio, questo spazio però non apparirà nel testo stampato, il tag ed il testo a cui questo deve essere applicato sono rachiusi tra parentesi graffe { }. Un tag tipico è:
    {\b Questo testo è in grasseto.}
I tag possono anche essere "nidificati", ovvero un tag può essere specificat nel corpo di un altro tag:
    {\b Questo testo è in grassetto, {\i e questo è anche in corsivo.}}
Un documento RTF |  | Un file RTF deve essere identificato in modo certo, il file deve iniziare con il tag \rtf, seguito dal numero di versione RTF (di solito 1) e dal set dei caratteri usato (di solito \ansi) Esempio:
    {\rtf1\ansi
       Questo è del testo
    }
Ok, questo è solamente un esempio, però è valido per capire il formato.
Specificare i font da usare |  | I font (tipi di carattere) che vengono usati nel documento devono essere specificati all'inizio, questo si fa definendo una Tabella dei Font definita come segue:
    {\fonttable
    {\fN \famiglia \fcharsetN \fprqN NomeFont; }
    ...altre definizioni
    }
dove:
N | è un numero progressivo a cui ci si riferirà dopo quando si vuole utilizzare il font.
famiglia | è uno di:
\fswiss | carattere Helvetica, Arial, Swiss o comunque font privo di "grazie"
\froman | carattere Roman, Times o comunque font con "grazie"
\fmodern | carattere a spaziatura fissa tipo Courier o Pica
\fdecor | caratteri "decorativi" come l'Old English
\fnil | font di default
charset | è il set dei caratteri da usare, questo parametro di solito è 0
prq | specifica la dimensione (pitch) del font
NomeFont | è il nome comune del font (Times, Courier, Arial...)
esempio:
    {\fonttbl
    {\f0 \froman \fcharset0 \fprq2 Times New Roman;}
    {\f1 \fswiss \fcharset0 \fprq2 Arial;}
    {\f2 \fmodern \fcharset0 \fprq2 Courier New;}
    }
notare il punto e virgola in fondo ad ogni linea. Per utilizzare uno dei font definiti in questo modo occorre usare il tag \fn prima del testo che si vuole mettere con quel font. Per esempio (riferendosi all'esempio precedente):
    {\f1 Testo in Arial} {\f0 testo in Times}
Definire la dimensione del font |  | La dimensione del font si specifica con il tag \fsn, dove 'n' è specificato in 0.5 di punto, cioè \fs24 indica un font di 12 punti tipografici.
Tag di controllo del testo |  | I tag di controllo del testo sono utilizzati per impostare le caratteristiche del paragrafo o per specificare l'aspetto che tale paragrafo deve avere (giustificazione, spazi...)
\par | interrompe il paragrafo corrente
\pard | interrompe il paragrafo ed annulla ogni altro Tag attivo sul testo (resetta sui default)
\page | effettua un salto pagina
\line | spezza una linea senza spezzare il paragrafo
\ql | attiva l'allineamento del testo a sinistra
\qr | attiva l'allineamento del testo a destra
\qj | attiva la giustificazione del testo (allineato a destra ed a sinistra)
\qc | attiva la centratura del testo
Formattazione del testo |  | In alcuni di questi tag occorre specificare una dimensione (distanza), tale dimensione deve essere indicata in twips cioè 1/20 di pollice=1.125 millimetri
\b | mette il testo in grassetto
\i | mette il testo in corsivo
\ul | sottolineatura del testo
\super | imposta il testo come "apice"
\plain | mette il testo in "normale"
\sbn | imposta lo spazio da lasciare prima del paragrafo
\san | imposta lo spazio da lasciare dopo il paragrafo
\fin | rientro della prima linea del paragrafo
\lin | rientro a sinistra del paragrafo rispetto al margine della pagina
\rin | rientro a destra del paragrafo rispetto al margine della pagina
Definizione della pagina |  | In alcuni di questi tag occorre specificare una dimensione (distanza), tale dimensione deve essere indicata in twips cioè 1/20 di pollice=1.125 millimetri
\paperwn | indica la larghezza della pagina
\paperhn | indica l'altezza della pagina
\margln | margine sinistro
\margrn | margine destro
\margtn | margine superiore
\margbn | margine inferiore
\facing | attiva la stampa a pagine "affiancate"
\guttern | indica il margine di "incollatura" con pagine affiancate
\landscape | attiva la stampa in landscape
\portrait | attiva la stampa in portrait
\pgnstartn | indica il numero di pagina da cui iniziare la numerazione
\pgnxn | il numero di pagina si trova ad n twips dal margine destro del foglio (il default è 720)
\pgnyn | il numero di pagina si trova ad n twips dal margine superiore del foglio (il default è 720)
\header | specifica l'header di pagina da stampare su ogni pagina
\footer | specifica il footer di pagina da stampare su ogni pagina
Tag speciali |  |
\chdate | inserisce la data corrente
\chtime | inserisce l'ora corrente
\tab | inserisce un carattere di tabulazione
\bullet | inserisce un "pallino" per indicare una lista
Testatine e piedini |  | In RTF possono essere specifciati testatine e piedini per tutte le pagine, diversi per le pagine pari e dispari e così via. Ogni sezione di documento può avere le sue testate e piedini, se per una sezione non sono specificati, verranno usati quelli della sezione precedente (se ci sono).
\headeryn | l'intestazione si trova ad n twips dal margine superiore della pagina
\header | riportare la testata su tutte le pagine
\headerl | testata per pagine siniste (left)
\headerr | testata per pagine destre (right)
\headerf | testata solo sulla prima pagina
\footeryn | il piedino si trova a n twips dal margine superiore della pagina
\footer | riportare il piedino su tutte le pagine
\footerl | piedino per pagine siniste (left)
\footerr | piedino per pagine destre (right)
\footerf | piedino solo sulla prima pagina
Tabulatori |  | Ogni paragrafo può avere il suo set di tabulatori diverso. I tabulatori si definiscono mediante una serie di tag
\txN | Specifica un tabulatore a 'n' twips dal margine sinistro
\tqr | imposta una tabulazione a destra
\tqc | imposta una tabulazione centrata
\tqdec | imposta una tabulazione decimale
Per specificare le tabulazioni si mettono 'n' \tx in fila:
    \tx100 \tx140 \tx270 \tx300 \tx315...
Per utilizzare i tabulatori basta mettere \tab tra un valore e l'altro per eseguire la tabulazione:
    \tab Primo valore \tab Secondo valore \tab Terzo valore ...
Il primo \tab serve a spostare il testo in corrispondenza del primo tabulatore.
Tabelle |  | Le tabelle in RTF sono particolarmente rognose, per definire una tabella si utilizzano un sacco di tag specifici. Consideriamo poi che una tabella in RTF viene definita come 'attributi di paragrafò, quindi non rappresenta un'entità a sè stante ma è un paragrafo. Occorre anche notare che certi programmi che sono in grado di leggere l'RTF (Word per esempio), se incontrano una tabella definita in modo erroneo si bloccano segnalando errori nel programma, questo è probabilmente dovuto al modo di gestione interna delle tabelle del programma, quindi fare molta attenzione con la definizione delle tabelle. La tabella deve essere definita utilizzando i tag di definizione della tabella. Una riga di tabella è una sequenza di paragrafi, suddivisi in celle, la riga inizia con \trowd e termina con \row. Ogni paragrafo che è inserito in una riga di tabella deve contenere il tag \intbl la singola cella è terminata dal tag \cell, Tag di definizione della tabella:
\trgaphn | definisce lo spazio tra le singole celle in twips
\cellxn | definisce il margine destro di una singola cella, compreso lo spazio tra le singole celle in twips
\trrhn | definisce l'altezza di una riga di tabella, in twips
\trleftn | definisce la posizione del bordo sinistro della tabella rispetto a quello della colonna
\trql | allineamento della riga a sinistra rispetto al margine/colonna
\trqr | allineamento della riga a destra rispetto al margine/colonna
\trqc | centra la riga rispetto al margine/colonna
\trbrdt | imposta il bordo lungo il margine superiore della riga
\trbrdb | imposta il bordo lungo il margine inferiore della riga
\trbrdl | imposta il bordo lungo il margine sinistro della riga
\trbrdr | imposta il bordo lungo il margine destro della riga
\clbrdt | imposta il bordo lungo il margine superiore della cella
\clbrdb | imposta il bordo lungo il margine inferiore della cella
\clbrdl | imposta il bordo lungo il margine sinistro della cella
\clbrdr | imposta il bordo lungo il margine destro della cella
Questo è un esempio di tabella scritta in RTF
    \trowd \trgaph70\trleft-70\trbrdrt\brdrs\brdrw10
    \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10
    \trbrdrr\brdrs\brdrw10
    \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10
    \clvertalt\clbrdrt\brdrs\brdrw10
    \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10
    \clbrdrr
    \brdrs\brdrw10 \cltxlrtb \cellx3300\clvertalt\clbrdrt\brdrs\brdrw10
    \clbrdrl\brdrs\brdrw10
    \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
    \cltxlrtb
    \cellx6670\clvertalt\clbrdrt\brdrs\brdrw10
    \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10
    \clbrdrr
    \brdrs\brdrw10 \cltxlrtb \cellx10040\pard
    \qj\ri500\nowidctlpar\intbl\adjustright
    {\fs24\cgrid0 \cell \cell \cell }\pard \widctlpar\intbl\adjustright
    {\fs24\cgrid0 \row }\trowd
    \trgaph70\trleft-70\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10
    \trbrdrb
    \brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10
    \trbrdrv\brdrs\brdrw10
    \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10
    \clbrdrb\brdrs\brdrw10
    \clbrdrr\brdrs\brdrw10 \cltxlrtb
    \cellx3300\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl
    \brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10
    \cltxlrtb
    \cellx6670\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10
    \clbrdrb\brdrs\brdrw10
    \clbrdrr\brdrs\brdrw10 \cltxlrtb \cellx10040\pard
Ulteriori informazioni e riferimenti |  | I tag non sono tutti quì ovviamente, ce ne sono molti di più, solo che non ho sufficiente spazio per riportarli tutti. Il modo migliore per scoprire un tag rtf è quello di leggere la documentazione che è reperibile sul sito della Microsoft, oppure di scrivere un documento che abbia le caratteristiche che stiamo cercando in Word, salvarlo come RTF e poi andare a 'spulciarè il documento generato in cerca del tag. Il problema è che Word genera dell'RTF che non è per niente leggibile.
Esempio di documento RTF |  | Fare click qui per vedere un esempio di documento RTF. Fare click qui per vedere lo stesso documento nel vostro viewer predefinito.
Problemi ricorrenti |  | Vorrei fare questo e quello in RTF ma non trovo i TAG Il sistema più semplice per risolvere il problema è: usare Word per generare l'RTF contenente il testo con le caratteristiche che si vogliono, poi aprire il file con un editor ASCII ed andare "a caccia" del TAG da utilizzare. Ho fatto l'RTF ma con Word mi appare in un modo mentre con WordPad in un altro WordPad e Word utilizzano due RTF di versione diversa, questo significa che tag perfettamente validi non vengono riconosciuti in WordPad e pertanto non vengono interpretati. Purtroppo questo è valido anche per molti altri RTF Viewer, a seconda della versione di RTF che viene supportato vengono visualizzati/interpretati diversi tag. Ho fatto l'RTF, cerco di aprirlo con Word e si inchioda tutto! Evidentemente è stata inserita una tabella errata, Word gestisce le tabelle in modo molto sofisticato, ma anche molto "delicato", se la tabella presenta un errore nella definizione, genera un errore a run time di Word.

L'Autore | Davide Bianchi, lavora come Lead Programmer/System Administrator per una nota organizzazione internazionale con sede principale ad Amsterdam.
Commenti | Come avete trovato questo documento? Utile? Noioso? Interessante? Difficile? Mandatemi un commento.
Contribuire | Volete contribuire? Leggete come!

Copyright | Il presente sito e' frutto del sudore della mia fronte (e delle mie dita), se siete interessati a ripubblicare uno degli articoli, documenti o qualunque altra cosa presente in questo sito per cortesia datemene comunicazione, cosi' il giorno che faccio delle aggiunte potro' avvisarvi e magari mandarvi il testo aggiornato.

Questo sito e' composto interamente con VIM

Questo sito non e' ottimizzato per la visione con nessun browser particolare, ne' per nessuna risoluzione particolare ne' impone l'uso di font particolari. Siate liberi di vederlo come vi pare e piace.

Ultimo aggiornamento: 21 Dicembre 2000