Lista font installati in OpenOffice

Qualche tempo fa avevo scritto una macro per inserire in un documento di OpenOffice Writer l’elenco dei font installati sul computer. Nella pagina veniva inserito il nome del carattere, in Times New Roman e in piccolo, e poi una fase di prova impaginata in grande con il font in questione. Il problema che che troppi cambi di carattere e dimensione erano laboriosi. Il software rimaneva bloccato per un po’di tempo mentre eseguiva il lavoro, e anche alla fine, scorrendo tra una pagina e l’altra, risultava rallentato, come avviene anche quando si sovraccarica un documento con troppe immagini.

Ora ne ho messo a punto una versione più semplice, che stampa soltanto il nome del carattere, sempre nella stessa dimensione, usando il carattere medesimo.

L’idea iniziale era quella di produrre un elenco come quello che compare cliccando sul menù a tendina per la scelta del carattere. In poche righe però è impossibile ottenere lo stesso risultato. In quel menù infatti compare soltanto il nome della famiglia, nella versione regular, se presente. In realtà ogni famiglia è composta di vari stili: ad esempio il Times New Roman si compone di quattro files, Regular, Italic, Bold e Bold Italic. Elencando tutti i font installati il carattere comparirebbe quattro volte, nelle sue varie versioni.

Si potrebbe scegliere di comporre la lista solo con il font nella versione di base, ma anche questo non è così semplice. In teoria basta vincolare la stampa allo StyleName mediante un If. Peccato che non esiste una regola di base per dare il nome allo stile. Sul mio computer i font di sistema hanno le denominazioni in italiano, mentre quelli scaricati ce l’hanno in inglese. Quindi per alcuni lo stile si chiama “Normale”, per altri si chiama “Regular”. E lo stesso vale anche per gli altri stili: Corsivo/Italic, Grassetto/Bold, eccetera.

Nel menù di OpenOffice compaiono anche quei font di cui abbiamo installato solo la versione Light o Black.

Inoltre ci sono altri font che hanno degli stili con denominazioni fuori norma: ad esempio Book oppure Roman.

Alcuni al posto dell’italico hanno la versione Oblique.

Insomma, per ottenere nel documento una lista identica a quella che compare nel menù bisognerebbe infarcire il codice con parecchie condizioni, a quanto sembra.

Riducendo il tutto all’osso, il risultato è quello che trascrivo qui sotto. Basta copiarlo e incollarlo tra le macro basic di OpenOffice (Strumenti, Macro, Organizza Macro, OpenOffice Basic, Modifica, in coda al documento) e poi eseguirlo in una pagina vuota (Strumenti, Macro, Esegui Macro, e trovare il nome TuttiFont). Il risultato è una stampa in ordine sparso di tutti i font nella versione Regular o Normale. Per avere l’ordine alfabetico bisognerebbe aggiungerci altre righe di codice.

Sub TuttiFont


dim doc

dim finestra

dim cursore

dim fonts

dim i

dim n

dim frase


doc=thisComponent

finestra=doc.getCurrentController().getFrame().getContainerWindow()

fonts()=finestra.getFontDescriptors()

cursore=doc.text.createTextCursor()

n=Ubound(Fonts())

i=1


while i<n

if (fonts(i).StyleName="Regular") or (fonts(i).StyleName="Normale") then

cursore.charFontName=fonts(i).name

frase=fonts(i).name

doc.text.insertString(cursore, frase, False)

doc.text.insertControlCharacter(cursore, com.sun.star.text.ControlCharacter.LINE_BREAK, False)

endif

i=i+1


wend

End Sub


L’esecuzione del programma è pressoché immediata e non crea particolari problemi.

Rimuovendo la riga che dice cursore.charFontName=fonts(i).name (o anche aggiungendo all’inizio la parola REM, che fa sì che non venga eseguita anche se non è cancellata) tutti i nomi vengono scritti nello stesso carattere (ma non c’è gusto).

Ripeto, la lista che viene fuori non è quella di tutti i font installati nel computer, ma solo di quelli che hanno una versione che è stata chiamata dagli autori “Regular” o “Normale” (ossia quelle specificate nell’if).

Qualunque risultato più accurato è possibile, solo che richiede più righe di programmazione e più impegno per smistare i font che vengono restituiti dalla funzione getFontDescriptors(). Sempre che non esista qualche scorciatoia che io non conosco.

Visto che il software sceglie in automatico l’interlinea sulla base delle caratteristiche di ciascun font, la lista appare spaziata in maniera non omogenea (alcuni font, come il Papyrus, prendono più spazio in verticale rispetto ad altri). Per risolvere il problema basta selezionare tutto, cliccarci col pulsante destro del mouse, proprietà Paragrafo, scheda Paragrafo, e impostare l’Interlinea a Fissa. In alcuni casi le lettere di una riga possono andare a interferire con quelli delle righe circostanti, ma nel complesso l’aspetto del testo è molto più regolare.

Commenti

Post più popolari