[Writer]Comment insérer un cadre dans une page donnée

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur: Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !

[Writer]Comment insérer un cadre dans une page donnée

Messagepar jpwitz » 16 Oct 2019 10:11

Bonjour
J'utilise une macro (proposée par Hubert Lambert -https://forum.openoffice.org/fr/forum/viewtopic.php?f=8&t=61129#p331667-merci à lui) pour intégrer des cadres dans un document.
Mais une fois la page pleine, les cadres suivants se repositionnent sur la même page.
Comment, dans la macro, ajouter une page et positionner le cadre sur cette nouvelle page.
Merci pour votre aide

Code : Tout sélectionner   AgrandirRéduire
sub creerUnNouveauCadre2(posX, posY, name)
        doc = thiscomponent
        T = doc.Text
        csst = com.sun.star.text
        cadre = doc.createInstance("com.sun.star.text.TextFrame")
        cadre.AnchorType = csst.TextContentAnchorType.AT_PAGE      'AT_PARAGRAPH  ' const 0
        cadre.Width = 3500
        cadre.Height = 800
        cadre.HoriOrient = csst.HoriOrientation.NONE  ' const 0
        cadre.HoriOrientPosition = posX
        cadre.VertOrient = csst.VertOrientation.NONE  ' const 0
        cadre.VertOrientPosition = posY
        cadre.Name = name
        doc.Text.insertTextContent(T.Start, cadre, False)
'      xray doc.Text
end sub
Dernière édition par jpwitz le 18 Oct 2019 10:49, édité 1 fois.
Open Office Version: 4.1.6
Windows 10
jpwitz
Membre lOOyal
Membre lOOyal
 
Message(s) : 32
Inscrit le : 21 Déc 2014 08:52

Re: [Writer]Comment insérer un cadre dans une page donnée

Messagepar Dude » 16 Oct 2019 14:06

Salut,

jpwitz a écrit:J'utilise une macro (trouvée sur ce forum-merci aux créateurs)

Il est d'usage de citer l'auteur en donnant le lien vers la macro d'origine.

jpwitz a écrit:ajouter une page et positionner le cadre sur cette nouvelle page

L'insertion de page se fait avec la constante com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK.
Le positionnement passe par la création d'un curseur via la méthode createTextCursor.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 21131
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Writer]Comment insérer un cadre dans une page donnée

Messagepar jpwitz » 17 Oct 2019 08:36

Comment utiliser cette constante et la méthode?
Un petit bout de code pour mettre en oeuvre.
Merci beaucoup
Open Office Version: 4.1.6
Windows 10
jpwitz
Membre lOOyal
Membre lOOyal
 
Message(s) : 32
Inscrit le : 21 Déc 2014 08:52

Re: [Writer]Comment insérer un cadre dans une page donnée

Messagepar Dude » 17 Oct 2019 14:40

jpwitz a écrit:Comment utiliser cette constante et la méthode?

Je pense qu'en faisant un peu de recherche par toi-même, tu trouveras ton bonheur. :)

Et pense à corriger ton erreur :
Dude a écrit:Il est d'usage de citer l'auteur en donnant le lien vers la macro d'origine.

Question de respect envers la Communauté du libre.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 21131
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Writer]Comment insérer un cadre dans une page donnée

Messagepar jpwitz » 20 Oct 2019 14:24

Je n'ai toujours pas trouvé.
Je dois être nul :marto:
Toujours pas d'âme charitable?
Open Office Version: 4.1.6
Windows 10
jpwitz
Membre lOOyal
Membre lOOyal
 
Message(s) : 32
Inscrit le : 21 Déc 2014 08:52

Re: [Writer]Comment insérer un cadre dans une page donnée

Messagepar Dude » 20 Oct 2019 16:43

Cette routine insère à l'endroit du curseur un saut de page puis se positionne dessus.
Code : Tout sélectionner   AgrandirRéduire
Sub InsertSautPage
   oCurs = ThisComponent.getCurrentController().getViewCursor()
   oDest = oCurs.getText()
   oDest.insertControlCharacter( oCurs, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False )
   oCurs.BreakType = com.sun.star.style.BreakType.PAGE_BEFORE
End Sub

Comme nous sommes hors contexte(*), je te laisse le soin d'adapter.


(*) Fournir le contexte signifie joindre un document explicatif et exhaustif permettant de comprendre la problématique.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 21131
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1

Re: [Writer]Comment insérer un cadre dans une page donnée

Messagepar jpwitz » 21 Oct 2019 09:04

