[Fwd: Re: [fr-users] macro : bitmap d'une section]

Bonjour,

c'était une erreur de recopie (pour simplifier la macro utilisée, qui
contient d'autres paramètres).

Le code est le suivant (ch contient l'image, et est dans le même
répertoire que le document) :

function section3(dc,cs)

        Dim sec as object
        Dim ch as string

         ch="lignecahier.jpg"
         sec=dc.createInstance("com.sun.star.text.TextSection")
         sec.backgraphicURL=ConvertToURL(ch)

End function

Pour l'instant, l'image en question n'apparait pas en fond pour la
section.

Cordialement,
O.J.

Bonjour oj,

tu y étais presque... Il manquait l'insertion de la section créée dans le texte :wink:

Code testé fonctionnel (remplacer l'adresse de l'image par qqch d'utile) :

8< ----------------------------------------------------------

Option Explicit

Sub Main

  Dim lo_Doc As Object
  Dim lo_Sec As Object
  Dim lo_TCur As Object

  lo_Doc = ThisComponent
  lo_TCur = lo_Doc.Text.createTextCursor
  lo_TCur.gotoEnd(False)

  lo_Sec = CreateSectionAtCursor(ThisComponent, lo_TCur, "MaSection", "/home/jean-francois/Images/Debian.png")
  
End Sub 'Main

Function CreateSectionAtCursor(ByRef pDoc As Object, pCursor As Object, pSecName As String, pBGName As String) As Object
'creates a section within a given document.
'Input:
'-- pDoc: the target document.
'-- pCursor: the text cursor where to insert the section.
'-- pSecName: the section name.
'-- pBGName: the section background image file name (in URL or OS form).
'Output: the created section object or Null if an error occurred.

  Dim lo_Sec As Object
  
  On Local Error Goto ErrHandler
  
  lo_Sec = pDoc.createInstance("com.sun.star.text.TextSection")
  lo_Sec.Name = pSecName
  lo_Sec.backgraphicURL = ConvertToURL(pBGName)
  pDoc.Text.insertTextContent(pCursor, lo_Sec, False)
  
  ErrHandler:
    'do nothing

  CreateSectionAtCursor = lo_Sec
End Function 'CreateSectionAtCursor

---------------------------------------------------------- >8

Si vous répondez, merci de penser à utiliser la fonction "répondre à tous" de votre logiciel de courrier électronique de façon que la liste reçoive une copie de votre réponse.

Bien cordialement,
Si vous répondez, merci de penser à utiliser la fonction "répondre à tous" de votre logiciel de courrier électronique de façon que la liste reçoive une copie de votre réponse.

Bien cordialement,

Bonjour, Jean-François,
Une fois encore, merci !
Même si j'avais bien fait l'insertion, tu m'as quand même mis sur la
voie.
Pour ceux qui sont intéressés, sous libreoffice 7.0-Debian 10 :
-> les types png, bmp et jpg sont acceptés sans pb.
-> en revanche, il n'y a pas récupération automatique du chemin courant
du doc courant, donc, pour l'image, il faut indiquer le chemin complet
(c'est ce qui m'a mis sur la voie, dans le code de Jean-François).
-> l'ordre des opérations a évidemment de l'importance (cf code de
Jean-François).
Cordialement,
O.J.

Pour ceux qui sont intéressés, sous libreoffice 7.0-Debian 10 :
-> les types png, bmp et jpg sont acceptés sans pb.
-> en revanche, il n'y a pas récupération automatique du chemin courant
du doc courant, donc, pour l'image, il faut indiquer le chemin complet
(c'est ce qui m'a mis sur la voie, dans le code de Jean-François).

Bonjour,

Il vaut mieux (ou bien il faut absolument ?), dans tous les cas, préciser le chemin complet, puisqu’un document n'est connu (au niveau de LibO) que par son URL.

Cordialement,

Bonjour,
En fait, j'ai besoin de tout ça pour mettre des commandes au point pour
mon extension DocAlea (n'essayez pas de télécharger la version actuelle
: elle est trop buggée).
Par exemple, j'ai fait une commande "/i{nom du document à insérer}" qui
permet d'insérer un doc dans un autre. Et là, il est plus pratique pour
l'utilisateur que le dit doc soit dans le même répertoire que le doc
maitre, et qu'il n'ai pas à le préciser dans la commande.
De même, j'avais besoin de cet outil section parce que je voulais créer
une commande "/sec{nb de ligne; nom du doc de fond}" pour pouvoir
inséer des espaces d'écriture automatiquement dans un doc maitre.
En tout cas, merci à cette liste, pour ses aides rapides et
systématques, même dans les macros, qui sont pourtant un domaine plus
difficile à appréhender, je pense. Et un merci spécial à Jean-François,
qui prend toujours le temps de répondre, et toujours de façon
pertinente.
Cordialement,
O.J.

Bonjour,

Il vaut mieux (ou bien il faut absolument ?), dans tous les cas, préciser le chemin complet, puisqu’un document n'est connu (au niveau de LibO) que par son URL.

N'y a-t-il pas la possibilité de récupérer l'URL du document et donc du dossier contenant le document et ainsi de construire le chemin complet d'une image en l'accolant au chemin du document ?
Cela permettrait de pouvoir transmettre le document (et son dossier) à quelqu'un d'autre et ne pas avoir le chemin absolu qui dépend de ton installation.

Cordialement,
Patrick

Si, bien sûr (c'est ce que je fais pour l'instruction /i). Mais ici,
pour un fond de section, je ne suis pas sûr que ce soit judicieux.
Cordialement,
O.J.

Bien sûr,

On récupère l'url du document en cours avec ThisComponent.url. On obtient un truc du genre :

URLfichier = ThisComponent.url

On obtient un truc du genre :

file:///I:/TrvOpen/Projets/D%C3%A9pannages/JP/Document.odt (au format url, quel que soit le système)

le dossier uniquement avec :

URLdossier = Tools.Strings.DirectoryNameoutofPath(ThisComponent.url, "/")

La bibliothèque Tools fait partie des macros de LibreOffice.

Bonne soirée