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.
Web Interoperability Pleadge is this a valid html document?

Ultimo aggiornamento: 21 Dicembre 2000