Page 1 sur 1

[Résolu][Writer] Convertir des images SVM en PNG

Publié : 28 déc. 2011 16:19
par webber
Bonjour,

Bonnes fêtes à toutes et à tous.

Je viens vers vous car j'ai une macro permettant d'exporter les images interne d'un fichier ODT. Lorsque les images sont au format PNG ou JPG, tout est OK, je peux les réutiliser.
Des fois, j'ai à l'exportation des images au format SVM (StarView Metafile). Est-ce possible de convertir ces images dans ma macro au format SVM en PNG via une procédure OOo ?
Manuellement via un clic droit sur l'image, lorsque l'on fait "enregistrer les images...", OOo nous propose le format PNG et cela fonctionne. Est-ce donc possible de la faire via la macro ?

Merci !

N.B. Je vous joins un fichier test.

Re: [Writer] Convertir des images SVM en PNG

Publié : 28 déc. 2011 17:40
par bm92
Bonsoir,
webber a écrit :Manuellement via un clic droit sur l'image, lorsque l'on fait "enregistrer les images...", OOo nous propose le format PNG et cela fonctionne.
Quand on fait ça, OOo affiche un panneau intitulé : Export d'image.
Exporter une forme ou une image est décrit dans le livre Programmation OpenOffice.org et LibreOffice, chapitre 7, tu devrais pouvoir l'adapter à ton cas.

Re: [Writer] Convertir des images SVM en PNG

Publié : 28 déc. 2011 21:26
par webber
Bonsoir,

Merci pou votre réponse, mais je n'y arrive pas. J'ai essayé ce code adapté du livre

Code : Tout sélectionner

Sub exporterPNG()
	Dim monDocument As Object
	Dim props(2)    As New com.sun.star.beans.PropertyValue
	Dim opts(1)     As New com.sun.star.beans.PropertyValue
	Dim serv        As Object, typeMime As String, resultat As Boolean
	
	monDocument = ThisComponent
	maForme     = monDocument.CurrentSelection(0)
	serv = CreateUnoService("com.sun.star.drawing.GraphicExportFilter")
	serv.setSourceDocument(maForme)
	props(0).Name  = "URL"
	props(0).Value = ConvertToURL("C:\Temp\test.png")
	props(1).Name  = "MediaType"
	props(1).Value = "image/png"
	props(2).Name  = "FilterData"
'	props(2).Value = opts()
	resultat       = serv.filter(props())
	
	if resultat then
		msgbox("Exportation terminée")
	else
		msgbox("Exportation échouée", 16)
	End if

End Sub
Mais j'obtiens un message d'erreur comme le montre l'image.

Merci

Re: [Writer] Convertir des images SVM en PNG

Publié : 29 déc. 2011 08:25
par bm92
Bonjour,
Cela m'a surpris d'abord, mais en relisant les explications du livre je trouve :
Le livre a écrit :Il est possible d'exporter une forme ou une image contenue dans un document Calc, Draw, Impress. Depuis un document Writer il n'est pas possible d'exporter une image car cet objet n'a pas les caractéristiques nécessaires (...)
Contournement:
  • récupérer le fichier image du document Writer,
  • créer un nouveau document Draw (non visible)
  • insérer l'image dans le document Draw
  • exporter l'image depuis Draw
  • fermer le document Draw.
Bon courage.

Re: [Writer] Convertir des images SVM en PNG

Publié : 29 déc. 2011 11:27
par Dude
Salut,

Pour rester uniquement dans Writer, on sélectionne l'image SVM.
On s'aperçoit qu'en faisant un copier > collage spécial, on peut choisir le format Bitmap.
Une fois le document enregistré, l'image est au format PNG.

Partant de là, l'enregistreur de macro doit faire l'affaire pour avoir un code exploitable.

Re: [Writer] Convertir des images SVM en PNG

Publié : 29 déc. 2011 12:15
par webber
Merci pour vos réponses.

Rester à trouver comment faire ça en OOoBasics :D !

La solution de contournement de bm92 est pas mal, mais comme je peux avoir des documents qui ont plus d'une vingtaine d'images svm, je ne sais pas si c'est vraiment optimal.
Pour la solution de dude, comment faire un copier/collage spécial en ooobasics, je n'ai pas trouvé la solution dans le livre ?

