#1 Le 13/04/2023, à 18:28
- Philetjosie
LibreOffice: script pour lister toutes les polices installées
Bonjour, je souhaite faire un script qui crée un document avec toutes les polices de caractère installées sur mon système, avec une phrase d'exemple et le nom de la police.
C'est super utile. J'ai lu pas mal de documents, et j'ai trouvé des exemples de scripts dans le document suivant: https://www.pitonyak.org/AndrewFontMacro.odt
A noter que ce sont des scripts pour OpenOffice, mais je n'ai pas trouvé de document expliquant la différence entre les sripts dans Libreoffice par rapport à OpenOffice.
Cependant, quand j'exécute la macro qu'il propose, j'ai une erreur en ligne 13, à la ligne «oDoc.lockControllers()», avec un message me disant «erreur d'exécution, l'argument n'est pas facultatif».
Je ne comprends pas pourquoi. Est-ce que vous seriez plus calé que moi en scripts LibreOffice ?
Mais sinon, peut-être que vous avez des idées pour faire la même chose plus simplement ?
Voilà la macro:
Sub FontSummary(oDoc)
Dim oFonts() 'Array of awt FontDescriptor structures.
Dim sFontName$ 'Name of one font.
Dim sLastFont$ 'Last used font.
Dim oText 'Document's primary text object.
Dim oCurs 'Text cursor used to insert the text.
Dim nSaveHeight 'Initial character height.
Dim sSaveFont$ 'Initial font in effect.
Dim i% 'General index variable.
Dim s$ 'Contains the sample text that is displayed using the font.
s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
oDoc.lockControllers()
On Error Goto EndLabel
oText = oDoc.getText()
oCurs = oText.createTextCursorByRange(oText.getEnd())
sSaveFont= oCurs.charFontName
oFonts() = SortedFontDescriptors(oDoc, False)
oText.insertControlCharacter(oCurs, _
com.sun.star.text.ControlCharacter.LINE_BREAK, False)
nSaveHeight = oCurs.CharHeight
oCurs.CharHeight = 10
REM for each font descriptor.
For i = LBound(oFonts()) to UBound(oFonts())
sFontName = oFonts(i).Name
If sFontName <> sLastFont Then
sLastFont = sFontName
oText.insertString(oCurs, sFontName & ": ", FALSE)
oCurs.charFontName = sFontName
oText.insertString(oCurs, s, FALSE)
oCurs.charFontName = sSaveFont
oText.insertControlCharacter(oCurs, _
com.sun.star.text.ControlCharacter.LINE_BREAK, False)
oText.insertControlCharacter(oCurs, _
com.sun.star.text.ControlCharacter.LINE_BREAK, False)
End If
Next
oCurs.CharHeight = nSaveHeight
EndLabel:
oDoc.unlockControllers()
End Sub
Modération : utilise les balises code !!
Dernière modification par Ayral (Le 13/04/2023, à 23:10)
Hors ligne
#2 Le 13/04/2023, à 23:06
- Vobul
Re : LibreOffice: script pour lister toutes les polices installées
Bonjour,
Il semble que le problème se situe au niveau de la méthode lockControllers() qui est utilisée sans argument. En effet, cette méthode nécessite un argument qui correspond à un objet de type com.sun.star.beans.PropertyValue.
Vous pouvez essayer de remplacer la ligne
oDoc.lockControllers()
par la ligne suivante :
oDoc.lockControllers(Array(com.sun.star.beans.PropertyValue()))
Cela devrait résoudre le problème que vous avez rencontré.
Quant à votre question concernant les différences entre les scripts LibreOffice et OpenOffice, il est vrai que les deux suites bureautiques sont très similaires en termes de fonctionnalités et de compatibilité. Cependant, il peut y avoir des différences mineures dans la façon dont les macros sont écrites, en particulier si vous utilisez des fonctionnalités spécifiques à l'une ou l'autre des suites. Dans le cas présent, le script que vous avez trouvé semble être compatible avec les deux suites bureautiques, mais cela peut ne pas être le cas pour tous les scripts.
Enfin, pour créer un document avec toutes les polices de caractère installées sur votre système, vous pouvez également utiliser une boucle sur la collection com.sun.star.awt.FontDescriptor et utiliser la méthode createInstance() pour créer un objet com.sun.star.text.Paragraph pour chaque police de caractère. Voici un exemple de code qui peut vous aider :
Sub ListFonts(oDoc)
Dim oParEnum As Object
Dim oPar As Object
Dim oFonts As Object
Dim sFontName As String
Dim sText As String
sText = "The quick brown fox jumps over the lazy dog."
oFonts = CreateUnoService("com.sun.star.awt.FontDescriptors")
oParEnum = oDoc.Text.createEnumeration()
Do While oFonts.hasMoreElements()
sFontName = oFonts.nextElement().Name
oPar = oDoc.Text.createTextCursor()
oPar.gotoEnd(False)
oPar.CharFontName = sFontName
oPar.ParaStyleName = "Standard"
oPar.String = sText
oPar.CharFontName = "Liberation Serif"
oPar.String = Chr(13)
oPar.String = Chr(10)
Loop
End Sub
J'espère que cela vous aidera dans votre projet. N'hésitez pas à revenir vers moi si vous avez d'autres questions.
Au passage, je conseille plutôt d'utiliser des pangrammes :
"The quick brown fox jumps over the lazy dog"
"Portez ce vieux whisky au juge blond qui fume" (37 lettres)
"Voyez le brick géant que j'examine près du wharf" (41 lettres)
"Sympathique jury, vous pouvez donner un verdit : C'est l'excès de whisky" (59 lettres)
"Buvez de ce whisky que le patron juge fameux" (44 lettres)
Vobul
Utilisez le retour utilisable de commandes !!!
J'aime la langue française, mais je parle franglais, deal with it.
RTFM
Hors ligne
#3 Le 14/04/2023, à 11:23
- Philetjosie
Re : LibreOffice: script pour lister toutes les polices installées
Merci bien pour votre réponse. Je vais essayer d'implémenter ça dès que j'ai un moment.
Bonne journée.
Hors ligne