Bonjour, nous cherchons comment faire pour soit:
-Créer des cadres ne contenant chacun qu’une seule image et ainsi quand nous collons par exemple 40 images, les images se répartissent dans les cadres (qui sont bien sûr alignés).
soit:
-Aligner une colonne d’images
soit;
-Un programme qui réduit les images à la bonne taille, ouvre autant de page qu’il le faut (à raison de neuf images par page) et les place sur ces pages en les alignant.
Des images de 8.8cm de hauteur et 6.3cm de largeur.
Le programme était une bonne idée,merci, mais nous tombons toujours sur erreur de lecture, et cela n’insère des images qu’une par une.
C’est bon, c’est juste nous qui avions copié le mauvais chemin d’accès, désolé.
Les images sont dans un dossier.
Donc en soit, il suffirait de donner le chemin d’accès au dossier, d’en récupérer les images et les placer en ajoutant dans les paramètres de position l’espace voulu entre elles. Le problème étant que nous ne savons pas comment régler les paramètres de positions, la plupart des programmes utilisent la position du curseur.
Un programme un peu comme ça (mais qui fonctionnerait avec les commandes Basic des macros).
REM ***** BASIC *****
Sub insert_image_in_current_position()
a=0
b=0
path_dossier = "/home/..."
doc = ThisComponent
For Each image.webp in dossier
image = doc.createInstance("com.sun.star.text.GraphicObject")
image.GraphicURL = ConvertToURL(path_image) #faut_il garder cela?#
image.AnchorType = com.sun.star.text.TextContentAnchorType.AS_CHARACTER
pos(X)=a
pos(Y)=b
pos = (doc.pos(X);doc.pos(Y))
image.Width = 6300
image.Height = 8800
pos(Y)+8800+2500=b
Next
pos.Text.insertTextContent(pos, image, False) #il n'y a pas de texte, que des images#
End Sub
pour élargir les perspectives de solution, puisque le sujet est aussi taggé “draw”,
on peut remplacer le principe .AnchorType par un positionnement direct :
pourquoi ?
on prend tout ce qui il y a dans le répertoire?
quitte à programmer, autant généraliser un peu, donc avec Draw, ça donne :
Const nCols = 3
Const nRows = 3
Const nPerPage = nCols*nRows
Const Height = 8800
Const Width = 6300
' ________________________
Sub pickFolder
oFolderPicker = CreateUnoService( "com.sun.star.ui.dialogs.FolderPicker" )
oFolderPicker.setTitle("Pick directory with images (Ask 122435)")
' oFolderPicker.setDisplayDirectory( "/tmp/" )
If oFolderPicker.execute() = 1 Then insertImagesFromFolder(oFolderPicker.getDirectory())
End sub
Sub insertImagesFromFolder(sFolder as String)
x = Array(1000,7500,14000)
y = Array(1000,10400,19800)
Globalscope.BasicLibraries.LoadLibrary("Tools")
aList = ReadDirectories(sFolder, True, False, False)
For i = LBound(aList) To UBound(aList)
InsertImage(int(i/nPerPage), x(i mod nCols), y(int(i/nCols) mod nRows), aList(i,0))
next i
End sub
Sub InsertImage(p as Integer, x as Integer, y as Integer, sURL as String)
oGraph = thisComponent.createInstance("com.sun.star.drawing.GraphicObjectShape")
oGraph.Graphic = getgraphfromurlaslink(sURL)
oGraph.GraphicURL = sURL
If p >= thisComponent.DrawPages.count then
thisComponent.DrawPages.insertNewByIndex(p)
End if
thisComponent.DrawPages(p).add(oGraph)
oSize = oGraph.Size
oSize.Height = Height
oSize.Width = Width
oGraph.setsize(oSize)
oPos = oGraph.position
oPos.x = x
oPos.y = y
oGraph.position = oPos
End sub
function getGraphFromUrlAsLink(sFileUrl as String ) as Object
oProvider = createUnoService("com.sun.star.graphic.GraphicProvider")
Dim oPropsIN(1)as new com.sun.star.beans.PropertyValue
oPropsIN(0).Name = "URL"
oPropsIN(0).Value = converttoURL(sFileUrl)
oPropsIN(1).Name = "LoadAsLink"
oPropsIN(1).Value = TRUE
getGraphFromUrlAsLink = oProvider.queryGraphic(oPropsIN())
end function
en utilisant com.sun.star.graphic.GraphicProvider, on peut ajouter des références génériques aux images externes comme 1.png, 2.png, …
relatives au fichier .odt.
Merci de toute votre aide, à travers les pages vers lequelles vous nous renvoyez.
Mais bien que celles-ci peuvent être très intéressantes, et vos conseils aussi, nous nous voyons dans l’incapacité d’en utiliser les ressources car nous ne savons pas coder en basic…
En revanche nous pouvons vous dire très précisement comment nous pensons le protocole du programme qui permettrait de résoudre notre problème.
-Demander le nombre d’images
-Ouvrir autant de pages sans marges que le nombre d’image divisé par 9 (arrondis à l’entier supérieur)
-Ouvrir les images qui sont toutes dans un dossier
-Les ancrer au caractère avec dans les paramètres de position Horizontal: De gauche ; Vertical: Du haut
-Les réduire à 8.8cm de hauteur et 6.3cm de largeur
-Assigner une page à chaque groupe de neuf images
-Pour chaque groupe:
-mettre la première image en position (1.00;1.00)
-mettre la deuxième image en position (1.00;10.40)
-mettre la troisième image en position (1.00;19.80)
-mettre la quatrième image en position (7.50;1.00)
-mettre la cinquième image en position (7.50;10.40)
-mettre la sixième image en position (7.50;19.80)
-mettre la septième image en position (14.00;1.00)
-mettre la huitième image en position (14.00;10.40)
-mettre la neuvième image en position (14.00;19.80)
Fin
Nous pensons que les deux dernières instructions peuvent être inversées ou groupées et la quatrième instruction peut être optionnelle si ce sont les paramètres par défaut.