Merci !

Re: [Writer] Convertir des images SVM en PNG

Publié : 30 déc. 2011 10:01
par spYre
Bonjour webber,

Le service GraphicProvider semble pouvoir le faire.
Un exemple, adapté à ton fichier :

Code : Tout sélectionner

Sub Main
	doc = ThisComponent
	urlExport = convertToUrl("C:\le_chemin_vers\monfichier.png")
	image = doc.GraphicObjects(0).Graphic
	dim props(1) as new com.sun.star.beans.PropertyValue
	props(0).name = "URL"
	props(0).value = urlExport
	props(1).name = "MimeType"
	props(1).value = "image/png"
	s = createUnoService("com.sun.star.graphic.GraphicProvider")
	s.storeGraphic(image, props())
End Sub
Cordialement.

Re: [Writer] Convertir des images SVM en PNG

Publié : 30 déc. 2011 14:42
par bm92
Bonjour spYre,
J'ai encore appris quelque chose :bravo:

Re: [Writer] Convertir des images SVM en PNG

Publié : 30 déc. 2011 15:11
par webber
Voici une version 3 de mon fichier de test.

Je l'ai adapté avec le code de spYre :super: .

J'ai l'impression qu'il y a un bogue. Des fois, il m'exporte les images avec une taille de 1ko, donc rien à l'intérieur, images avec juste un fond blanc.
Je n'arrive pas à reproduire le bogue systématiquement. C'est aléatoire. Si vous avez une idée, je suis preneur, je fais peut être de mauvaises manipulations !

Merci !

Re: [Writer] Convertir des images SVM en PNG

Publié : 31 déc. 2011 14:49
par spYre
bm92 a écrit :Bonjour spYre,
J'ai encore appris quelque chose :bravo:
Une goutte d'eau par rapport à ce que m'a apporté le seul Xray... :oops: .
webber a écrit :J'ai l'impression qu'il y a un bogue. Des fois, il m'exporte les images avec une taille de 1ko, donc rien à l'intérieur, images avec juste un fond blanc.
En effet. Pour reproduire, avec le fichier simplifié ci-joint :
- ouvrir le document
- exporter les images à partir du bouton -> OK
- faire une modification quelconque du document
- sauvegarder sans fermer
- exporter les images à partir du bouton -> fichiers "blancs".

Plus curieux encore : un coup de Xray avant chaque export résout le problème !

Re: [Résolu][Writer] Convertir des images SVM en PNG

Publié : 01 janv. 2012 15:38
par webber
Effectivement, ta solution me permet de reproduire le bogue.
Le souci est que je ne peux pas passer par xray, ce ne serait pas une solution portable pour moi.

Néanmoins, je viens de trouver une solution qui évite la reproduction du bogue :
ouverture du fichier ;
clic sur Ok pour exportation => OK ;
modification quelconque dans le fichier ;
sauvegarde du fichier (sans fermeture du fichier) ;
clic sur Ok pour exportation => Images blanches ;
Recharger (Menu Fichier -> Recharger) ;
clic sur Ok pour exportation => Ok.

J'ai donc l'impression que le fait de recharger le document permet de ne plus avoir de soucis. Pouvez-vous faire des tests de votre coté pour me confirmer la solution !

Voici une autre version du document dans lequel j'effectue un reload avant export, mais il y a encore un comportement étrange.
Faites une modification dans le fichier, sauvegardez et faites un clic sur le bouton. la macro effectue un reload, mais les images sont toujours vide.
Si vous re-cliquez une deuxième fois, les images sons OK :roll: !

Re: [Writer] Convertir des images SVM en PNG

Publié : 01 janv. 2012 17:02
par spYre
Un contournement qui semble fonctionner : utiliser la méthode queryGraphic du service GraphicProvider pour obtenir l'image à exporter, plutôt que l'objet fourni par getGraphicObjects.

Re: [Writer] Convertir des images SVM en PNG

Publié : 01 janv. 2012 17:56
par webber
:bravo: :super:

Je ne peux te dire que merci spYre car ça fonctionne maintenant à merveille.

Il faudrait en faire un suprême code car ça en aidera plus d'un.