Merci pour ce code.
Permettez-moi d'exposer plus clairement mon projet pour créer un trombinoscope:
Au départ, j'ai
1) un dossier photos contenant les photos (type photos d'identités)(ex: Pierre Dupont.jpg , Jacques Durant.jpg, etc...
2) un document writer contenant la liste des nom des fichiers (sans extension)
Pierre Dupont
Jacques Durant
etc...
Mon projet est d'intégrer les photos dans le document, chaque photo dans un cadre créé et positionné par ses coordonnées x,y. La macro 'Trombinoscope' ci-dessous fonctionne bien, si ce n'est que, une fois la page pleine, une nouvelle page est ajoutée et les coordonnées des cadres réinitialisées (x=100, y=100), mais les cadres suivants de positionnent toujours sur la première page et non sur la page nouvellement créée.
Comment rendre la nouvelle page 'active'?
Merci de votre aide.
Ci-dessous l'intégralité du code:
Code : Tout sélectionner   AgrandirRéduire
sub Trombinoscope
   Dim oDoc as Object, i as Integer, txt as String
   oDoc = thisComponent
   For i = 0 To oDoc.CurrentSelection.Count -1
      If Len(oDoc.CurrentSelection.getByIndex(i).String) > 0 Then
         txt = txt & oDoc.CurrentSelection.getByIndex(i).String & Chr(13)
      End If
   Next i
   If Len(txt) > 0 Then MsgBox txt
    Split1= Split(txt,chr$(13))
'    xray split1
   x=100:y=100
    for i=0 to UBound(Split1)-1
      if asc(Split1(i))<32 then fic = mid(Split1(i),2,len(Split1(i))) else fic = Split1(i)    
        creerUnNouveauCadre2(x,y, fic)
        insereImageDanscadreExistant (fic,"I:\Mes documents\photos\"+fic+".jpg",35, fic)
        x=x+3600
        if x>17000 then x=100:y=y+6500   'Rangée suivante
        if y>26000 then             'Ajouter une page et continuer sur la nouvelle page
           x=100:y=100
         oCurs = ThisComponent.getCurrentController().getViewCursor()
         oDest = oCurs.getText()
         oDest.insertControlCharacter( oCurs, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False )
         oCurs.BreakType = com.sun.star.style.BreakType.PAGE_AFTER
        end if
   next
end sub

sub creerUnNouveauCadre2(posX, posY, name)
        doc = thiscomponent
        T = doc.Text
        csst = com.sun.star.text
        cadre = doc.createInstance("com.sun.star.text.TextFrame")
        cadre.AnchorType = csst.TextContentAnchorType.AT_PAGE      'AT_PARAGRAPH  ' const 0
        cadre.Width = 3500
        cadre.Height = 800
        cadre.HoriOrient = csst.HoriOrientation.NONE  ' const 0
        cadre.HoriOrientPosition = posX
        cadre.VertOrient = csst.VertOrientation.NONE  ' const 0
        cadre.VertOrientPosition = posY
        cadre.Name = name
        doc.Text.insertTextContent(T.Start, cadre, False)
'      xray doc.Text
end sub

'*****************************************************************************************************
Sub insereImageDanscadreExistant(nomDuCadre as string, cheminDeLImage as string, tailleEnMm as integer, nomDeLimage as string)
    ' tailleEnCm <=> taille de l'image telle qu'elle aparaîtra dans le document
    Dim monImage as Object
    dim monTexte as object, monCadre as object
    dim curseurCadre as object
    dim graph as Object
    dim proportion as integer

       monCadre = thisComponent.getTextFrames.getByName(nomDuCadre)
       monTexte = monCadre.text
       curseurCadre = monTexte.createTextCursor

       dim Prop(0) As New com.sun.star.beans.PropertyValue
          Graph = CreateUnoService("com.sun.star.graphic.GraphicProvider")
          Prop(0).Name = "URL"
          Prop(0).Value = convertToURL(cheminDeLImage)
          monImage = thisComponent.createInstance("com.sun.star.text.GraphicObject")
       With monImage
          .Graphic = graph.queryGraphic(Prop()) 'recupere le fichier image
          .AnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTER
       end With
       monTexte.InsertTextContent(curseurCadre, monImage, False)
       proportion = monImage.Height / monImage.Width
       monImage.Width = tailleEnMm*100 ' largeur en 1/100 de mm
       monImage.Height = monImage.Width * proportion *1.3
       monTexte.insertString(curseurCadre, chr(13)+nomDeLimage, False)
end sub
Open Office Version: 4.1.6
Windows 10
jpwitz
Membre lOOyal
Membre lOOyal
 
Message(s) : 32
Inscrit le : 21 Déc 2014 08:52

Re: [Writer]Comment insérer un cadre dans une page donnée

Messagepar Dude » 21 Oct 2019 11:12

Bis repetitae :
Dude a écrit:(*) Fournir le contexte signifie joindre un document explicatif et exhaustif permettant de comprendre la problématique.


Et sans doute qu'utiliser la fonction Tableau plutôt que des cadres faciliterait l'insertion des photos.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 21131
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Loopingss, MSN [Bot] et 3 invité(s)