Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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