Lire une image sauvegardée dans une colonne d'un recordset et l'insérer dans un document Writer

Bonjour,
J’ai créé une base dans laquelle j’ai sauvegardé des images dans une colonne de table. Pour cela j’ai utilisé le contrôle image d’un formulaire. Mais je m’aperçois maintenant que lorsque je veux accéder à cette image par programmation, je peux lire le contenu binaire de la colonne, mais sans savoir quel est le type de l’image sauvegardée je ne sais pas dans quel format de fichier image exporter ce contenu binaire ? Est-ce une image .png, .bmp … ?
Aussi j’ai compris que pour intégrer directement le contenu binaire de mon image dans un document Writer je devrais d’abord exporter l’image de ma base de donnée dans un fichier externe, puis insérer cette image en utilisant son URL n’importe où dans ma page, puis seulement après cela je pourrais copier le contenu sous forme de BMP pour intégrer vraiment le contenu binaire dans mon document Writer, et enfin je supprime la première image utilisant le lien URL … N’existe t-il vraiment encore aucun autre moyen pour importer plus simplement le contenu de mon image directement depuis ma table vers le contenu de mon document Writer ? Le rapport à bande de Base intègre bien des images, mais n’utilise t-il pas une méthode plus simple ?

Ma question porte sur la première étape de ce processus d’intégration d’image : Comment exporter dans un fichier mon image contenue dans une colonne de ma table si je ne connais pas le format de cette image ? Comment décider de l’extension de mon fichier ?

Merci par avance pour votre réponse …

Bonjour @gelinp

Il n’est pas nécessaire de connaître le format initial de l’image avant son import dans la base. Le programme ci-dessous (lancé par bouton depuis un formulaire) :

  • boucle sur les enregistrements et pour chaque enregistrement
  • crée un document writer
  • insère dans ce dernier l’image trouvée dans le champ “image”
option explicit

const sImageName = "image"

sub ExportImagesToWriter(oEvent)

dim oDoc as object, oText as object, oImage as object, oGP as object
dim oForm as object, oCurseur as Object

dim pv(0) as new com.sun.star.beans.PropertyValue

dim lImageIndex as long
dim oStream

oForm = oEvent.Source.getModel.getParent
oForm.beforefirst

lImageIndex = oForm.findColumn(sImageName)

do while  oForm.next

	oStream = oForm.getBinaryStream(lImageIndex)	
	
	oDoc = stardesktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, array())
	oText = oDoc.Text
	oCurseur = oText.createTextCursor()
	oImage = ThisComponent.createInstance("com.sun.star.text.GraphicObject")

	pv(0).Name = "InputStream"                                                             
	pv(0).Value = oStream   

   oGP = createUnoService("com.sun.star.graphic.GraphicProvider")
   oImage.Graphic = oGP.queryGraphic(pv())
   oImage.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PARAGRAPH
   oText.insertTextContent(oCurseur, oImage, False)
   oImage.Size = oImage.ActualSize
loop

end sub

[Modifié le 20-03-22]

Restauration de la taille des images (au lieu d’une taille fixe précédemment)

Cordialement