[Writer] Exporter sur disque les images intégrées

Vos meilleures macros et portions de code sont publiées dans cette section.
Aucun support sur une question de programmation ici !

Modérateur : Vilains modOOs

Règles du forum
Aucune question dans cette section !
Celle-ci rassemble les meilleures macros et portions de code. Vous pouvez en revanche commenter ou argumenter le code exposé. Vous pouvez même remercier l'auteur (cela fait toujours plaisir) en indiquant par exemple dans quel cadre ou contexte vous en avez eu l'utilité.
Si vous avez à poster quelque chose, faites-le depuis la section Macros et API et demandez à un modérateur de l'y déplacer.
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25142
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

[Writer] Exporter sur disque les images intégrées

Message par Dude »

La macro ci-dessous permet l'exportation sur le disque des images contenues dans un document.

Code : Tout sélectionner

Sub ListeImages
	' ****************************************************
	' Macro fournie par le forum officiel OOo / LibO
	' http://user.services.openoffice.org/fr/forum
	' Merci de garder le présent encart si vous réutilisez
	' tout ou partie de ce code
	' ****************************************************
	
	Dim sRep As string
	sRep = "c:\temp\" ' Modifier le chemin si Linux
	
	Dim oDoc As Object
	Dim oImages As Object, oImage As Object
	Dim sImageUrl as string, sImageExt as string
	Dim sImage as string
	Dim mData() as variant
	Dim oFic as Object, oExp as object
	
	oDoc = ThisComponent
	
	oImages = oDoc.GraphicObjects
	
	' Prendre la 1ere image intégrée (index à zéro)
	oImage = oImages(0)
	
	' Extraire son nom
	sImageUrl = Mid (oImage.GraphicURL, 28)
	' Quel est le type de l'image 
	sImageExt = Right (oImage.Graphic.MimeType, 3)
	' Ce qui donne le nom comlet
	sImage = sImageUrl & "." & sImageExt
	
	' Extraction du fichier dans un flux binaire
	oFic = oDoc.DocumentStorage.getByName("Pictures").getByName(sImage)
	oFlux = oFic.InputStream
	oURL = ConvertToUrl(sRep & sImage)
	kill oURL
	
	' Export dans le fichier 
	oExp = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
	ofw = oExp.openFileWrite(oURL)
	n = -1
	While n <> 0
	      n = oFlux.readBytes(mData(), 50000)
	      ofw.writeBytes(mData())
	Wend 
	ofw.flush()
	ofw.closeOutput()

End sub 
liste_images.odt
(30.56 Kio) Téléchargé 610 fois
 Ajout : Sur le conseil judicieux de Churay, il est recommandé de tester plus fortement le type MIME du fichier.
Ce dernier pouvant donner des surprises comme expliqué dans ce sujet
bm92
ManitOOu
ManitOOu
Messages : 2562
Inscription : 26 nov. 2005 14:42
Contact :

Re: [Writer] Exporter sur disque les images intégrées

Message par bm92 »

Salut,
Bel effort de codage!

Utiliser le MimeType pour en déduire l'extension n'est pas idéal; on peut retrouver l'extension du fichier d'une autre manière.
Dans le répertoire "Pictures" du fichier document, les noms complets des images (nom interne et extension) sont accessibles.

Code : Tout sélectionner

Dim pics As Object
pics = oDoc.DocumentStorage.getByName("Pictures")
xray pics.ElementNames
Tu connais déjà le nom interne sans l'extension : sImageUrl
Balayer le tableau ElementNames pour retrouver une chaîne qui commence comme sImageUrl. Cette chaîne est le nom complet, avec extension.


L'écriture du fichier image peut se faire plus simplement:

Code : Tout sélectionner

oFic = oDoc.DocumentStorage.getByName("Pictures").getByName(sImage)
oExp.writeFile(oURL, oFic)
Pas besoin de flush ni closeOutput. Un fichier existant est écrasé.
Bernard

OpenOffice.org 1.1.5 fr / Apache OpenOffice 4.1.1 / LibreOffice 5.0.5.2 (X64)
MS-Windows 7 SP1 64bits Familial
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25142
Inscription : 03 mars 2006 08:45
Localisation : 127.0.0.1
Contact :

Re: [Writer] Exporter sur disque les images intégrées

Message par Dude »

bm92 a écrit :Utiliser le MimeType pour en déduire l'extension n'est pas idéal; on peut retrouver l'extension du fichier d'une autre manière.
Effectivement mais juste un bémol. Si l'extension de l'image a été renommée (PNG en JPG par ex.), l'entête MIME restera l'information la plus sûre.
bm92
ManitOOu
ManitOOu
Messages : 2562
Inscription : 26 nov. 2005 14:42
Contact :

Re: [Writer] Exporter sur disque les images intégrées

Message par bm92 »

Alors j'ai fait l'essai : insérer une image jpeg renommée avec une extension .png.
Le document sauve l'image en mettant l'extension correspondant au type Mime trouvé par analyse de l'image, et non pas l'extension du fichier image.
Et ceci même si l'extension était correcte, par exemple .JPG devient .jpg.
Bernard

OpenOffice.org 1.1.5 fr / Apache OpenOffice 4.1.1 / LibreOffice 5.0.5.2 (X64)
MS-Windows 7 SP1 64bits Familial
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 06:54
Localisation : CATALUNYA
Contact :

Re: [Writer] Exporter sur disque les images intégrées

Message par Churay »

yeap ;)

Si je suis bien : l'entête mime reste une valeur sûre (en y réfléchissant bien : on pourrait s'y attendre), même si on zappe carrément la gestion de l'extension.
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
Peyton
Membre prOOscrit
Messages : 6
Inscription : 22 mai 2021 17:51

Re: [Writer] Exporter sur disque les images intégrées

Message par Peyton »

:bravo:
La modération vous a écrit: Commentaire inutile. Merci de vous abstenir.

OpenOffice 2.4
Répondre