[Résolu][Writer]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 !
jpwitz
Membre lOOyal
Membre lOOyal
Messages : 32
Inscription : 21 déc. 2014 07:52

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

Message par jpwitz »

Bonjour
J'utilise une macro (proposée par Hubert Lambert -https://forum.openoffice.org/fr/forum/v ... 29#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

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 modification par jpwitz le 18 oct. 2019 09:49, modifié 1 fois.
Open Office Version: 4.1.6
Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25173
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

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

Message par Dude »

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.
jpwitz
Membre lOOyal
Membre lOOyal
Messages : 32
Inscription : 21 déc. 2014 07:52

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

Message par jpwitz »

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
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25173
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

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

Message par Dude »

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.
jpwitz
Membre lOOyal
Membre lOOyal
Messages : 32
Inscription : 21 déc. 2014 07:52

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

Message par jpwitz »

Je n'ai toujours pas trouvé.
Je dois être nul :marto:
Toujours pas d'âme charitable?
Open Office Version: 4.1.6
Windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25173
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

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

Message par Dude »

Cette routine insère à l'endroit du curseur un saut de page puis se positionne dessus.

Code : Tout sélectionner

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.
jpwitz
Membre lOOyal
Membre lOOyal
Messages : 32
Inscription : 21 déc. 2014 07:52

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

Message par jpwitz »

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

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
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25173
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

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

Message par Dude »

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
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9251
Inscription : 28 août 2010 08:45

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

Message par micmac »

Dernière visite de l'intéressé(e) le : 23 Oct 2019 19:48
N'ayant plus de nouvelles, on peut en déduire que le problème est résolu ou ne se reproduit plus.

Merci de baliser par vous-même la prochaine fois.
Un remerciement fait aussi plaisir aux bénévoles qui vous ont consacré de leur temps..
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac